Merge pull request #14258 from rintaro/basic-json-null

[JSONSerialization] Add ability to emit 'null' value.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f155d82..86a59a2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -300,6 +300,10 @@
   "Build the standard libraries, overlays, and runtime with normal arguments at +0"
   FALSE)
 
+option(SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS
+  "Enable runtime function counters and expose the API."
+  FALSE)
+
 #
 # End of user-configurable options.
 #
diff --git a/benchmark/scripts/Benchmark_RuntimeLeaksRunner.in b/benchmark/scripts/Benchmark_RuntimeLeaksRunner.in
index a8c4980..008d4ff 100644
--- a/benchmark/scripts/Benchmark_RuntimeLeaksRunner.in
+++ b/benchmark/scripts/Benchmark_RuntimeLeaksRunner.in
@@ -81,29 +81,35 @@
     def prepare_input(self, name):
         return {'num_samples': self.num_samples, 'num_iters': self.num_iters}
 
+    def run_test_inner(self, data, num_iters):
+        p = subprocess.Popen([
+            data['path'],
+            "--num-samples={}".format(data['num_samples']),
+            "--num-iters={}".format(num_iters), data['test_name']],
+            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        error_out = p.communicate()[1].split("\n")
+        result = p.returncode
+        if result is None:
+            raise RuntimeError("Expected one line of output")
+        if result != 0:
+            raise RuntimeError("Process segfaulted")
+        return error_out
+
     def run_test(self, data, num_iters):
         try:
-            p = subprocess.Popen([
-                data['path'],
-                "--num-samples={}".format(data['num_samples']),
-                "--num-iters={}".format(num_iters), data['test_name']],
-                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-            error_out = p.communicate()[1].split("\n")
-            result = p.returncode
-            if result is None:
-                raise RuntimeError("Expected one line of output")
-            if result != 0:
-                raise RuntimeError("Process segfaulted")
-        except Exception:
-            sys.stderr.write("Child Process Failed! (%s,%s)\n" % (
-                data['path'], data['test_name']))
+            args = [data, num_iters]
+            result = perf_test_driver.run_with_timeout(self.run_test_inner,
+                                                       args)
+        except Exception, e:
+            sys.stderr.write("Child Process Failed! (%s,%s). Error: %s\n" % (
+                data['path'], data['test_name'], e))
             sys.stderr.flush()
             return None
 
         try:
             # We grab the second line since swift globals get lazily created in
             # the first iteration.
-            d = json.loads(error_out[1])
+            d = json.loads(result[1])
             d['objc_objects'] = [x for x in d['objc_objects']
                                  if x not in IGNORABLE_GLOBAL_OBJC_CLASSES]
             d['objc_count'] = len(d['objc_objects'])
diff --git a/benchmark/scripts/perf_test_driver/perf_test_driver.py b/benchmark/scripts/perf_test_driver/perf_test_driver.py
index 89a5562..9cdafcc 100644
--- a/benchmark/scripts/perf_test_driver/perf_test_driver.py
+++ b/benchmark/scripts/perf_test_driver/perf_test_driver.py
@@ -57,6 +57,24 @@
         print(fmt.format(self.get_name(), self.get_result()))
 
 
+def run_with_timeout(func, args):
+    # We timeout after 10 minutes.
+    timeout_seconds = 10 * 60
+
+    # We just use this to create a timeout since we use an older python. Once
+    # we update to use python >= 3.3, use the timeout API on communicate
+    # instead.
+    import multiprocessing.dummy
+    fakeThreadPool = multiprocessing.dummy.Pool(1)
+    try:
+        result = fakeThreadPool.apply_async(func, args=args)
+        return result.get(timeout_seconds)
+    except multiprocessing.TimeoutError:
+        fakeThreadPool.terminate()
+        raise RuntimeError("Child process aborted due to timeout. "
+                           "Timeout: %s seconds" % timeout_seconds)
+
+
 def _unwrap_self(args):
     return type(args[0]).process_input(*args)
 
diff --git a/benchmark/utils/main.swift b/benchmark/utils/main.swift
index 24c86ae..e2dfeca 100644
--- a/benchmark/utils/main.swift
+++ b/benchmark/utils/main.swift
@@ -169,9 +169,9 @@
 registerBenchmark(ByteSwap)
 registerBenchmark(COWTree)
 registerBenchmark(CString)
-registerBenchmark(CSVParsing)
-registerBenchmark(CSVParsingAlt)
-registerBenchmark(CSVParsingAltIndices)
+// registerBenchmark(CSVParsing)
+// registerBenchmark(CSVParsingAlt)
+// registerBenchmark(CSVParsingAltIndices)
 registerBenchmark(Calculator)
 registerBenchmark(CaptureProp)
 registerBenchmark(CharacterLiteralsLarge)
diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake
index 5d87b0f..17fea05 100644
--- a/cmake/modules/AddSwift.cmake
+++ b/cmake/modules/AddSwift.cmake
@@ -255,6 +255,10 @@
   else()
     list(APPEND result "-DNDEBUG")
   endif()
+  
+  if(SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS)
+    list(APPEND result "-DSWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS")
+  endif()
 
   if(CFLAGS_ANALYZE_CODE_COVERAGE)
     list(APPEND result "-fprofile-instr-generate"
@@ -316,6 +320,10 @@
   if (SWIFT_ENABLE_GUARANTEED_NORMAL_ARGUMENTS)
     list(APPEND result "-Xfrontend" "-enable-guaranteed-normal-arguments")
   endif()
+  
+  if(SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS)
+    list(APPEND result "-D" "SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS")
+  endif()
 
   set("${result_var_name}" "${result}" PARENT_SCOPE)
 endfunction()
diff --git a/include/swift/Runtime/Casting.h b/include/swift/Runtime/Casting.h
index a49ac66..f634a07 100644
--- a/include/swift/Runtime/Casting.h
+++ b/include/swift/Runtime/Casting.h
@@ -37,13 +37,12 @@
 ///
 /// \return true if the cast succeeded. Depending on the flags,
 ///   swift_dynamicCast may fail rather than return false.
-SWIFT_RT_ENTRY_VISIBILITY
+SWIFT_RUNTIME_EXPORT
 bool
 swift_dynamicCast(OpaqueValue *dest, OpaqueValue *src,
                   const Metadata *srcType,
                   const Metadata *targetType,
-                  DynamicCastFlags flags)
-    SWIFT_CC(RegisterPreservingCC);
+                  DynamicCastFlags flags);
 
 /// \brief Checked dynamic cast to a Swift class type.
 ///
@@ -52,10 +51,9 @@
 /// a Swift class type.
 ///
 /// \returns the object if the cast succeeds, or null otherwise.
-SWIFT_RT_ENTRY_VISIBILITY
+SWIFT_RUNTIME_EXPORT
 const void *
-swift_dynamicCastClass(const void *object, const ClassMetadata *targetType)
-    SWIFT_CC(RegisterPreservingCC);
+swift_dynamicCastClass(const void *object, const ClassMetadata *targetType);
 
 /// \brief Unconditional, checked dynamic cast to a Swift class type.
 ///
diff --git a/include/swift/Runtime/Config.h b/include/swift/Runtime/Config.h
index bff25c0..0c4eff1 100644
--- a/include/swift/Runtime/Config.h
+++ b/include/swift/Runtime/Config.h
@@ -96,14 +96,14 @@
 // Annotation for specifying a calling convention of
 // a runtime function. It should be used with declarations
 // of runtime functions like this:
-// void runtime_function_name() SWIFT_CC(RegisterPreservingCC)
+// void runtime_function_name() SWIFT_CC(swift)
 #define SWIFT_CC(CC) SWIFT_CC_##CC
 
-#define SWIFT_CC_preserve_most __attribute__((preserve_most))
-#define SWIFT_CC_preserve_all  __attribute__((preserve_all))
+// SWIFT_CC(c) is the C calling convention.
 #define SWIFT_CC_c
 
-// Define SWIFT_CC_swift in terms of the Swift CC for runtime functions.
+// SWIFT_CC(swift) is the Swift calling convention.
+// FIXME: the next comment is false.
 // Functions outside the stdlib or runtime that include this file may be built 
 // with a compiler that doesn't support swiftcall; don't define these macros
 // in that case so any incorrect usage is caught.
@@ -119,79 +119,10 @@
 #define SWIFT_INDIRECT_RESULT
 #endif
 
-#define SWIFT_CC_SwiftCC SWIFT_CC_swift
-
-// Map a logical calling convention (e.g. RegisterPreservingCC) to LLVM calling
-// convention.
-#define SWIFT_LLVM_CC(CC) SWIFT_LLVM_CC_##CC
-
-// Currently, RuntimeFunction.def uses the following calling conventions:
-// DefaultCC, RegisterPreservingCC.
-// If new runtime calling conventions are added later, they need to be mapped
-// here to something appropriate.
-
-// DefaultCC is usually the standard C calling convention.
-#define SWIFT_CC_DefaultCC SWIFT_CC_c
-#define SWIFT_CC_DefaultCC_IMPL SWIFT_CC_c
-#define SWIFT_LLVM_CC_DefaultCC llvm::CallingConv::C
-
-#define SWIFT_LLVM_CC_RegisterPreservingCC llvm::CallingConv::PreserveMost
-
-#define SWIFT_LLVM_CC_SwiftCC llvm::CallingConv::Swift
-
-// If defined, it indicates that runtime function wrappers
-// should be used on all platforms, even they do not support
-// the new calling convention which requires this.
-#define SWIFT_RT_USE_WRAPPERS_ALWAYS 1
-
-// If defined, it indicates that this calling convention is
-// supported by the current target.
-// TODO: Define it once the runtime calling convention support has
-// been integrated into clang and llvm.
-#define SWIFT_RT_USE_RegisterPreservingCC 0
-
-#if  __has_attribute(preserve_most)
-#define SWIFT_BACKEND_SUPPORTS_RegisterPreservingCC 1
-#else
-#define SWIFT_BACKEND_SUPPORTS_RegisterPreservingCC 0
-#endif
-
-
-// RegisterPreservingCC is a dedicated runtime calling convention to be used
-// when calling the most popular runtime functions.
-#if SWIFT_RT_USE_RegisterPreservingCC &&                              \
-    SWIFT_BACKEND_SUPPORTS_RegisterPreservingCC && defined(__aarch64__)
-// Targets supporting the dedicated runtime convention should use it.
-// If a runtime function is using this calling convention, it can
-// be invoked only by means of a wrapper, which performs an indirect
-// call. Wrappers are generated by the IRGen and added to object files.
-// As a result, runtime functions are invoked only indirectly from
-// the user code.
-// This is a workaround for dynamic linking issues, where a dynamic
-// linker may clobber some of the callee-saved registers defined by
-// this new calling convention when it performs lazy binding of
-// runtime functions using this new calling convention.
-#define SWIFT_CC_RegisterPreservingCC                          \
-  SWIFT_CC_preserve_most
-#define SWIFT_CC_RegisterPreservingCC_IMPL                     \
-  SWIFT_CC_preserve_most
-
-// Indicate that wrappers should be used, because it is required
-// for the calling convention to get around dynamic linking issues.
-#define SWIFT_RT_USE_WRAPPERS 1
-
-#else
-
-// Targets not supporting the dedicated runtime calling convention
-// should use the standard calling convention instead.
-// No wrappers are required in this case by the calling convention.
-#define SWIFT_CC_RegisterPreservingCC SWIFT_CC_c
-#define SWIFT_CC_RegisterPreservingCC_IMPL SWIFT_CC_c
-
-#endif
-
-// The runtime implementation uses the preserve_most convention to save
-// registers spills on the hot path.
+// SWIFT_CC(PreserveMost) is used in the runtime implementation to prevent
+// register spills on the hot path.
+// It is not safe to use for external calls; the loader's lazy function
+// binding may not save all of the registers required for this convention.
 #if __has_attribute(preserve_most) &&                                          \
     (defined(__aarch64__) || defined(__x86_64__))
 #define SWIFT_CC_PreserveMost __attribute__((preserve_most))
@@ -199,53 +130,10 @@
 #define SWIFT_CC_PreserveMost
 #endif
 
-// Generates a name of the runtime entry's implementation by
-// adding an underscore as a prefix and a suffix.
-#define SWIFT_RT_ENTRY_IMPL(Name) _##Name##_
-
-// Library internal way to invoke the implementation of a runtime entry.
-// E.g. a runtime function may be called internally via its public API
-// or via the function pointer.
-#define SWIFT_RT_ENTRY_CALL(Name) Name
-
-// Name of the symbol holding a reference to the
-// implementation of a runtime entry.
-#define SWIFT_RT_ENTRY_REF(Name) _##Name
-
-// String representation of the symbol's name.
-#define SWIFT_RT_ENTRY_REF_AS_STR(Name) "_" #Name
-
-#if defined(SWIFT_RT_USE_WRAPPERS_ALWAYS)
-#undef SWIFT_RT_USE_WRAPPERS
-#define SWIFT_RT_USE_WRAPPERS
-#endif
-
-#if defined(SWIFT_RT_USE_WRAPPERS)
-
-// Both the runtime functions and their implementation are hidden and
-// can be directly referenced only inside the runtime library.
-// User code can access these runtime entries only indirectly
-// via a global function pointer.
-// NOTE: In principle, entries may have LLVM_LIBRARY_VISIBILITY,
-// because they are never called directly from the code
-// produced by IRGen.
-// But some of the runtime entries are invoked directly from
-// the foundation. Therefore they should be visible.
-#define SWIFT_RT_ENTRY_VISIBILITY SWIFT_RUNTIME_EXPORT
-#define SWIFT_RT_ENTRY_IMPL_VISIBILITY LLVM_LIBRARY_VISIBILITY
-
-// Prefix of wrappers generated for runtime functions.
-#define SWIFT_WRAPPER_PREFIX "swift_rt_"
-
-#else
-
-// Runtime functions are exported, because it should be possible
-// to invoke them directly from the user code. But internal
-// implementations of runtime functions do not need to be exported.
-#define SWIFT_RT_ENTRY_VISIBILITY SWIFT_RUNTIME_EXPORT
-#define SWIFT_RT_ENTRY_IMPL_VISIBILITY LLVM_LIBRARY_VISIBILITY
-
-#endif
+// This is the DefaultCC value used by the compiler.
+// FIXME: the runtime's code does not honor DefaultCC
+// so changing this value is not sufficient.
+#define SWIFT_DEFAULT_LLVM_CC llvm::CallingConv::C
 
 // These are temporary macros during the +0 cc exploration to cleanly support
 // both +0 and +1 in the runtime.
diff --git a/include/swift/Runtime/Enum.h b/include/swift/Runtime/Enum.h
index 2b514ae..f7d94fb 100644
--- a/include/swift/Runtime/Enum.h
+++ b/include/swift/Runtime/Enum.h
@@ -67,12 +67,10 @@
 /// \returns -1 if the payload case is inhabited. If an empty case is inhabited,
 ///          returns a value greater than or equal to zero and less than
 ///          emptyCases.
-SWIFT_RT_ENTRY_VISIBILITY
+SWIFT_RUNTIME_EXPORT
 int swift_getEnumCaseSinglePayload(const OpaqueValue *value,
                                    const Metadata *payload,
-                                   unsigned emptyCases)
-  SWIFT_CC(RegisterPreservingCC);
-
+                                   unsigned emptyCases);
 
 
 /// \brief Store the tag value for the given case into a single-payload enum,
@@ -86,12 +84,11 @@
 ///                    case, or a value greater than or equal to zero and less
 ///                    than emptyCases for an empty case.
 /// \param emptyCases - the number of empty cases in the enum.
-SWIFT_RT_ENTRY_VISIBILITY
+SWIFT_RUNTIME_EXPORT
 void swift_storeEnumTagSinglePayload(OpaqueValue *value,
                                      const Metadata *payload,
                                      int whichCase,
-                                     unsigned emptyCases)
-  SWIFT_CC(RegisterPreservingCC);
+                                     unsigned emptyCases);
 
 /// \brief Initialize the type metadata for a generic, multi-payload
 ///        enum instance.
diff --git a/include/swift/Runtime/HeapObject.h b/include/swift/Runtime/HeapObject.h
index 6a971d1..54dac0e 100644
--- a/include/swift/Runtime/HeapObject.h
+++ b/include/swift/Runtime/HeapObject.h
@@ -59,17 +59,10 @@
 ///
 /// POSSIBILITIES: The argument order is fair game.  It may be useful
 /// to have a variant which guarantees zero-initialized memory.
-SWIFT_RT_ENTRY_VISIBILITY
+SWIFT_RUNTIME_EXPORT
 HeapObject *swift_allocObject(HeapMetadata const *metadata,
                               size_t requiredSize,
-                              size_t requiredAlignmentMask)
-    SWIFT_CC(RegisterPreservingCC);
-
-SWIFT_RUNTIME_EXPORT
-HeapObject *(*SWIFT_CC(RegisterPreservingCC) _swift_allocObject)(
-                                              HeapMetadata const *metadata,
-                                              size_t requiredSize,
-                                              size_t requiredAlignmentMask);
+                              size_t requiredAlignmentMask);
 
 /// Initializes the object header of a stack allocated object.
 ///
@@ -168,9 +161,6 @@
 SWIFT_RUNTIME_EXPORT
 BoxPair::Return swift_allocBox(Metadata const *type);
 
-SWIFT_RUNTIME_EXPORT
-BoxPair::Return (*_swift_allocBox)(Metadata const *type);
-
 /// Performs a uniqueness check on the pointer to a box structure. If the check
 /// fails allocates a new box and stores the pointer in the buffer.
 ///
@@ -189,16 +179,13 @@
 //
 // An "alignment mask" is just the alignment (a power of 2) minus 1.
 
-SWIFT_RT_ENTRY_VISIBILITY
-void *swift_slowAlloc(size_t bytes, size_t alignMask)
-     SWIFT_CC(RegisterPreservingCC);
-
+SWIFT_RUNTIME_EXPORT
+void *swift_slowAlloc(size_t bytes, size_t alignMask);
 
 // If the caller cannot promise to zero the object during destruction,
 // then call these corresponding APIs:
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_slowDealloc(void *ptr, size_t bytes, size_t alignMask)
-     SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+void swift_slowDealloc(void *ptr, size_t bytes, size_t alignMask);
 
 /// Atomically increments the retain count of an object.
 ///
@@ -216,54 +203,27 @@
 ///      - maybe a variant that can assume a non-null object
 /// It may also prove worthwhile to have this use a custom CC
 /// which preserves a larger set of registers.
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject *swift_retain(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+HeapObject *swift_retain(HeapObject *object);
 
 SWIFT_RUNTIME_EXPORT
-HeapObject *(*SWIFT_CC(RegisterPreservingCC) _swift_retain)(HeapObject *object);
-
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject *swift_retain_n(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC);
+HeapObject *swift_retain_n(HeapObject *object, uint32_t n);
 
 SWIFT_RUNTIME_EXPORT
-HeapObject *(*SWIFT_CC(RegisterPreservingCC)
-                 _swift_retain_n)(HeapObject *object, uint32_t n);
-
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject *swift_nonatomic_retain(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC);
+HeapObject *swift_nonatomic_retain(HeapObject *object);
 
 SWIFT_RUNTIME_EXPORT
-HeapObject *(*SWIFT_CC(RegisterPreservingCC)
-                 _swift_nonatomic_retain)(HeapObject *object);
-
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject* swift_nonatomic_retain_n(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC);
-
-SWIFT_RUNTIME_EXPORT
-HeapObject *(*SWIFT_CC(RegisterPreservingCC)
-                 _swift_nonatomic_retain_n)(HeapObject *object, uint32_t n);
+HeapObject* swift_nonatomic_retain_n(HeapObject *object, uint32_t n);
 
 /// Atomically increments the reference count of an object, unless it has
 /// already been destroyed. Returns nil if the object is dead.
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject *swift_tryRetain(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC);
-
 SWIFT_RUNTIME_EXPORT
-HeapObject * (* SWIFT_CC(RegisterPreservingCC) _swift_tryRetain)(HeapObject *);
+HeapObject *swift_tryRetain(HeapObject *object);
 
 /// Returns true if an object is in the process of being deallocated.
 SWIFT_RUNTIME_EXPORT
 bool swift_isDeallocating(HeapObject *object);
 
-SWIFT_RUNTIME_EXPORT
-bool (* SWIFT_CC(RegisterPreservingCC) _swift_isDeallocating)(HeapObject *);
-
-
 /// Attempts to atomically pin an object and increment its reference
 /// count.  Returns nil if the object was already pinned.
 ///
@@ -271,25 +231,21 @@
 /// calling swift_unpin on the return value.
 ///
 /// The object reference may not be nil.
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject *swift_tryPin(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+HeapObject *swift_tryPin(HeapObject *object);
 
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject *swift_nonatomic_tryPin(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+HeapObject *swift_nonatomic_tryPin(HeapObject *object);
 
 /// Given that an object is pinned, atomically unpin it and decrement
 /// the reference count.
 ///
 /// The object reference may be nil (to simplify the protocol).
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_unpin(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+void swift_unpin(HeapObject *object);
 
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_nonatomic_unpin(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+void swift_nonatomic_unpin(HeapObject *object);
 
 /// Atomically decrements the retain count of an object.  If the
 /// retain count reaches zero, the object is destroyed as follows:
@@ -306,32 +262,16 @@
 ///      - a variant that can safely use non-atomic operations
 ///      - maybe a variant that can assume a non-null object
 /// It's unlikely that a custom CC would be beneficial here.
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_release(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+void swift_release(HeapObject *object);
 
 SWIFT_RUNTIME_EXPORT
-void (*SWIFT_CC(RegisterPreservingCC)
-                     _swift_release)(HeapObject *object);
-
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_nonatomic_release(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC);
-
-SWIFT_RUNTIME_EXPORT
-void (*SWIFT_CC(RegisterPreservingCC)
-                     _swift_nonatomic_release)(HeapObject *object);
-
+void swift_nonatomic_release(HeapObject *object);
 
 /// Atomically decrements the retain count of an object n times. If the retain
 /// count reaches zero, the object is destroyed
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_release_n(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC);
-
 SWIFT_RUNTIME_EXPORT
-void (*SWIFT_CC(RegisterPreservingCC)
-                     _swift_release_n)(HeapObject *object, uint32_t n);
+void swift_release_n(HeapObject *object, uint32_t n);
 
 /// Sets the RC_DEALLOCATING_FLAG flag. This is done non-atomically.
 /// The strong reference count of \p object must be 1 and no other thread may
@@ -339,13 +279,8 @@
 SWIFT_RUNTIME_EXPORT
 void swift_setDeallocating(HeapObject *object);
 
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_nonatomic_release_n(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC);
-
 SWIFT_RUNTIME_EXPORT
-void (*SWIFT_CC(RegisterPreservingCC)
-                     _swift_nonatomic_release_n)(HeapObject *object, uint32_t n);
+void swift_nonatomic_release_n(HeapObject *object, uint32_t n);
 
 // Refcounting observation hooks for memory tools. Don't use these.
 SWIFT_RUNTIME_EXPORT
@@ -387,21 +322,19 @@
 
 /// Is this native Swift pointer a non-null unique or pinned reference
 /// to an object?
-SWIFT_RT_ENTRY_VISIBILITY
-bool swift_isUniquelyReferencedOrPinned_native(
-  const struct HeapObject *) SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+bool swift_isUniquelyReferencedOrPinned_native(const struct HeapObject *);
 
 /// Is this non-null native Swift pointer a unique reference to
 /// an object?
-SWIFT_RT_ENTRY_VISIBILITY
-bool swift_isUniquelyReferenced_nonNull_native(
-  const struct HeapObject *) SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+bool swift_isUniquelyReferenced_nonNull_native(const struct HeapObject *);
 
 /// Does this non-null native Swift pointer refer to an object that
 /// is either uniquely referenced or pinned?
-SWIFT_RT_ENTRY_VISIBILITY
+SWIFT_RUNTIME_EXPORT
 bool swift_isUniquelyReferencedOrPinned_nonNull_native(
-  const struct HeapObject *) SWIFT_CC(RegisterPreservingCC);
+  const struct HeapObject *);
 
 /// Deallocate the given memory.
 ///
@@ -418,10 +351,9 @@
 /// POSSIBILITIES: It may be useful to have a variant which
 /// requires the object to have been fully zeroed from offsets
 /// sizeof(SwiftHeapObject) to allocatedSize.
-SWIFT_RT_ENTRY_VISIBILITY
+SWIFT_RUNTIME_EXPORT
 void swift_deallocObject(HeapObject *object, size_t allocatedSize,
-                         size_t allocatedAlignMask)
-    SWIFT_CC(RegisterPreservingCC);
+                         size_t allocatedAlignMask);
 
 /// Deallocate an uninitialized object with a strong reference count of +1.
 ///
@@ -434,10 +366,9 @@
 /// \param allocatedAlignMask - the alignment requirement that was passed
 ///   to allocObject
 ///
-SWIFT_RT_ENTRY_VISIBILITY
+SWIFT_RUNTIME_EXPORT
 void swift_deallocUninitializedObject(HeapObject *object, size_t allocatedSize,
-                                      size_t allocatedAlignMask)
-    SWIFT_CC(RegisterPreservingCC);
+                                      size_t allocatedAlignMask);
 
 /// Deallocate the given memory.
 ///
@@ -545,70 +476,58 @@
 };
 
 /// Increment the unowned retain count.
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject *swift_unownedRetain(HeapObject *value)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+HeapObject *swift_unownedRetain(HeapObject *value);
 
 /// Decrement the unowned retain count.
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_unownedRelease(HeapObject *value)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+void swift_unownedRelease(HeapObject *value);
 
 /// Increment the unowned retain count.
-SWIFT_RT_ENTRY_VISIBILITY
-void *swift_nonatomic_unownedRetain(HeapObject *value)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+void *swift_nonatomic_unownedRetain(HeapObject *value);
 
 /// Decrement the unowned retain count.
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_nonatomic_unownedRelease(HeapObject *value)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+void swift_nonatomic_unownedRelease(HeapObject *value);
 
 /// Increment the unowned retain count by n.
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject *swift_unownedRetain_n(HeapObject *value, int n)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+HeapObject *swift_unownedRetain_n(HeapObject *value, int n);
 
 /// Decrement the unowned retain count by n.
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_unownedRelease_n(HeapObject *value, int n)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+void swift_unownedRelease_n(HeapObject *value, int n);
 
 /// Increment the unowned retain count by n.
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject *swift_nonatomic_unownedRetain_n(HeapObject *value, int n)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+HeapObject *swift_nonatomic_unownedRetain_n(HeapObject *value, int n);
 
 /// Decrement the unowned retain count by n.
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_nonatomic_unownedRelease_n(HeapObject *value, int n)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+void swift_nonatomic_unownedRelease_n(HeapObject *value, int n);
 
 /// Increment the strong retain count of an object, aborting if it has
 /// been deallocated.
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject *swift_unownedRetainStrong(HeapObject *value)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+HeapObject *swift_unownedRetainStrong(HeapObject *value);
 
 /// Increment the strong retain count of an object, aborting if it has
 /// been deallocated.
-SWIFT_RT_ENTRY_VISIBILITY
-HeapObject *swift_nonatomic_unownedRetainStrong(HeapObject *value)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+HeapObject *swift_nonatomic_unownedRetainStrong(HeapObject *value);
 
 /// Increment the strong retain count of an object which may have been
 /// deallocated, aborting if it has been deallocated, and decrement its
 /// unowned reference count.
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_unownedRetainStrongAndRelease(HeapObject *value)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+void swift_unownedRetainStrongAndRelease(HeapObject *value);
 
 /// Increment the strong retain count of an object which may have been
 /// deallocated, aborting if it has been deallocated, and decrement its
 /// unowned reference count.
-SWIFT_RT_ENTRY_VISIBILITY
-void swift_nonatomic_unownedRetainStrongAndRelease(HeapObject *value)
-    SWIFT_CC(RegisterPreservingCC);
+SWIFT_RUNTIME_EXPORT
+void swift_nonatomic_unownedRetainStrongAndRelease(HeapObject *value);
 
 /// Aborts if the object has been deallocated.
 SWIFT_RUNTIME_EXPORT
@@ -766,21 +685,21 @@
 /*****************************************************************************/
 
 SWIFT_RUNTIME_EXPORT
-void *swift_bridgeObjectRetain(void *value)
-    SWIFT_CC(DefaultCC);
-/// Increment the strong retain count of a bridged object by n.
-SWIFT_RUNTIME_EXPORT
-void *swift_bridgeObjectRetain_n(void *value, int n)
-    SWIFT_CC(DefaultCC);
-
-SWIFT_RUNTIME_EXPORT
-void *swift_nonatomic_bridgeObjectRetain(void *value)
-    SWIFT_CC(DefaultCC);
+void *swift_bridgeObjectRetain(void *value);
 
 /// Increment the strong retain count of a bridged object by n.
 SWIFT_RUNTIME_EXPORT
-void *swift_nonatomic_bridgeObjectRetain_n(void *value, int n)
-    SWIFT_CC(DefaultCC);
+void *swift_bridgeObjectRetain_n(void *value, int n);
+
+
+SWIFT_RUNTIME_EXPORT
+void *swift_nonatomic_bridgeObjectRetain(void *value);
+
+
+/// Increment the strong retain count of a bridged object by n.
+SWIFT_RUNTIME_EXPORT
+void *swift_nonatomic_bridgeObjectRetain_n(void *value, int n);
+
 
 /*****************************************************************************/
 /************************ UNKNOWN REFERENCE-COUNTING *************************/
@@ -791,45 +710,39 @@
 /// Increment the strong retain count of an object which might not be a native
 /// Swift object.
 SWIFT_RUNTIME_EXPORT
-void *swift_unknownRetain(void *value)
-    SWIFT_CC(DefaultCC);
+void *swift_unknownRetain(void *value);
+
 /// Increment the strong retain count of an object which might not be a native
 /// Swift object by n.
 SWIFT_RUNTIME_EXPORT
-void *swift_unknownRetain_n(void *value, int n)
-    SWIFT_CC(DefaultCC);
+void *swift_unknownRetain_n(void *value, int n);
 
 /// Increment the strong retain count of an object which might not be a native
 /// Swift object.
 SWIFT_RUNTIME_EXPORT
-void *swift_nonatomic_unknownRetain(void *value)
-    SWIFT_CC(DefaultCC);
+void *swift_nonatomic_unknownRetain(void *value);
+
 /// Increment the strong retain count of an object which might not be a native
 /// Swift object by n.
 SWIFT_RUNTIME_EXPORT
-void *swift_nonatomic_unknownRetain_n(void *value, int n)
-    SWIFT_CC(DefaultCC);
+void *swift_nonatomic_unknownRetain_n(void *value, int n);
 
 
 #else
 
-static inline void *swift_unknownRetain(void *value)
-    SWIFT_CC(DefaultCC) {
+static inline void *swift_unknownRetain(void *value) {
   return swift_retain(static_cast<HeapObject *>(value));
 }
 
-static inline void *swift_unknownRetain_n(void *value, int n)
-    SWIFT_CC(DefaultCC) {
+static inline void *swift_unknownRetain_n(void *value, int n) {
   return swift_retain_n(static_cast<HeapObject *>(value), n);
 }
 
-static inline void *swift_nonatomic_unknownRetain(void *value)
-    SWIFT_CC(DefaultCC) {
+static inline void *swift_nonatomic_unknownRetain(void *value) {
   return swift_nonatomic_retain(static_cast<HeapObject *>(value));
 }
 
-static inline void *swift_nonatomic_unknownRetain_n(void *value, int n)
-    SWIFT_CC(DefaultCC) {
+static inline void *swift_nonatomic_unknownRetain_n(void *value, int n) {
   return swift_nonatomic_retain_n(static_cast<HeapObject *>(value), n);
 }
 
@@ -837,64 +750,56 @@
 #endif /* SWIFT_OBJC_INTEROP */
 
 SWIFT_RUNTIME_EXPORT
-void swift_bridgeObjectRelease(void *value)
-    SWIFT_CC(DefaultCC);
+void swift_bridgeObjectRelease(void *value);
+
 /// Decrement the strong retain count of a bridged object by n.
 SWIFT_RUNTIME_EXPORT
-void swift_bridgeObjectRelease_n(void *value, int n)
-    SWIFT_CC(DefaultCC);
+void swift_bridgeObjectRelease_n(void *value, int n);
 
 SWIFT_RUNTIME_EXPORT
-void swift_nonatomic_bridgeObjectRelease(void *value)
-    SWIFT_CC(DefaultCC);
+void swift_nonatomic_bridgeObjectRelease(void *value);
+
 /// Decrement the strong retain count of a bridged object by n.
 SWIFT_RUNTIME_EXPORT
-void swift_nonatomic_bridgeObjectRelease_n(void *value, int n)
-    SWIFT_CC(DefaultCC);
+void swift_nonatomic_bridgeObjectRelease_n(void *value, int n);
 
 #if SWIFT_OBJC_INTEROP
 
 /// Decrement the strong retain count of an object which might not be a native
 /// Swift object.
 SWIFT_RUNTIME_EXPORT
-void swift_unknownRelease(void *value)
-    SWIFT_CC(DefaultCC);
+void swift_unknownRelease(void *value);
+
 /// Decrement the strong retain count of an object which might not be a native
 /// Swift object by n.
 SWIFT_RUNTIME_EXPORT
-void swift_unknownRelease_n(void *value, int n)
-    SWIFT_CC(DefaultCC);
+void swift_unknownRelease_n(void *value, int n);
 
 /// Decrement the strong retain count of an object which might not be a native
 /// Swift object.
 SWIFT_RUNTIME_EXPORT
-void swift_nonatomic_unknownRelease(void *value)
-    SWIFT_CC(DefaultCC);
+void swift_nonatomic_unknownRelease(void *value);
+
 /// Decrement the strong retain count of an object which might not be a native
 /// Swift object by n.
 SWIFT_RUNTIME_EXPORT
-void swift_nonatomic_unknownRelease_n(void *value, int n)
-    SWIFT_CC(DefaultCC);
+void swift_nonatomic_unknownRelease_n(void *value, int n);
 
 #else
 
-static inline void swift_unknownRelease(void *value)
-    SWIFT_CC(RegisterPreservingCC) {
+static inline void swift_unknownRelease(void *value) {
   swift_release(static_cast<HeapObject *>(value));
 }
 
-static inline void swift_unknownRelease_n(void *value, int n)
-    SWIFT_CC(RegisterPreservingCC) {
+static inline void swift_unknownRelease_n(void *value, int n) {
   swift_release_n(static_cast<HeapObject *>(value), n);
 }
 
-static inline void swift_nonatomic_unknownRelease(void *value)
-    SWIFT_CC(RegisterPreservingCC) {
+static inline void swift_nonatomic_unknownRelease(void *value) {
   swift_nonatomic_release(static_cast<HeapObject *>(value));
 }
 
-static inline void swift_nonatomic_unknownRelease_n(void *value, int n)
-    SWIFT_CC(RegisterPreservingCC) {
+static inline void swift_nonatomic_unknownRelease_n(void *value, int n) {
   swift_nonatomic_release_n(static_cast<HeapObject *>(value), n);
 }
 
diff --git a/include/swift/Runtime/InstrumentsSupport.h b/include/swift/Runtime/InstrumentsSupport.h
index 6a0c3f9..40fe9d6 100644
--- a/include/swift/Runtime/InstrumentsSupport.h
+++ b/include/swift/Runtime/InstrumentsSupport.h
@@ -20,49 +20,41 @@
 
 namespace swift {
 
+// liboainject patches the function pointers and calls the functions below.
 SWIFT_RUNTIME_EXPORT
 HeapObject *(*_swift_allocObject)(HeapMetadata const *metadata,
-                                             size_t requiredSize,
-                                             size_t requiredAlignmentMask);
-
+                                  size_t requiredSize,
+                                  size_t requiredAlignmentMask);
 SWIFT_RUNTIME_EXPORT
 BoxPair::Return (*_swift_allocBox)(Metadata const *type);
-
 SWIFT_RUNTIME_EXPORT
 HeapObject *(*_swift_retain)(HeapObject *object);
 SWIFT_RUNTIME_EXPORT
 HeapObject *(*_swift_retain_n)(HeapObject *object, uint32_t n);
 SWIFT_RUNTIME_EXPORT
-HeapObject *(*_swift_nonatomic_retain)(HeapObject *object);
-SWIFT_RUNTIME_EXPORT
 HeapObject *(*_swift_tryRetain)(HeapObject *object);
 SWIFT_RUNTIME_EXPORT
-bool (*_swift_isDeallocating)(HeapObject *object);
-SWIFT_RUNTIME_EXPORT
 void (*_swift_release)(HeapObject *object);
 SWIFT_RUNTIME_EXPORT
 void (*_swift_release_n)(HeapObject *object, uint32_t n);
 SWIFT_RUNTIME_EXPORT
-void (*_swift_nonatomic_release)(HeapObject *object);
+size_t swift_retainCount(HeapObject *object);
 
-// liboainject on iOS 8 patches the function pointers below if present. 
+// liboainject tries to patch the function pointers and call the functions below
+// Swift used to implement these but no longer does.
 // Do not reuse these names unless you do what oainject expects you to do.
-typedef size_t AllocIndex;
 SWIFT_RUNTIME_EXPORT
-void *(*_swift_alloc)(AllocIndex idx);
+void *(*_swift_alloc)(size_t idx);
 SWIFT_RUNTIME_EXPORT
-void *(*_swift_tryAlloc)(AllocIndex idx);
+void *(*_swift_tryAlloc)(size_t idx);
 SWIFT_RUNTIME_EXPORT
-void *(*_swift_slowAlloc)(size_t bytes, size_t alignMask,
-                                     uintptr_t flags);
+void *(*_swift_slowAlloc)(size_t bytes, size_t alignMask, uintptr_t flags);
 SWIFT_RUNTIME_EXPORT
-void (*_swift_dealloc)(void *ptr, AllocIndex idx);
+void (*_swift_dealloc)(void *ptr, size_t idx);
 SWIFT_RUNTIME_EXPORT
 void (*_swift_slowDealloc)(void *ptr, size_t bytes, size_t alignMask);
 SWIFT_RUNTIME_EXPORT
-size_t _swift_indexToSize(AllocIndex idx);
-SWIFT_RUNTIME_EXPORT
-int _swift_sizeToIndex(size_t size);
+size_t _swift_indexToSize(size_t idx);
 SWIFT_RUNTIME_EXPORT
 void _swift_zone_init(void);
 
diff --git a/include/swift/Runtime/Metadata.h b/include/swift/Runtime/Metadata.h
index 5c3c85b..dc3915e 100644
--- a/include/swift/Runtime/Metadata.h
+++ b/include/swift/Runtime/Metadata.h
@@ -2759,11 +2759,10 @@
 ///                         metadata)
 ///     return metadata
 ///   }
-SWIFT_RT_ENTRY_VISIBILITY
+SWIFT_RUNTIME_EXPORT
 const Metadata *
 swift_getGenericMetadata(GenericMetadata *pattern,
-                         const void *arguments)
-    SWIFT_CC(RegisterPreservingCC);
+                         const void *arguments);
 
 // Callback to allocate a generic class metadata object.
 SWIFT_RUNTIME_EXPORT
@@ -2798,12 +2797,11 @@
 ///   never form part of the uniquing key for the conformance, which
 ///   is ultimately a statement about the user model of overlapping
 ///   conformances.
-SWIFT_RT_ENTRY_VISIBILITY
+SWIFT_RUNTIME_EXPORT
 const WitnessTable *
 swift_getGenericWitnessTable(GenericWitnessTable *genericTable,
                              const Metadata *type,
-                             void * const *instantiationArgs)
-    SWIFT_CC(RegisterPreservingCC);
+                             void * const *instantiationArgs);
 
 /// \brief Fetch a uniqued metadata for a function type.
 SWIFT_RUNTIME_EXPORT
@@ -2844,6 +2842,10 @@
 void
 swift_instantiateObjCClass(const ClassMetadata *theClass);
 
+SWIFT_RUNTIME_EXPORT
+Class
+swift_getInitializedObjCClass(Class c);
+
 /// \brief Fetch a uniqued type metadata for an ObjC class.
 SWIFT_RUNTIME_EXPORT
 const Metadata *
@@ -2940,13 +2942,12 @@
 
 /// \brief Fetch a uniqued metadata for an existential type. The array
 /// referenced by \c protocols will be sorted in-place.
-SWIFT_RT_ENTRY_VISIBILITY
+SWIFT_RUNTIME_EXPORT
 const ExistentialTypeMetadata *
 swift_getExistentialTypeMetadata(ProtocolClassConstraint classConstraint,
                                  const Metadata *superclassConstraint,
                                  size_t numProtocols,
-                                 const ProtocolDescriptor * const *protocols)
-    SWIFT_CC(RegisterPreservingCC);
+                                 const ProtocolDescriptor * const *protocols);
 
 /// \brief Perform a copy-assignment from one existential container to another.
 /// Both containers must be of the same existential type representable with the
diff --git a/include/swift/Runtime/RuntimeFnWrappersGen.h b/include/swift/Runtime/RuntimeFnWrappersGen.h
index 7814bc1..dd1355d 100644
--- a/include/swift/Runtime/RuntimeFnWrappersGen.h
+++ b/include/swift/Runtime/RuntimeFnWrappersGen.h
@@ -32,23 +32,5 @@
                       llvm::ArrayRef<llvm::Type*> argTypes,
                       llvm::ArrayRef<llvm::Attribute::AttrKind> attrs);
 
-/// Generate an llvm wrapper for a runtime entry with a
-/// given name, return types, argument types, attributes and a
-/// calling convention.
-///
-/// Symbol is the name of a global symbol containing the
-/// address of the runtime entry implementation.
-/// The wrapper simply invokes a corresponding entry point
-/// by means of an indirect call of the function currently
-/// referenced by the symbol.
-///
-/// Each wrapper has a hidden linkage and marked as ODR, so that
-/// a linker can merge all wrappers with the same name.
-llvm::Constant *getWrapperFn(llvm::Module &Module, llvm::Constant *&cache,
-                             char const *name, char const *symbol,
-                             llvm::CallingConv::ID cc,
-                             llvm::ArrayRef<llvm::Type *> retTypes,
-                             llvm::ArrayRef<llvm::Type *> argTypes,
-                             llvm::ArrayRef<llvm::Attribute::AttrKind> attrs);
 } /* Namespace swift */
 #endif
diff --git a/include/swift/Runtime/RuntimeFunctions.def b/include/swift/Runtime/RuntimeFunctions.def
index 18e0200..432c187 100644
--- a/include/swift/Runtime/RuntimeFunctions.def
+++ b/include/swift/Runtime/RuntimeFunctions.def
@@ -38,19 +38,7 @@
 #define FUNCTION(Id, Name, CC, ReturnTys, ArgTys, Attrs) FUNCTION_ID(Id)
 #endif
 
-/// This is a special version for runtime functions which have a global
-/// symbol containing a reference of the implementation of this runtime
-/// entry.
-///  SymbolName is the name of the global symbol
-///  Impl is the name of the function implementing this entry point.
-#ifndef FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL
-#define FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(Id, Name, SymbolName, Impl, CC,  \
-                                             ReturnTys, ArgTys, Attrs)        \
-  FUNCTION_ID(Id)
-#endif
-
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(AllocBox, swift_allocBox,
-         _swift_allocBox, _swift_allocBox_, DefaultCC,
+FUNCTION(AllocBox, swift_allocBox, C_CC,
          RETURNS(RefCountedPtrTy, OpaquePtrTy),
          ARGS(TypeMetadataPtrTy),
          ATTRS(NoUnwind))
@@ -58,92 +46,91 @@
 //  BoxPair swift_makeBoxUnique(OpaqueValue *buffer, Metadata *type, size_t alignMask);
 FUNCTION(MakeBoxUnique,
          swift_makeBoxUnique,
-         DefaultCC,
+         C_CC,
          RETURNS(RefCountedPtrTy, OpaquePtrTy),
          ARGS(OpaquePtrTy, TypeMetadataPtrTy, SizeTy),
          ATTRS(NoUnwind))
 
-FUNCTION(DeallocBox, swift_deallocBox, DefaultCC,
+FUNCTION(DeallocBox, swift_deallocBox, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
-FUNCTION(ProjectBox, swift_projectBox, DefaultCC,
+FUNCTION(ProjectBox, swift_projectBox, C_CC,
          RETURNS(OpaquePtrTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, ReadNone))
 
-FUNCTION(AllocEmptyBox, swift_allocEmptyBox, DefaultCC,
+FUNCTION(AllocEmptyBox, swift_allocEmptyBox, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(),
          ATTRS(NoUnwind))
 
 // RefCounted *swift_allocObject(Metadata *type, size_t size, size_t alignMask);
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(AllocObject, swift_allocObject,
-         _swift_allocObject, _swift_allocObject_, RegisterPreservingCC,
+FUNCTION(AllocObject, swift_allocObject, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(TypeMetadataPtrTy, SizeTy, SizeTy),
          ATTRS(NoUnwind))
 
 // HeapObject *swift_initStackObject(HeapMetadata const *metadata,
 //                                   HeapObject *object);
-FUNCTION(InitStackObject, swift_initStackObject, DefaultCC,
+FUNCTION(InitStackObject, swift_initStackObject, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(TypeMetadataPtrTy, RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // HeapObject *swift_initStaticObject(HeapMetadata const *metadata,
 //                                    HeapObject *object);
-FUNCTION(InitStaticObject, swift_initStaticObject, DefaultCC,
+FUNCTION(InitStaticObject, swift_initStaticObject, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(TypeMetadataPtrTy, RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_verifyEndOfLifetime(HeapObject *object);
-FUNCTION(VerifyEndOfLifetime, swift_verifyEndOfLifetime, DefaultCC,
+FUNCTION(VerifyEndOfLifetime, swift_verifyEndOfLifetime, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_deallocObject(HeapObject *obj, size_t size, size_t alignMask);
-FUNCTION(DeallocObject, swift_deallocObject, RegisterPreservingCC,
+FUNCTION(DeallocObject, swift_deallocObject, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy, SizeTy, SizeTy),
          ATTRS(NoUnwind))
 
 // void swift_deallocUninitializedObject(HeapObject *obj, size_t size, size_t alignMask);
 FUNCTION(DeallocUninitializedObject, swift_deallocUninitializedObject,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy, SizeTy, SizeTy),
          ATTRS(NoUnwind))
 
 // void swift_deallocClassInstance(HeapObject *obj, size_t size, size_t alignMask);
-FUNCTION(DeallocClassInstance, swift_deallocClassInstance, DefaultCC,
+FUNCTION(DeallocClassInstance, swift_deallocClassInstance, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy, SizeTy, SizeTy),
          ATTRS(NoUnwind))
 
 // void swift_deallocPartialClassInstance(HeapObject *obj, HeapMetadata *type, size_t size, size_t alignMask);
-FUNCTION(DeallocPartialClassInstance, swift_deallocPartialClassInstance, DefaultCC,
+FUNCTION(DeallocPartialClassInstance, swift_deallocPartialClassInstance, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy, TypeMetadataPtrTy, SizeTy, SizeTy),
          ATTRS(NoUnwind))
 
 // void *swift_slowAlloc(size_t size, size_t alignMask);
-FUNCTION(SlowAlloc, swift_slowAlloc, RegisterPreservingCC,
+FUNCTION(SlowAlloc, swift_slowAlloc, C_CC,
          RETURNS(Int8PtrTy),
          ARGS(SizeTy, SizeTy),
          ATTRS(NoUnwind))
 
 // void swift_slowDealloc(void *ptr, size_t size, size_t alignMask);
-FUNCTION(SlowDealloc, swift_slowDealloc, RegisterPreservingCC,
+FUNCTION(SlowDealloc, swift_slowDealloc, C_CC,
          RETURNS(VoidTy),
          ARGS(Int8PtrTy, SizeTy, SizeTy),
          ATTRS(NoUnwind))
 
 // void swift_willThrow(error *ptr);
-FUNCTION(WillThrow, swift_willThrow, DefaultCC,
+FUNCTION(WillThrow, swift_willThrow, C_CC,
          RETURNS(VoidTy),
          ARGS(ErrorPtrTy),
          ATTRS(NoUnwind))
@@ -161,475 +148,465 @@
          ATTRS(NoUnwind, NoReturn))
 
 // void *swift_copyPOD(void *dest, void *src, Metadata *self);
-FUNCTION(CopyPOD, swift_copyPOD, DefaultCC,
+FUNCTION(CopyPOD, swift_copyPOD, C_CC,
          RETURNS(OpaquePtrTy),
          ARGS(OpaquePtrTy, OpaquePtrTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_retain(void *ptr);
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(NativeStrongRetain, swift_retain,
-         _swift_retain,  _swift_retain_, RegisterPreservingCC,
+FUNCTION(NativeStrongRetain, swift_retain, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_release(void *ptr);
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(NativeStrongRelease, swift_release,
-         _swift_release, _swift_release_, RegisterPreservingCC,
+FUNCTION(NativeStrongRelease, swift_release, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_retain_n(void *ptr, int32_t n);
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(NativeStrongRetainN, swift_retain_n,
-         _swift_retain_n, _swift_retain_n_, RegisterPreservingCC,
+FUNCTION(NativeStrongRetainN, swift_retain_n, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void *swift_release_n(void *ptr, int32_t n);
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(NativeStrongReleaseN, swift_release_n,
-         _swift_release_n, _swift_release_n_, RegisterPreservingCC,
+FUNCTION(NativeStrongReleaseN, swift_release_n, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_setDeallocating(void *ptr);
 FUNCTION(NativeSetDeallocating, swift_setDeallocating,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_nonatomic_retain_n(void *ptr, int32_t n);
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(NativeNonAtomicStrongRetainN, swift_nonatomic_retain_n,
-         _swift_nonatomic_retain_n, _swift_nonatomic_retain_n_, RegisterPreservingCC,
+FUNCTION(NativeNonAtomicStrongRetainN, swift_nonatomic_retain_n, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_nonatomic_release_n(void *ptr, int32_t n);
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(NativeNonAtomicStrongReleaseN, swift_nonatomic_release_n,
-         _swift_nonatomic_release_n, _swift_nonatomic_release_n_, RegisterPreservingCC,
+FUNCTION(NativeNonAtomicStrongReleaseN, swift_nonatomic_release_n, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind))
 
 // void *swift_unknownRetain_n(void *ptr, int32_t n);
 FUNCTION(UnknownRetainN, swift_unknownRetain_n,
-         DefaultCC,
+         C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_unknownRelease_n(void *ptr, int32_t n);
 FUNCTION(UnknownReleaseN, swift_unknownRelease_n,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind))
 
 // void *swift_nonatomic_unknownRetain_n(void *ptr, int32_t n);
 FUNCTION(NonAtomicUnknownRetainN, swift_nonatomic_unknownRetain_n,
-         DefaultCC,
+         C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_nonatomic_unknownRelease_n(void *ptr, int32_t n);
 FUNCTION(NonAtomicUnknownReleaseN, swift_nonatomic_unknownRelease_n,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind))
 
 // void swift_bridgeObjectRetain_n(void *ptr, int32_t n);
 FUNCTION(BridgeObjectRetainN, swift_bridgeObjectRetain_n,
-         DefaultCC,
+         C_CC,
          RETURNS(BridgeObjectPtrTy),
          ARGS(BridgeObjectPtrTy, Int32Ty),
          ATTRS(NoUnwind))
 
 // void swift_bridgeObjectRelease_n(void *ptr, int32_t n);
 FUNCTION(BridgeObjectReleaseN, swift_bridgeObjectRelease_n,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(BridgeObjectPtrTy, Int32Ty),
          ATTRS(NoUnwind))
 
 // void swift_nonatomic_bridgeObjectRetain_n(void *ptr, int32_t n);
 FUNCTION(NonAtomicBridgeObjectRetainN, swift_nonatomic_bridgeObjectRetain_n,
-         DefaultCC,
+         C_CC,
          RETURNS(BridgeObjectPtrTy),
          ARGS(BridgeObjectPtrTy, Int32Ty),
          ATTRS(NoUnwind))
 
 // void swift_nonatomic_bridgeObjectRelease_n(void *ptr, int32_t n);
 FUNCTION(NonAtomicBridgeObjectReleaseN, swift_nonatomic_bridgeObjectRelease_n,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(BridgeObjectPtrTy, Int32Ty),
          ATTRS(NoUnwind))
 
 // void *swift_nonatomic_retain(void *ptr);
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(NativeNonAtomicStrongRetain, swift_nonatomic_retain,
-         _swift_nonatomic_retain, _swift_nonatomic_retain_, RegisterPreservingCC,
+FUNCTION(NativeNonAtomicStrongRetain, swift_nonatomic_retain, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void *swift_tryPin(void *ptr);
-FUNCTION(NativeTryPin, swift_tryPin, RegisterPreservingCC,
+FUNCTION(NativeTryPin, swift_tryPin, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_nonatomic_release(void *ptr);
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(NativeNonAtomicStrongRelease, swift_nonatomic_release,
-         _swift_nonatomic_release, _swift_nonatomic_release_, RegisterPreservingCC,
+FUNCTION(NativeNonAtomicStrongRelease, swift_nonatomic_release, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_tryRetain(void *ptr);
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(NativeTryRetain, swift_tryRetain,
-         _swift_tryRetain, _swift_tryRetain_, RegisterPreservingCC,
+FUNCTION(NativeTryRetain, swift_tryRetain, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_unpin(void *ptr);
-FUNCTION(NativeUnpin, swift_unpin, RegisterPreservingCC,
+FUNCTION(NativeUnpin, swift_unpin, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // bool swift_isDeallocating(void *ptr);
-FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(IsDeallocating, swift_isDeallocating,
-         _swift_isDeallocating, _swift_isDeallocating_, DefaultCC,
+FUNCTION(IsDeallocating, swift_isDeallocating, C_CC,
          RETURNS(Int1Ty),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, ZExt))
 
 // void *swift_nonatomic_tryPin(void *ptr);
-FUNCTION(NonAtomicNativeTryPin, swift_nonatomic_tryPin, RegisterPreservingCC,
+FUNCTION(NonAtomicNativeTryPin, swift_nonatomic_tryPin, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_nonatomic_unpin(void *ptr);
-FUNCTION(NonAtomicNativeUnpin, swift_nonatomic_unpin, RegisterPreservingCC,
+FUNCTION(NonAtomicNativeUnpin, swift_nonatomic_unpin, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_unknownRetain(void *ptr);
-FUNCTION(UnknownRetain, swift_unknownRetain, DefaultCC,
+FUNCTION(UnknownRetain, swift_unknownRetain, C_CC,
          RETURNS(UnknownRefCountedPtrTy),
          ARGS(UnknownRefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_unknownRelease(void *ptr);
-FUNCTION(UnknownRelease, swift_unknownRelease, DefaultCC,
+FUNCTION(UnknownRelease, swift_unknownRelease, C_CC,
          RETURNS(VoidTy),
          ARGS(UnknownRefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_nonatomic_unknownRetain(void *ptr);
-FUNCTION(NonAtomicUnknownRetain, swift_nonatomic_unknownRetain, DefaultCC,
+FUNCTION(NonAtomicUnknownRetain, swift_nonatomic_unknownRetain, C_CC,
          RETURNS(UnknownRefCountedPtrTy),
          ARGS(UnknownRefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
-// void swift_unknownRelease(void *ptr);
-FUNCTION(NonAtomicUnknownRelease, swift_nonatomic_unknownRelease, DefaultCC,
+// void swift_nonatomic_unknownRelease(void *ptr);
+FUNCTION(NonAtomicUnknownRelease, swift_nonatomic_unknownRelease, C_CC,
          RETURNS(VoidTy),
          ARGS(UnknownRefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_bridgeObjectRetain(void *ptr);
-FUNCTION(BridgeObjectStrongRetain, swift_bridgeObjectRetain, DefaultCC,
+FUNCTION(BridgeObjectStrongRetain, swift_bridgeObjectRetain, C_CC,
          RETURNS(BridgeObjectPtrTy),
          ARGS(BridgeObjectPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_bridgeRelease(void *ptr);
-FUNCTION(BridgeObjectStrongRelease, swift_bridgeObjectRelease, DefaultCC,
+FUNCTION(BridgeObjectStrongRelease, swift_bridgeObjectRelease, C_CC,
          RETURNS(VoidTy),
          ARGS(BridgeObjectPtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_nonatomic_bridgeObjectRetain(void *ptr);
-FUNCTION(NonAtomicBridgeObjectStrongRetain, swift_nonatomic_bridgeObjectRetain, DefaultCC,
+FUNCTION(NonAtomicBridgeObjectStrongRetain, swift_nonatomic_bridgeObjectRetain, C_CC,
          RETURNS(BridgeObjectPtrTy),
          ARGS(BridgeObjectPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_nonatomic_bridgeRelease(void *ptr);
-FUNCTION(NonAtomicBridgeObjectStrongRelease, swift_nonatomic_bridgeObjectRelease, DefaultCC,
+FUNCTION(NonAtomicBridgeObjectStrongRelease, swift_nonatomic_bridgeObjectRelease, C_CC,
          RETURNS(VoidTy),
          ARGS(BridgeObjectPtrTy),
          ATTRS(NoUnwind))
 
 
 // error *swift_errorRetain(error *ptr);
-FUNCTION(ErrorStrongRetain, swift_errorRetain, DefaultCC,
+FUNCTION(ErrorStrongRetain, swift_errorRetain, C_CC,
          RETURNS(ErrorPtrTy),
          ARGS(ErrorPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_errorRelease(void *ptr);
-FUNCTION(ErrorStrongRelease, swift_errorRelease, DefaultCC,
+FUNCTION(ErrorStrongRelease, swift_errorRelease, C_CC,
          RETURNS(VoidTy),
          ARGS(ErrorPtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_unownedRetain(void *ptr);
-FUNCTION(NativeUnownedRetain, swift_unownedRetain, RegisterPreservingCC,
+FUNCTION(NativeUnownedRetain, swift_unownedRetain, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_unownedRelease(void *ptr);
-FUNCTION(NativeUnownedRelease, swift_unownedRelease, RegisterPreservingCC,
+FUNCTION(NativeUnownedRelease, swift_unownedRelease, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_nonatomic_unownedRetain(void *ptr);
 FUNCTION(NonAtomicNativeUnownedRetain, swift_nonatomic_unownedRetain,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_nonatomic_unownedRelease(void *ptr);
 FUNCTION(NonAtomicNativeUnownedRelease, swift_nonatomic_unownedRelease,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_unownedRetain_n(void *ptr, int32_t n);
 FUNCTION(UnownedRetainN, swift_unownedRetain_n,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_unownedRelease_n(void *ptr, int32_t n);
 FUNCTION(UnownedReleaseN, swift_unownedRelease_n,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind))
 
 // void *swift_nonatomic_unownedRetain_n(void *ptr, int32_t n);
 FUNCTION(NonAtomicUnownedRetainN, swift_nonatomic_unownedRetain_n,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_nonatomic_unownedRelease_n(void *ptr, int32_t n);
 FUNCTION(NonAtomicUnownedReleaseN, swift_nonatomic_unownedRelease_n,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy, Int32Ty),
          ATTRS(NoUnwind))
 
 // void *swift_unownedRetainStrong(void *ptr);
-FUNCTION(NativeStrongRetainUnowned, swift_unownedRetainStrong, RegisterPreservingCC,
+FUNCTION(NativeStrongRetainUnowned, swift_unownedRetainStrong, C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void *swift_nonatomic_unownedRetainStrong(void *ptr);
 FUNCTION(NonAtomicNativeStrongRetainUnowned, swift_nonatomic_unownedRetainStrong,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_unownedRetainStrongAndRelease(void *ptr);
 FUNCTION(NativeStrongRetainAndUnownedRelease,
-         swift_unownedRetainStrongAndRelease, RegisterPreservingCC,
+         swift_unownedRetainStrongAndRelease, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_nonatomic_unownedRetainStrongAndRelease(void *ptr);
 FUNCTION(NonAtomicNativeStrongRetainAndUnownedRelease,
-         swift_nonatomic_unownedRetainStrongAndRelease, RegisterPreservingCC,
+         swift_nonatomic_unownedRetainStrongAndRelease, C_CC,
          RETURNS(VoidTy),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_weakDestroy(WeakReference *object);
-FUNCTION(NativeWeakDestroy, swift_weakDestroy, DefaultCC,
+FUNCTION(NativeWeakDestroy, swift_weakDestroy, C_CC,
          RETURNS(VoidTy),
          ARGS(WeakReferencePtrTy),
          ATTRS(NoUnwind))
 
 // WeakReference *swift_weakInit(WeakReference *object, void *value);
-FUNCTION(NativeWeakInit, swift_weakInit, DefaultCC,
+FUNCTION(NativeWeakInit, swift_weakInit, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, RefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // WeakReference *swift_weakAssign(WeakReference *object, void *value);
-FUNCTION(NativeWeakAssign, swift_weakAssign, DefaultCC,
+FUNCTION(NativeWeakAssign, swift_weakAssign, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, RefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void *swift_weakLoadStrong(WeakReference *object);
-FUNCTION(NativeWeakLoadStrong, swift_weakLoadStrong,DefaultCC,
+FUNCTION(NativeWeakLoadStrong, swift_weakLoadStrong,C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(WeakReferencePtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_weakTakeStrong(WeakReference *object);
-FUNCTION(NativeWeakTakeStrong, swift_weakTakeStrong,DefaultCC,
+FUNCTION(NativeWeakTakeStrong, swift_weakTakeStrong,C_CC,
          RETURNS(RefCountedPtrTy),
          ARGS(WeakReferencePtrTy),
          ATTRS(NoUnwind))
 
 // WeakReference *swift_weakCopyInit(WeakReference *dest, WeakReference *src);
-FUNCTION(NativeWeakCopyInit, swift_weakCopyInit, DefaultCC,
+FUNCTION(NativeWeakCopyInit, swift_weakCopyInit, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // WeakReference *swift_weakTakeInit(WeakReference *dest, WeakReference *src);
-FUNCTION(NativeWeakTakeInit, swift_weakTakeInit, DefaultCC,
+FUNCTION(NativeWeakTakeInit, swift_weakTakeInit, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // WeakReference *swift_weakCopyAssign(WeakReference *dest, WeakReference *src);
-FUNCTION(NativeWeakCopyAssign, swift_weakCopyAssign, DefaultCC,
+FUNCTION(NativeWeakCopyAssign, swift_weakCopyAssign, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // WeakReference *swift_weakTakeAssign(WeakReference *dest, WeakReference *src);
-FUNCTION(NativeWeakTakeAssign, swift_weakTakeAssign, DefaultCC,
+FUNCTION(NativeWeakTakeAssign, swift_weakTakeAssign, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_unknownWeakDestroy(WeakReference *object);
-FUNCTION(UnknownWeakDestroy, swift_unknownWeakDestroy, DefaultCC,
+FUNCTION(UnknownWeakDestroy, swift_unknownWeakDestroy, C_CC,
          RETURNS(VoidTy),
          ARGS(WeakReferencePtrTy),
          ATTRS(NoUnwind))
 
 // void swift_unknownWeakInit(WeakReference *object, void *value);
-FUNCTION(UnknownWeakInit, swift_unknownWeakInit, DefaultCC,
+FUNCTION(UnknownWeakInit, swift_unknownWeakInit, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, UnknownRefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // WeakReference *swift_unknownWeakAssign(WeakReference *object, void *value);
-FUNCTION(UnknownWeakAssign, swift_unknownWeakAssign, DefaultCC,
+FUNCTION(UnknownWeakAssign, swift_unknownWeakAssign, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, UnknownRefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void *swift_unknownWeakLoad(WeakReference *object);
-FUNCTION(UnknownWeakLoadStrong, swift_unknownWeakLoadStrong,DefaultCC,
+FUNCTION(UnknownWeakLoadStrong, swift_unknownWeakLoadStrong,C_CC,
          RETURNS(UnknownRefCountedPtrTy),
          ARGS(WeakReferencePtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_unknownWeakTake(WeakReference *object);
-FUNCTION(UnknownWeakTakeStrong, swift_unknownWeakTakeStrong,DefaultCC,
+FUNCTION(UnknownWeakTakeStrong, swift_unknownWeakTakeStrong,C_CC,
          RETURNS(UnknownRefCountedPtrTy),
          ARGS(WeakReferencePtrTy),
          ATTRS(NoUnwind))
 
 // WeakReference *swift_unknownWeakCopyInit(WeakReference *dest, WeakReference *src);
-FUNCTION(UnknownWeakCopyInit, swift_unknownWeakCopyInit, DefaultCC,
+FUNCTION(UnknownWeakCopyInit, swift_unknownWeakCopyInit, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void *swift_unknownWeakTakeInit(WeakReference *dest, WeakReference *src);
-FUNCTION(UnknownWeakTakeInit, swift_unknownWeakTakeInit, DefaultCC,
+FUNCTION(UnknownWeakTakeInit, swift_unknownWeakTakeInit, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // WeakReference *swift_unknownWeakCopyAssign(WeakReference *dest, WeakReference *src);
-FUNCTION(UnknownWeakCopyAssign, swift_unknownWeakCopyAssign, DefaultCC,
+FUNCTION(UnknownWeakCopyAssign, swift_unknownWeakCopyAssign, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // WeakReference *swift_unknownWeakTakeAssign(WeakReference *dest, WeakReference *src);
-FUNCTION(UnknownWeakTakeAssign, swift_unknownWeakTakeAssign, DefaultCC,
+FUNCTION(UnknownWeakTakeAssign, swift_unknownWeakTakeAssign, C_CC,
          RETURNS(WeakReferencePtrTy),
          ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void swift_unknownUnownedDestroy(UnownedReference *object);
-FUNCTION(UnknownUnownedDestroy, swift_unknownUnownedDestroy, DefaultCC,
+FUNCTION(UnknownUnownedDestroy, swift_unknownUnownedDestroy, C_CC,
          RETURNS(VoidTy),
          ARGS(UnownedReferencePtrTy),
          ATTRS(NoUnwind))
 
 // UnownedReference *swift_unknownUnownedInit(UnownedReference *object, void *value);
-FUNCTION(UnknownUnownedInit, swift_unknownUnownedInit, DefaultCC,
+FUNCTION(UnknownUnownedInit, swift_unknownUnownedInit, C_CC,
          RETURNS(UnownedReferencePtrTy),
          ARGS(UnownedReferencePtrTy, UnknownRefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // UnownedReference *swift_unknownUnownedAssign(UnownedReference *object, void *value);
-FUNCTION(UnknownUnownedAssign, swift_unknownUnownedAssign, DefaultCC,
+FUNCTION(UnknownUnownedAssign, swift_unknownUnownedAssign, C_CC,
          RETURNS(UnownedReferencePtrTy),
          ARGS(UnownedReferencePtrTy, UnknownRefCountedPtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // void *swift_unknownUnownedLoad(UnownedReference *object);
-FUNCTION(UnknownUnownedLoadStrong, swift_unknownUnownedLoadStrong, DefaultCC,
+FUNCTION(UnknownUnownedLoadStrong, swift_unknownUnownedLoadStrong, C_CC,
          RETURNS(UnknownRefCountedPtrTy),
          ARGS(UnownedReferencePtrTy),
          ATTRS(NoUnwind))
 
 // void *swift_unknownUnownedTake(UnownedReference *object);
-FUNCTION(UnknownUnownedTakeStrong, swift_unknownUnownedTakeStrong, DefaultCC,
+FUNCTION(UnknownUnownedTakeStrong, swift_unknownUnownedTakeStrong, C_CC,
          RETURNS(UnknownRefCountedPtrTy),
          ARGS(UnownedReferencePtrTy),
          ATTRS(NoUnwind))
 
 // UnownedReference *swift_unknownUnownedCopyInit(UnownedReference *dest, UnownedReference *src);
-FUNCTION(UnknownUnownedCopyInit, swift_unknownUnownedCopyInit, DefaultCC,
+FUNCTION(UnknownUnownedCopyInit, swift_unknownUnownedCopyInit, C_CC,
          RETURNS(UnownedReferencePtrTy),
          ARGS(UnownedReferencePtrTy, UnownedReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // UnownedReference *swift_unknownUnownedTakeInit(UnownedReference *dest, UnownedReference *src);
-FUNCTION(UnknownUnownedTakeInit, swift_unknownUnownedTakeInit, DefaultCC,
+FUNCTION(UnknownUnownedTakeInit, swift_unknownUnownedTakeInit, C_CC,
          RETURNS(UnownedReferencePtrTy),
          ARGS(UnownedReferencePtrTy, UnownedReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // UnownedReference *swift_unknownUnownedCopyAssign(UnownedReference *dest, UnownedReference *src);
-FUNCTION(UnknownUnownedCopyAssign, swift_unknownUnownedCopyAssign, DefaultCC,
+FUNCTION(UnknownUnownedCopyAssign, swift_unknownUnownedCopyAssign, C_CC,
          RETURNS(UnownedReferencePtrTy),
          ARGS(UnownedReferencePtrTy, UnownedReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // UnownedReference *swift_unknownUnownedTakeAssign(UnownedReference *dest, UnownedReference *src);
-FUNCTION(UnknownUnownedTakeAssign, swift_unknownUnownedTakeAssign, DefaultCC,
+FUNCTION(UnknownUnownedTakeAssign, swift_unknownUnownedTakeAssign, C_CC,
          RETURNS(UnownedReferencePtrTy),
          ARGS(UnownedReferencePtrTy, UnownedReferencePtrTy),
          ATTRS(NoUnwind, FirstParamReturned))
 
 // bool swift_isUniquelyReferencedNonObjC(const void *);
 FUNCTION(IsUniquelyReferencedNonObjC, swift_isUniquelyReferencedNonObjC,
-         DefaultCC,
+         C_CC,
          RETURNS(Int1Ty),
          ARGS(UnknownRefCountedPtrTy),
          ATTRS(NoUnwind, ZExt))
@@ -637,7 +614,7 @@
 // bool swift_isUniquelyReferencedNonObjC_nonNull(const void *);
 FUNCTION(IsUniquelyReferencedNonObjC_nonNull,
          swift_isUniquelyReferencedNonObjC_nonNull,
-         DefaultCC,
+         C_CC,
          RETURNS(Int1Ty),
          ARGS(UnknownRefCountedPtrTy),
          ATTRS(NoUnwind, ZExt))
@@ -645,7 +622,7 @@
 // bool swift_isUniquelyReferencedOrPinnedNonObjC_nonNull(const void *);
 FUNCTION(IsUniquelyReferencedOrPinnedNonObjC_nonNull,
          swift_isUniquelyReferencedOrPinnedNonObjC_nonNull,
-         DefaultCC,
+         C_CC,
          RETURNS(Int1Ty),
          ARGS(UnknownRefCountedPtrTy),
          ATTRS(NoUnwind, ZExt))
@@ -654,7 +631,7 @@
 //   uintptr_t bits);
 FUNCTION(IsUniquelyReferencedNonObjC_nonNull_bridgeObject,
          swift_isUniquelyReferencedNonObjC_nonNull_bridgeObject,
-         DefaultCC,
+         C_CC,
          RETURNS(Int1Ty),
          ARGS(BridgeObjectPtrTy),
          ATTRS(NoUnwind, ZExt))
@@ -663,14 +640,14 @@
 //   uintptr_t bits);
 FUNCTION(IsUniquelyReferencedOrPinnedNonObjC_nonNull_bridgeObject,
          swift_isUniquelyReferencedOrPinnedNonObjC_nonNull_bridgeObject,
-         DefaultCC,
+         C_CC,
          RETURNS(Int1Ty),
          ARGS(BridgeObjectPtrTy),
          ATTRS(NoUnwind, ZExt))
 
 // bool swift_isUniquelyReferenced_native(const struct HeapObject *);
 FUNCTION(IsUniquelyReferenced_native, swift_isUniquelyReferenced_native,
-         DefaultCC,
+         C_CC,
          RETURNS(Int1Ty),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, ZExt))
@@ -678,7 +655,7 @@
 // bool swift_isUniquelyReferencedOrPinned_native(const struct HeapObject *);
 FUNCTION(IsUniquelyReferencedOrPinned_native,
          swift_isUniquelyReferencedOrPinned_native,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(Int1Ty),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, ZExt))
@@ -686,7 +663,7 @@
 // bool swift_isUniquelyReferenced_nonNull_native(const struct HeapObject *);
 FUNCTION(IsUniquelyReferenced_nonNull_native,
          swift_isUniquelyReferenced_nonNull_native,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(Int1Ty),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, ZExt))
@@ -695,66 +672,66 @@
 //   const struct HeapObject *);
 FUNCTION(IsUniquelyReferencedOrPinned_nonNull_native,
          swift_isUniquelyReferencedOrPinned_nonNull_native,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(Int1Ty),
          ARGS(RefCountedPtrTy),
          ATTRS(NoUnwind, ZExt))
 
 // void swift_arrayInitWithCopy(opaque*, opaque*, size_t, type*);
-FUNCTION(ArrayInitWithCopy, swift_arrayInitWithCopy, DefaultCC,
+FUNCTION(ArrayInitWithCopy, swift_arrayInitWithCopy, C_CC,
          RETURNS(VoidTy),
          ARGS(OpaquePtrTy, OpaquePtrTy, SizeTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_arrayInitWithTakeNoAlias(opaque*, opaque*, size_t, type*);
-FUNCTION(ArrayInitWithTakeNoAlias, swift_arrayInitWithTakeNoAlias, DefaultCC,
+FUNCTION(ArrayInitWithTakeNoAlias, swift_arrayInitWithTakeNoAlias, C_CC,
          RETURNS(VoidTy),
          ARGS(OpaquePtrTy, OpaquePtrTy, SizeTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_arrayInitWithTakeFrontToBack(opaque*, opaque*, size_t, type*);
 FUNCTION(ArrayInitWithTakeFrontToBack, swift_arrayInitWithTakeFrontToBack,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(OpaquePtrTy, OpaquePtrTy, SizeTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_arrayInitWithTakeBackToFront(opaque*, opaque*, size_t, type*);
 FUNCTION(ArrayInitWithTakeBackToFront, swift_arrayInitWithTakeBackToFront,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(OpaquePtrTy, OpaquePtrTy, SizeTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_arrayAssignWithCopyNoAlias(opaque*, opaque*, size_t, type*);
 FUNCTION(ArrayAssignWithCopyNoAlias, swift_arrayAssignWithCopyNoAlias,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(OpaquePtrTy, OpaquePtrTy, SizeTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_arrayAssignWithCopyFrontToBack(opaque*, opaque*, size_t, type*);
 FUNCTION(ArrayAssignWithCopyFrontToBack, swift_arrayAssignWithCopyFrontToBack,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(OpaquePtrTy, OpaquePtrTy, SizeTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_arrayAssignWithCopyBackToFront(opaque*, opaque*, size_t, type*);
 FUNCTION(ArrayAssignWithCopyBackToFront, swift_arrayAssignWithCopyBackToFront,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(OpaquePtrTy, OpaquePtrTy, SizeTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_arrayAssignWithTake(opaque*, opaque*, size_t, type*);
-FUNCTION(ArrayAssignWithTake, swift_arrayAssignWithTake, DefaultCC,
+FUNCTION(ArrayAssignWithTake, swift_arrayAssignWithTake, C_CC,
          RETURNS(VoidTy),
          ARGS(OpaquePtrTy, OpaquePtrTy, SizeTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_arrayDestroy(opaque*, size_t, type*);
-FUNCTION(ArrayDestroy, swift_arrayDestroy, DefaultCC,
+FUNCTION(ArrayDestroy, swift_arrayDestroy, C_CC,
          RETURNS(VoidTy),
          ARGS(OpaquePtrTy, SizeTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind))
@@ -763,7 +740,7 @@
 //                                         const Metadata **parameters,
 //                                         const uint32_t *parameterFlags,
 //                                         const Metadata *result);
-FUNCTION(GetFunctionMetadata, swift_getFunctionTypeMetadata, DefaultCC,
+FUNCTION(GetFunctionMetadata, swift_getFunctionTypeMetadata, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(SizeTy,
               TypeMetadataPtrTy->getPointerTo(0),
@@ -773,7 +750,7 @@
 
 // Metadata *swift_getFunctionTypeMetadata0(unsigned long flags,
 //                                          const Metadata *resultMetadata);
-FUNCTION(GetFunctionMetadata0, swift_getFunctionTypeMetadata0, DefaultCC,
+FUNCTION(GetFunctionMetadata0, swift_getFunctionTypeMetadata0, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(SizeTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind, ReadNone))
@@ -781,7 +758,7 @@
 // Metadata *swift_getFunctionTypeMetadata1(unsigned long flags,
 //                                          const Metadata *arg0,
 //                                          const Metadata *resultMetadata);
-FUNCTION(GetFunctionMetadata1, swift_getFunctionTypeMetadata1, DefaultCC,
+FUNCTION(GetFunctionMetadata1, swift_getFunctionTypeMetadata1, C_CC,
         RETURNS(TypeMetadataPtrTy),
         ARGS(SizeTy, TypeMetadataPtrTy, TypeMetadataPtrTy),
         ATTRS(NoUnwind, ReadNone))
@@ -791,7 +768,7 @@
 //                                          const Metadata *arg1,
 //                                          const Metadata *resultMetadata);
 FUNCTION(GetFunctionMetadata2, swift_getFunctionTypeMetadata2,
-        DefaultCC,
+        C_CC,
         RETURNS(TypeMetadataPtrTy),
         ARGS(SizeTy, TypeMetadataPtrTy, TypeMetadataPtrTy, TypeMetadataPtrTy),
         ATTRS(NoUnwind, ReadNone))
@@ -802,21 +779,21 @@
 //                                          const Metadata *arg2,
 //                                          const Metadata *resultMetadata);
 FUNCTION(GetFunctionMetadata3, swift_getFunctionTypeMetadata3,
-        DefaultCC,
+        C_CC,
         RETURNS(TypeMetadataPtrTy),
         ARGS(SizeTy, TypeMetadataPtrTy, TypeMetadataPtrTy, TypeMetadataPtrTy,
              TypeMetadataPtrTy),
         ATTRS(NoUnwind, ReadNone))
 
 // Metadata *swift_getForeignTypeMetadata(Metadata *nonUnique);
-FUNCTION(GetForeignTypeMetadata, swift_getForeignTypeMetadata, DefaultCC,
+FUNCTION(GetForeignTypeMetadata, swift_getForeignTypeMetadata, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPtrTy),
          ATTRS(NoUnwind, ReadNone)) // only writes to runtime-private fields
 
 // Metadata *swift_getGenericMetadata(GenericMetadata *pattern,
 //                                    const void *arguments);
-FUNCTION(GetGenericMetadata, swift_getGenericMetadata, RegisterPreservingCC,
+FUNCTION(GetGenericMetadata, swift_getGenericMetadata, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPatternPtrTy, Int8PtrTy),
          ATTRS(NoUnwind, ReadOnly))
@@ -826,14 +803,14 @@
 //                                              objc_class *superclass,
 //                                              size_t numImmediateMembers);
 FUNCTION(AllocateGenericClassMetadata, swift_allocateGenericClassMetadata,
-         DefaultCC, RETURNS(TypeMetadataPtrTy),
+         C_CC, RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPatternPtrTy, Int8PtrPtrTy, ObjCClassPtrTy, SizeTy),
          ATTRS(NoUnwind))
 
 // Metadata *swift_allocateGenericValueMetadata(GenericMetadata *pattern,
 //                                              const void * const *arguments);
 FUNCTION(AllocateGenericValueMetadata, swift_allocateGenericValueMetadata,
-         DefaultCC, RETURNS(TypeMetadataPtrTy),
+         C_CC, RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPatternPtrTy, Int8PtrPtrTy),
          ATTRS(NoUnwind))
 
@@ -841,7 +818,7 @@
 // swift_getGenericWitnessTable(GenericProtocolWitnessTable *genericTable,
 //                              const Metadata *type,
 //                              void * const *instantiationArgs);
-FUNCTION(GetGenericWitnessTable, swift_getGenericWitnessTable, RegisterPreservingCC,
+FUNCTION(GetGenericWitnessTable, swift_getGenericWitnessTable, C_CC,
          RETURNS(WitnessTablePtrTy),
          ARGS(getGenericWitnessTableCacheTy()->getPointerTo(),
               TypeMetadataPtrTy,
@@ -849,26 +826,26 @@
          ATTRS(NoUnwind, ReadOnly))
 
 // Metadata *swift_getMetatypeMetadata(Metadata *instanceTy);
-FUNCTION(GetMetatypeMetadata, swift_getMetatypeMetadata, DefaultCC,
+FUNCTION(GetMetatypeMetadata, swift_getMetatypeMetadata, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPtrTy),
          ATTRS(NoUnwind, ReadNone))
 
 // Metadata *swift_getExistentialMetatypeMetadata(Metadata *instanceTy);
 FUNCTION(GetExistentialMetatypeMetadata,
-         swift_getExistentialMetatypeMetadata, DefaultCC,
+         swift_getExistentialMetatypeMetadata, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPtrTy),
          ATTRS(NoUnwind, ReadNone))
 
 // Metadata *swift_getObjCClassMetadata(objc_class *theClass);
-FUNCTION(GetObjCClassMetadata, swift_getObjCClassMetadata, DefaultCC,
+FUNCTION(GetObjCClassMetadata, swift_getObjCClassMetadata, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(ObjCClassPtrTy),
          ATTRS(NoUnwind, ReadNone))
 
 // Metadata *swift_getObjCClassFromMetadata(objc_class *theClass);
-FUNCTION(GetObjCClassFromMetadata, swift_getObjCClassFromMetadata, DefaultCC,
+FUNCTION(GetObjCClassFromMetadata, swift_getObjCClassFromMetadata, C_CC,
          RETURNS(ObjCClassPtrTy),
          ARGS(TypeMetadataPtrTy),
          ATTRS(NoUnwind, ReadNone))
@@ -877,7 +854,7 @@
 //                                      Metadata * const *elts,
 //                                      const char *labels,
 //                                      value_witness_table_t *proposed);
-FUNCTION(GetTupleMetadata, swift_getTupleTypeMetadata, DefaultCC,
+FUNCTION(GetTupleMetadata, swift_getTupleTypeMetadata, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(SizeTy, TypeMetadataPtrTy->getPointerTo(0),
               Int8PtrTy, WitnessTablePtrTy),
@@ -886,7 +863,7 @@
 // Metadata *swift_getTupleTypeMetadata2(Metadata *elt0, Metadata *elt1,
 //                                       const char *labels,
 //                                       value_witness_table_t *proposed);
-FUNCTION(GetTupleMetadata2, swift_getTupleTypeMetadata2, DefaultCC,
+FUNCTION(GetTupleMetadata2, swift_getTupleTypeMetadata2, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPtrTy, TypeMetadataPtrTy,
               Int8PtrTy, WitnessTablePtrTy),
@@ -895,7 +872,7 @@
 // Metadata *swift_getTupleTypeMetadata3(Metadata *elt0, Metadata *elt1,
 //                                       Metadata *elt2, const char *labels,
 //                                       value_witness_table_t *proposed);
-FUNCTION(GetTupleMetadata3, swift_getTupleTypeMetadata3, DefaultCC,
+FUNCTION(GetTupleMetadata3, swift_getTupleTypeMetadata3, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPtrTy, TypeMetadataPtrTy, TypeMetadataPtrTy,
               Int8PtrTy, WitnessTablePtrTy),
@@ -909,7 +886,7 @@
 //
 // Note: ProtocolClassConstraint::Class is 0, ::Any is 1.
 FUNCTION(GetExistentialMetadata,
-         swift_getExistentialTypeMetadata, RegisterPreservingCC,
+         swift_getExistentialTypeMetadata, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(Int1Ty, TypeMetadataPtrTy, SizeTy,
               ProtocolDescriptorPtrTy->getPointerTo()),
@@ -919,7 +896,7 @@
 //                                       size_t templateSize,
 //                                       size_t numImmediateMembers);
 FUNCTION(RelocateClassMetadata,
-         swift_relocateClassMetadata, DefaultCC,
+         swift_relocateClassMetadata, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPtrTy, SizeTy, SizeTy),
          ATTRS(NoUnwind))
@@ -930,7 +907,7 @@
 //                                                TypeLayout * const *fieldTypes,
 //                                                size_t *fieldOffsets);
 FUNCTION(InitClassMetadataUniversal,
-         swift_initClassMetadata_UniversalStrategy, DefaultCC,
+         swift_initClassMetadata_UniversalStrategy, C_CC,
          RETURNS(VoidTy),
          ARGS(TypeMetadataPtrTy, SizeTy,
               Int8PtrPtrTy->getPointerTo(),
@@ -943,7 +920,7 @@
 //                               TypeLayout * const *fieldTypes,
 //                               size_t *fieldOffsets);
 FUNCTION(InitStructMetadata,
-         swift_initStructMetadata, DefaultCC,
+         swift_initStructMetadata, C_CC,
          RETURNS(VoidTy),
          ARGS(TypeMetadataPtrTy, SizeTy, SizeTy, Int8PtrPtrTy->getPointerTo(0),
               SizeTy->getPointerTo()),
@@ -954,7 +931,7 @@
 //                                       TypeLayout *payload);
 FUNCTION(InitEnumMetadataSingleCase,
          swift_initEnumMetadataSingleCase,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(TypeMetadataPtrTy, SizeTy, Int8PtrPtrTy),
          ATTRS(NoUnwind))
@@ -965,7 +942,7 @@
 //                                          unsigned num_empty_cases);
 FUNCTION(InitEnumMetadataSinglePayload,
          swift_initEnumMetadataSinglePayload,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(TypeMetadataPtrTy, SizeTy, Int8PtrPtrTy, Int32Ty),
          ATTRS(NoUnwind))
@@ -975,7 +952,7 @@
 //                                         TypeLayout * const *payloadTypes);
 FUNCTION(InitEnumMetadataMultiPayload,
          swift_initEnumMetadataMultiPayload,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(TypeMetadataPtrTy, SizeTy, SizeTy, Int8PtrPtrTy->getPointerTo(0)),
          ATTRS(NoUnwind))
@@ -984,7 +961,7 @@
 //                                    unsigned num_empty_cases);
 FUNCTION(GetEnumCaseSinglePayload,
          swift_getEnumCaseSinglePayload,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(Int32Ty),
          ARGS(OpaquePtrTy, TypeMetadataPtrTy, Int32Ty),
          ATTRS(NoUnwind, ReadOnly))
@@ -992,7 +969,7 @@
 // int swift_getEnumCaseMultiPayload(opaque_t *obj, Metadata *enumTy);
 FUNCTION(GetEnumCaseMultiPayload,
          swift_getEnumCaseMultiPayload,
-         DefaultCC,
+         C_CC,
          RETURNS(Int32Ty),
          ARGS(OpaquePtrTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind, ReadOnly))
@@ -1002,7 +979,7 @@
 //                                      unsigned num_empty_cases);
 FUNCTION(StoreEnumTagSinglePayload,
          swift_storeEnumTagSinglePayload,
-         RegisterPreservingCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(OpaquePtrTy, TypeMetadataPtrTy, Int32Ty, Int32Ty),
          ATTRS(NoUnwind))
@@ -1011,7 +988,7 @@
 //                                     int case_index);
 FUNCTION(StoreEnumTagMultiPayload,
          swift_storeEnumTagMultiPayload,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(OpaquePtrTy, TypeMetadataPtrTy, Int32Ty),
          ATTRS(NoUnwind))
@@ -1038,85 +1015,85 @@
          ATTRS(NoUnwind, ReadNone))
 
 // Metadata *swift_getObjectType(id object);
-FUNCTION(GetObjectType, swift_getObjectType, DefaultCC,
+FUNCTION(GetObjectType, swift_getObjectType, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(ObjCPtrTy),
          ATTRS(NoUnwind, ReadOnly))
 
 // Metadata *swift_getDynamicType(opaque_t *obj, Metadata *self);
-FUNCTION(GetDynamicType, swift_getDynamicType, DefaultCC,
+FUNCTION(GetDynamicType, swift_getDynamicType, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(OpaquePtrTy, TypeMetadataPtrTy, Int1Ty),
          ATTRS(NoUnwind, ReadOnly))
 
 // void *swift_dynamicCastClass(void*, void*);
-FUNCTION(DynamicCastClass, swift_dynamicCastClass, RegisterPreservingCC,
+FUNCTION(DynamicCastClass, swift_dynamicCastClass, C_CC,
          RETURNS(Int8PtrTy),
          ARGS(Int8PtrTy, Int8PtrTy),
          ATTRS(NoUnwind, ReadOnly))
 
 // void *swift_dynamicCastClassUnconditional(void*, void*);
 FUNCTION(DynamicCastClassUnconditional, swift_dynamicCastClassUnconditional,
-         DefaultCC,
+         C_CC,
          RETURNS(Int8PtrTy),
          ARGS(Int8PtrTy, Int8PtrTy),
          ATTRS(NoUnwind, ReadOnly))
 
 // void *swift_dynamicCastObjCClass(void*, void*);
-FUNCTION(DynamicCastObjCClass, swift_dynamicCastObjCClass, DefaultCC,
+FUNCTION(DynamicCastObjCClass, swift_dynamicCastObjCClass, C_CC,
          RETURNS(Int8PtrTy),
          ARGS(Int8PtrTy, Int8PtrTy),
          ATTRS(NoUnwind, ReadOnly))
 
 // void *swift_dynamicCastObjCClassUnconditional(void*, void*);
 FUNCTION(DynamicCastObjCClassUnconditional,
-         swift_dynamicCastObjCClassUnconditional, DefaultCC,
+         swift_dynamicCastObjCClassUnconditional, C_CC,
          RETURNS(Int8PtrTy),
          ARGS(Int8PtrTy, Int8PtrTy),
          ATTRS(NoUnwind, ReadOnly))
 
 // void *swift_dynamicCastUnknownClass(void*, void*);
-FUNCTION(DynamicCastUnknownClass, swift_dynamicCastUnknownClass, DefaultCC,
+FUNCTION(DynamicCastUnknownClass, swift_dynamicCastUnknownClass, C_CC,
          RETURNS(Int8PtrTy),
          ARGS(Int8PtrTy, Int8PtrTy),
          ATTRS(NoUnwind, ReadOnly))
 
 // void *swift_dynamicCastUnknownClassUnconditional(void*, void*);
 FUNCTION(DynamicCastUnknownClassUnconditional,
-         swift_dynamicCastUnknownClassUnconditional, DefaultCC,
+         swift_dynamicCastUnknownClassUnconditional, C_CC,
          RETURNS(Int8PtrTy),
          ARGS(Int8PtrTy, Int8PtrTy),
          ATTRS(NoUnwind, ReadOnly))
 
 // type *swift_dynamicCastMetatype(type*, type*);
-FUNCTION(DynamicCastMetatype, swift_dynamicCastMetatype, DefaultCC,
+FUNCTION(DynamicCastMetatype, swift_dynamicCastMetatype, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPtrTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind, ReadOnly))
 
 // type *swift_dynamicCastMetatypeUnconditional(type*, type*);
 FUNCTION(DynamicCastMetatypeUnconditional,
-         swift_dynamicCastMetatypeUnconditional, DefaultCC,
+         swift_dynamicCastMetatypeUnconditional, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPtrTy, TypeMetadataPtrTy),
          ATTRS(NoUnwind, ReadOnly))
 
 // objc_class *swift_dynamicCastObjCClassMetatype(objc_class*, objc_class*);
 FUNCTION(DynamicCastObjCClassMetatype, swift_dynamicCastObjCClassMetatype,
-         DefaultCC,
+         C_CC,
          RETURNS(ObjCClassPtrTy),
          ARGS(ObjCClassPtrTy, ObjCClassPtrTy),
          ATTRS(NoUnwind, ReadOnly))
 
 // objc_class *swift_dynamicCastObjCClassMetatypeUnconditional(objc_class*, objc_class*);
 FUNCTION(DynamicCastObjCClassMetatypeUnconditional,
-         swift_dynamicCastObjCClassMetatypeUnconditional, DefaultCC,
+         swift_dynamicCastObjCClassMetatypeUnconditional, C_CC,
          RETURNS(ObjCClassPtrTy),
          ARGS(ObjCClassPtrTy, ObjCClassPtrTy),
          ATTRS(NoUnwind, ReadOnly))
 
 // bool swift_dynamicCast(opaque*, opaque*, type*, type*, size_t);
-FUNCTION(DynamicCast, swift_dynamicCast, RegisterPreservingCC,
+FUNCTION(DynamicCast, swift_dynamicCast, C_CC,
          RETURNS(Int1Ty),
          ARGS(OpaquePtrTy, OpaquePtrTy, TypeMetadataPtrTy, TypeMetadataPtrTy,
               SizeTy),
@@ -1126,7 +1103,7 @@
 //                                               size_t numProtocols,
 //                                               Protocol * const *protocols);
 FUNCTION(DynamicCastTypeToObjCProtocolUnconditional,
-         swift_dynamicCastTypeToObjCProtocolUnconditional, DefaultCC,
+         swift_dynamicCastTypeToObjCProtocolUnconditional, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPtrTy, SizeTy, Int8PtrPtrTy),
          ATTRS(NoUnwind))
@@ -1135,7 +1112,7 @@
 //                                             size_t numProtocols,
 //                                             Protocol * const *protocols);
 FUNCTION(DynamicCastTypeToObjCProtocolConditional,
-         swift_dynamicCastTypeToObjCProtocolConditional, DefaultCC,
+         swift_dynamicCastTypeToObjCProtocolConditional, C_CC,
          RETURNS(TypeMetadataPtrTy),
          ARGS(TypeMetadataPtrTy, SizeTy, Int8PtrPtrTy),
          ATTRS(NoUnwind))
@@ -1144,7 +1121,7 @@
 //                                               size_t numProtocols,
 //                                               Protocol * const *protocols);
 FUNCTION(DynamicCastObjCProtocolUnconditional,
-         swift_dynamicCastObjCProtocolUnconditional, DefaultCC,
+         swift_dynamicCastObjCProtocolUnconditional, C_CC,
          RETURNS(ObjCPtrTy),
          ARGS(ObjCPtrTy, SizeTy, Int8PtrPtrTy),
          ATTRS(NoUnwind))
@@ -1153,42 +1130,42 @@
 //                                             size_t numProtocols,
 //                                             Protocol * const *protocols);
 FUNCTION(DynamicCastObjCProtocolConditional,
-         swift_dynamicCastObjCProtocolConditional, DefaultCC,
+         swift_dynamicCastObjCProtocolConditional, C_CC,
          RETURNS(ObjCPtrTy),
          ARGS(ObjCPtrTy, SizeTy, Int8PtrPtrTy),
          ATTRS(NoUnwind))
 
 // id swift_dynamicCastMetatypeToObjectUnconditional(type *type);
 FUNCTION(DynamicCastMetatypeToObjectUnconditional,
-         swift_dynamicCastMetatypeToObjectUnconditional, DefaultCC,
+         swift_dynamicCastMetatypeToObjectUnconditional, C_CC,
          RETURNS(ObjCPtrTy),
          ARGS(TypeMetadataPtrTy),
          ATTRS(NoUnwind, ReadNone))
 
 // id swift_dynamicCastMetatypeToObjectConditional(type *type);
 FUNCTION(DynamicCastMetatypeToObjectConditional,
-         swift_dynamicCastMetatypeToObjectConditional, DefaultCC,
+         swift_dynamicCastMetatypeToObjectConditional, C_CC,
          RETURNS(ObjCPtrTy),
          ARGS(TypeMetadataPtrTy),
          ATTRS(NoUnwind, ReadNone))
 
 // witness_table* swift_conformsToProtocol(type*, protocol*);
 FUNCTION(ConformsToProtocol,
-         swift_conformsToProtocol, DefaultCC,
+         swift_conformsToProtocol, C_CC,
          RETURNS(WitnessTablePtrTy),
          ARGS(TypeMetadataPtrTy, ProtocolDescriptorPtrTy),
          ATTRS(NoUnwind, ReadNone))
 
 // bool swift_isClassType(type*);
 FUNCTION(IsClassType,
-         swift_isClassType, DefaultCC,
+         swift_isClassType, C_CC,
          RETURNS(Int1Ty),
          ARGS(TypeMetadataPtrTy),
          ATTRS(ZExt, NoUnwind, ReadNone))
 
 // bool swift_isOptionalType(type*);
 FUNCTION(IsOptionalType,
-         swift_isOptionalType, DefaultCC,
+         swift_isOptionalType, C_CC,
          RETURNS(Int1Ty),
          ARGS(TypeMetadataPtrTy),
          ATTRS(ZExt, NoUnwind, ReadNone))
@@ -1196,7 +1173,7 @@
 // void swift_once(swift_once_t *predicate,
 //                 void (*function_code)(RefCounted*),
 //                 void *context);
-FUNCTION(Once, swift_once, DefaultCC,
+FUNCTION(Once, swift_once, C_CC,
          RETURNS(VoidTy),
          ARGS(OnceTy->getPointerTo(), Int8PtrTy, Int8PtrTy),
          ATTRS())
@@ -1204,7 +1181,7 @@
 // void swift_registerProtocols(const ProtocolRecord *begin,
 //                              const ProtocolRecord *end)
 FUNCTION(RegisterProtocols,
-         swift_registerProtocols, DefaultCC,
+         swift_registerProtocols, C_CC,
          RETURNS(VoidTy),
          ARGS(ProtocolRecordPtrTy, ProtocolRecordPtrTy),
          ATTRS(NoUnwind))
@@ -1212,29 +1189,29 @@
 // void swift_registerProtocolConformances(const ProtocolConformanceRecord *begin,
 //                                         const ProtocolConformanceRecord *end)
 FUNCTION(RegisterProtocolConformances,
-         swift_registerProtocolConformances, DefaultCC,
+         swift_registerProtocolConformances, C_CC,
          RETURNS(VoidTy),
          ARGS(RelativeAddressPtrTy, RelativeAddressPtrTy),
          ATTRS(NoUnwind))
 FUNCTION(RegisterTypeMetadataRecords,
-         swift_registerTypeMetadataRecords, DefaultCC,
+         swift_registerTypeMetadataRecords, C_CC,
          RETURNS(VoidTy),
          ARGS(TypeMetadataRecordPtrTy, TypeMetadataRecordPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_beginAccess(void *pointer, ValueBuffer *scratch, size_t flags);
-FUNCTION(BeginAccess, swift_beginAccess, DefaultCC,
+FUNCTION(BeginAccess, swift_beginAccess, C_CC,
          RETURNS(VoidTy),
          ARGS(Int8PtrTy, getFixedBufferTy()->getPointerTo(), SizeTy, Int8PtrTy),
          ATTRS(NoUnwind))
 
 // void swift_endAccess(ValueBuffer *scratch);
-FUNCTION(EndAccess, swift_endAccess, DefaultCC,
+FUNCTION(EndAccess, swift_endAccess, C_CC,
          RETURNS(VoidTy),
          ARGS(getFixedBufferTy()->getPointerTo()),
          ATTRS(NoUnwind))
 
-FUNCTION(InstantiateObjCClass, swift_instantiateObjCClass, DefaultCC,
+FUNCTION(InstantiateObjCClass, swift_instantiateObjCClass, C_CC,
          RETURNS(VoidTy),
          ARGS(TypeMetadataPtrTy),
          ATTRS(NoUnwind))
@@ -1358,33 +1335,23 @@
          RETURNS(RefCountedPtrTy),
          ARGS(Int8PtrTy, Int8PtrTy),
          ATTRS(NoUnwind))
-FUNCTION(CopyKeyPathTrivialIndices, swift_copyKeyPathTrivialIndices, DefaultCC,
+FUNCTION(CopyKeyPathTrivialIndices, swift_copyKeyPathTrivialIndices, C_CC,
          RETURNS(VoidTy),
          ARGS(Int8PtrTy, Int8PtrTy, SizeTy),
          ATTRS(NoUnwind))
 
-#if SWIFT_OBJC_INTEROP || !defined(SWIFT_RUNTIME_GENERATE_GLOBAL_SYMBOLS)
-
-// Put here all definitions of runtime functions which are:
-// - only available when SWIFT_OBJC_INTEROP is enabled
-// - need a global function pointer referring to their implementation,
-//   e.g. those defined FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL or using
-//   the RegisterPreservingCC calling convention.
-
-FUNCTION(GetInitializedObjCClass, swift_getInitializedObjCClass, RegisterPreservingCC,
+FUNCTION(GetInitializedObjCClass, swift_getInitializedObjCClass, C_CC,
          RETURNS(ObjCClassPtrTy),
          ARGS(ObjCClassPtrTy),
          ATTRS(NoUnwind))
 
 // void swift_objc_swift3ImplicitObjCEntrypoint(id self, SEL selector)
 FUNCTION(Swift3ImplicitObjCEntrypoint, swift_objc_swift3ImplicitObjCEntrypoint,
-         DefaultCC,
+         C_CC,
          RETURNS(VoidTy),
          ARGS(ObjCPtrTy, ObjCSELTy, Int8PtrTy, SizeTy, SizeTy, SizeTy, Int8PtrTy),
          ATTRS(NoUnwind))
 
-#endif
-
 FUNCTION(VerifyTypeLayoutAttribute, _swift_debug_verifyTypeLayoutAttribute,
          C_CC,
          RETURNS(VoidTy),
@@ -1396,6 +1363,5 @@
 #undef ATTRS
 #undef NO_ARGS
 #undef NO_ATTRS
-#undef FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL
 #undef FUNCTION
 #undef FUNCTION_NAME
diff --git a/include/swift/SIL/TypeLowering.h b/include/swift/SIL/TypeLowering.h
index d11a0a2..09fa63a 100644
--- a/include/swift/SIL/TypeLowering.h
+++ b/include/swift/SIL/TypeLowering.h
@@ -884,6 +884,9 @@
                               GenericEnvironment *env,
                               bool isMutable);
 
+  CanSILBoxType getBoxTypeForEnumElement(SILType enumType,
+                                         EnumElementDecl *elt);
+
 private:
   CanType getLoweredRValueType(AbstractionPattern origType, CanType substType);
 
diff --git a/lib/AST/ASTVerifier.cpp b/lib/AST/ASTVerifier.cpp
index 48563b9..133c867 100644
--- a/lib/AST/ASTVerifier.cpp
+++ b/lib/AST/ASTVerifier.cpp
@@ -1069,8 +1069,17 @@
       Type srcObj = checkLValue(E->getSubExpr()->getType(),
                                 "result of InOutExpr");
       auto DestTy = E->getType()->castTo<InOutType>()->getObjectType();
-      
-      checkSameType(DestTy, srcObj, "object types for InOutExpr");
+
+      // HACK: Allow differences in optionality of the source and
+      // result types. When IUO is gone from the type system we'll no
+      // longer need this.
+      auto srcOptObjTy = srcObj->getAnyOptionalObjectType();
+      auto dstOptObjTy = DestTy->getAnyOptionalObjectType();
+      if (srcOptObjTy && dstOptObjTy) {
+        checkSameType(srcOptObjTy, dstOptObjTy, "object types for InOutExpr");
+      } else {
+        checkSameType(DestTy, srcObj, "object types for InOutExpr");
+      }
       verifyCheckedBase(E);
     }
 
diff --git a/lib/Demangling/Demangler.cpp b/lib/Demangling/Demangler.cpp
index a0c204f..f1ee4fd 100644
--- a/lib/Demangling/Demangler.cpp
+++ b/lib/Demangling/Demangler.cpp
@@ -120,16 +120,13 @@
 int swift::Demangle::getManglingPrefixLength(llvm::StringRef mangledName) {
   if (mangledName.empty()) return 0;
 
-  // Check for the swift-4 prefix
-  if (mangledName.size() >= 3 && mangledName[0] == '_' &&
-      mangledName[1] == 'T' && mangledName[2] == '0')
-    return 3;
+  llvm::StringRef prefixes[] = {/*Swift 4*/ "_T0", /*Swift > 4*/ "$S", "_$S"};
 
-  // Check for the swift > 4 prefix
-  unsigned Offset = (mangledName[0] == '_' ? 1 : 0);
-  if (mangledName.size() >= Offset + 1 &&
-      mangledName[Offset] == '$' && mangledName[Offset + 1] == 'S')
-    return Offset + 2;
+  // Look for any of the known prefixes
+  for (auto prefix : prefixes) {
+    if (mangledName.startswith(prefix))
+      return prefix.size();
+  }
 
   return 0;
 }
@@ -142,13 +139,12 @@
 }
 
 bool swift::Demangle::isSwiftSymbol(const char *mangledName) {
-  StringRef mangledNameRef(mangledName, 4);
+  StringRef mangledNameRef(mangledName);
   return isSwiftSymbol(mangledNameRef);
 }
 
 bool swift::Demangle::isOldFunctionTypeMangling(llvm::StringRef mangledName) {
-  return mangledName.size() >= 2 && mangledName[0] == '_' &&
-      mangledName[1] == 'T';
+  return mangledName.startswith("_T");
 }
 
 llvm::StringRef swift::Demangle::dropSwiftManglingPrefix(StringRef mangledName){
diff --git a/lib/Demangling/OldRemangler.cpp b/lib/Demangling/OldRemangler.cpp
index f7deb90..f0e44a8 100644
--- a/lib/Demangling/OldRemangler.cpp
+++ b/lib/Demangling/OldRemangler.cpp
@@ -406,7 +406,9 @@
 static bool isInSwiftModule(Node *node) {
   Node *context = node->getFirstChild();
   return (context->getKind() == Node::Kind::Module &&
-          context->getText() == STDLIB_NAME);
+          context->getText() == STDLIB_NAME &&
+          // Check for private declarations in Swift
+          node->getChild(1)->getKind() == Node::Kind::Identifier);
 };
 
 bool Remangler::mangleStandardSubstitution(Node *node) {
diff --git a/lib/IRGen/IRGenModule.cpp b/lib/IRGen/IRGenModule.cpp
index f105199..d823999 100644
--- a/lib/IRGen/IRGenModule.cpp
+++ b/lib/IRGen/IRGenModule.cpp
@@ -404,25 +404,7 @@
   
   C_CC = llvm::CallingConv::C;
   // TODO: use "tinycc" on platforms that support it
-  DefaultCC = SWIFT_LLVM_CC(DefaultCC);
-  // If it is an interpreter, don't use try to use any
-  // advanced calling conventions and use instead a
-  // more conservative C calling convention. This
-  // makes sure that none of the registers eventually
-  // used by the dynamic linker are used by generated code.
-  // TODO: Check that the deployment target supports the new
-  // calling convention. Older versions of the runtime library
-  // may not contain the entries using the new calling convention.
-
-  // Only use the new calling conventions on platforms that support it.
-  auto Arch = Triple.getArch();
-  (void)Arch;
-  if (SWIFT_RT_USE_RegisterPreservingCC &&
-      Arch == llvm::Triple::ArchType::aarch64)
-    RegisterPreservingCC = SWIFT_LLVM_CC(RegisterPreservingCC);
-  else
-    RegisterPreservingCC = DefaultCC;
-
+  DefaultCC = SWIFT_DEFAULT_LLVM_CC;
   SwiftCC = llvm::CallingConv::Swift;
 
   if (IRGen.Opts.DebugInfoKind > IRGenDebugInfoKind::None)
@@ -530,123 +512,13 @@
   return cache;
 }
 
-llvm::Constant *swift::getWrapperFn(llvm::Module &Module,
-                                    llvm::Constant *&cache,
-                                    char const *name,
-                                    char const *symbol,
-                                    llvm::CallingConv::ID cc,
-                                    llvm::ArrayRef<llvm::Type *> retTypes,
-                                    llvm::ArrayRef<llvm::Type *> argTypes,
-                                    ArrayRef<Attribute::AttrKind> attrs) {
-  assert(symbol && "Symbol name should be defined for a wrapper function");
-  // Wrapper names should have a prefix to distinguish them from the
-  // actual runtime functions.
-  llvm::SmallString<128> wrapperNameStr;
-  llvm::raw_svector_ostream buffer(wrapperNameStr);
-  buffer << SWIFT_WRAPPER_PREFIX;
-  buffer << name;
-  const char *wrapperName = wrapperNameStr.c_str();
-  auto fn = getRuntimeFn(Module, cache, wrapperName, cc,
-                         retTypes, argTypes, attrs);
-  auto *fun = dyn_cast<llvm::Function>(fn);
-  assert(fun && "Wrapper should be an llvm::Function");
-  // Do not inline wrappers, because this would result in a code size increase.
-  fun->addAttribute(llvm::AttributeList::FunctionIndex,
-                    llvm::Attribute::NoInline);
-  assert(fun->hasFnAttribute(llvm::Attribute::NoInline) &&
-         "Wrappers should not be inlined");
-  if (fun->empty()) {
-    // All wrappers should have ODR linkage so that a linker can detect them
-    // and leave only one copy.
-    fun->setLinkage(llvm::Function::LinkOnceODRLinkage);
-    fun->setVisibility(llvm::Function::HiddenVisibility);
-    fun->setDLLStorageClass(llvm::Function::DefaultStorageClass);
-    fun->setDoesNotThrow();
-
-    // Add the body of a wrapper.
-    // It simply invokes the actual implementation of the runtime entry
-    // by means of indirect call through a pointer stored in the
-    // global variable.
-    llvm::IRBuilder<> Builder(Module.getContext());
-    llvm::BasicBlock *bb =
-        llvm::BasicBlock::Create(Module.getContext(), "entry", fun);
-    Builder.SetInsertPoint(bb);
-    auto fnTy = fun->getFunctionType();
-    auto fnPtrTy = llvm::PointerType::getUnqual(fnTy);
-
-    auto *globalFnPtr = new llvm::GlobalVariable(
-        Module, fnPtrTy, false, llvm::GlobalValue::ExternalLinkage, nullptr,
-        symbol);
-    if (::useDllStorage(llvm::Triple(Module.getTargetTriple())))
-      globalFnPtr->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
-
-    // Forward all arguments.
-    llvm::SmallVector<llvm::Value *, 4> args;
-    for (auto &arg: fun->args()) {
-      args.push_back(&arg);
-    }
-
-
-    auto fnPtr = Builder.CreateLoad(globalFnPtr, "load");
-
-    auto call = Builder.CreateCall(fnPtr, args);
-    call->setCallingConv(cc);
-    call->setTailCall(true);
-    for (auto Attr : attrs)
-      if (isReturnedAttribute(Attr)) {
-        call->addParamAttr(0, llvm::Attribute::Returned);
-      }
-    auto VoidTy = llvm::Type::getVoidTy(Module.getContext());
-    if (retTypes.size() == 1 && *retTypes.begin() == VoidTy)
-      Builder.CreateRetVoid();
-    else
-      Builder.CreateRet(call);
-  }
-
-  return fn;
-}
-
 #define QUOTE(...) __VA_ARGS__
 #define STR(X)     #X
 
-#define FUNCTION_FOR_CONV_DefaultCC(ID, NAME, CC, RETURNS, ARGS, ATTRS)        \
-  FUNCTION_IMPL(ID, NAME, CC, QUOTE(RETURNS), QUOTE(ARGS), QUOTE(ATTRS))
-
-#define FUNCTION_FOR_CONV_C_CC(ID, NAME, CC, RETURNS, ARGS, ATTRS)             \
-  FUNCTION_IMPL(ID, NAME, CC, QUOTE(RETURNS), QUOTE(ARGS), QUOTE(ATTRS))
-
-#define FUNCTION_FOR_CONV_SwiftCC(ID, NAME, CC, RETURNS, ARGS, ATTRS)          \
-  FUNCTION_IMPL(ID, NAME, CC, QUOTE(RETURNS), QUOTE(ARGS), QUOTE(ATTRS))
-
-#define FUNCTION_FOR_CONV_RegisterPreservingCC(ID, NAME, CC, RETURNS, ARGS,    \
-                                               ATTRS)                          \
-  FUNCTION_WITH_GLOBAL_SYMBOL_IMPL(ID, NAME, SWIFT_RT_ENTRY_REF(NAME), CC,     \
-                                   QUOTE(RETURNS), QUOTE(ARGS), QUOTE(ATTRS))
-
 #define FUNCTION(ID, NAME, CC, RETURNS, ARGS, ATTRS)                           \
-  FUNCTION_FOR_CONV_##CC(ID, NAME, CC, QUOTE(RETURNS), QUOTE(ARGS),            \
-                         QUOTE(ATTRS))
-
-#define FUNCTION_WITH_GLOBAL_SYMBOL_FOR_CONV_DefaultCC(ID, NAME, SYMBOL, CC,   \
-                                                       RETURNS, ARGS, ATTRS)   \
   FUNCTION_IMPL(ID, NAME, CC, QUOTE(RETURNS), QUOTE(ARGS), QUOTE(ATTRS))
 
-#define FUNCTION_WITH_GLOBAL_SYMBOL_FOR_CONV_C_CC(ID, NAME, SYMBOL, CC,        \
-                                                  RETURNS, ARGS, ATTRS)        \
-  FUNCTION_IMPL(ID, NAME, CC, QUOTE(RETURNS), QUOTE(ARGS), QUOTE(ATTRS))
-
-#define FUNCTION_WITH_GLOBAL_SYMBOL_FOR_CONV_RegisterPreservingCC(             \
-    ID, NAME, SYMBOL, CC, RETURNS, ARGS, ATTRS)                                \
-  FUNCTION_WITH_GLOBAL_SYMBOL_IMPL(ID, NAME, SYMBOL, CC, QUOTE(RETURNS),       \
-                                   QUOTE(ARGS), QUOTE(ATTRS))
-
-#define FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(ID, NAME, SYMBOL, IMPL, CC,       \
-                                             RETURNS, ARGS, ATTRS)             \
-  FUNCTION_WITH_GLOBAL_SYMBOL_FOR_CONV_##CC(                                   \
-      ID, NAME, SYMBOL, CC, QUOTE(RETURNS), QUOTE(ARGS), QUOTE(ATTRS))
-
-#define RETURNS(...)                                                           \
-  { __VA_ARGS__ }
+#define RETURNS(...) { __VA_ARGS__ }
 #define ARGS(...) { __VA_ARGS__ }
 #define NO_ARGS {}
 #define ATTRS(...) { __VA_ARGS__ }
@@ -658,14 +530,6 @@
     return getRuntimeFn(Module, ID##Fn, #NAME, CC, RETURNS, ARGS, ATTRS);      \
   }
 
-#define FUNCTION_WITH_GLOBAL_SYMBOL_IMPL(ID, NAME, SYMBOL_NAME, CC, RETURNS,   \
-                                         ARGS, ATTRS)                          \
-  llvm::Constant *IRGenModule::get##ID##Fn() {                                 \
-    using namespace RuntimeConstants;                                          \
-    return getWrapperFn(Module, ID##Fn, #NAME, STR(SYMBOL_NAME), CC, RETURNS,  \
-                        ARGS, ATTRS);                                          \
-  }
-
 #include "swift/Runtime/RuntimeFunctions.def"
 
 std::pair<llvm::GlobalVariable *, llvm::Constant *>
diff --git a/lib/IRGen/IRGenModule.h b/lib/IRGen/IRGenModule.h
index 189f223..cf7033f 100644
--- a/lib/IRGen/IRGenModule.h
+++ b/lib/IRGen/IRGenModule.h
@@ -522,8 +522,7 @@
   
   llvm::CallingConv::ID C_CC;          /// standard C calling convention
   llvm::CallingConv::ID DefaultCC;     /// default calling convention
-  llvm::CallingConv::ID RegisterPreservingCC; /// lightweight calling convention
-  llvm::CallingConv::ID SwiftCC;     /// swift calling convention
+  llvm::CallingConv::ID SwiftCC;       /// swift calling convention
 
   Signature getAssociatedTypeMetadataAccessFunctionSignature();
   Signature getAssociatedTypeWitnessTableAccessFunctionSignature();
diff --git a/lib/IRGen/StructMetadataVisitor.h b/lib/IRGen/StructMetadataVisitor.h
index 17dc558..15e29fc 100644
--- a/lib/IRGen/StructMetadataVisitor.h
+++ b/lib/IRGen/StructMetadataVisitor.h
@@ -50,14 +50,14 @@
 
     // If changing this layout, you must update the magic number in
     // emitParentMetadataRef.
-    
+
+    // Instantiation-specific.
+    asImpl().addGenericFields(Target, Target->getDeclaredTypeInContext());
+
     // Struct field offsets.
     asImpl().noteStartOfFieldOffsets();
     for (VarDecl *prop : Target->getStoredProperties())
       asImpl().addFieldOffset(prop);
-
-    // Instantiation-specific.
-    asImpl().addGenericFields(Target, Target->getDeclaredTypeInContext());
   }
   
   // Note the start of the field offset vector.
diff --git a/lib/LLVMPasses/ARCEntryPointBuilder.h b/lib/LLVMPasses/ARCEntryPointBuilder.h
index 195f130..a234ea0 100644
--- a/lib/LLVMPasses/ARCEntryPointBuilder.h
+++ b/lib/LLVMPasses/ARCEntryPointBuilder.h
@@ -69,7 +69,6 @@
   NullablePtr<Type> BridgeObjectPtrTy;
 
   llvm::CallingConv::ID DefaultCC;
-  llvm::CallingConv::ID RegisterPreservingCC;
 
   llvm::CallInst *CreateCall(Constant *Fn, Value *V) {
     CallInst *CI = B.CreateCall(Fn, V);
@@ -88,27 +87,7 @@
 public:
   ARCEntryPointBuilder(Function &F)
       : B(&*F.begin()), Retain(), ObjectPtrTy(),
-        DefaultCC(SWIFT_LLVM_CC(DefaultCC)) {
-    //If the target does not support the new calling convention,
-    //set RegisterPreservingCC to use a default calling convention.
-    RegisterPreservingCC = DefaultCC;
-
-    // Check if the register preserving calling convention
-    // is supported by the backend and should be used
-    // for the deployment target provided for this compilation.
-    if (SWIFT_RT_USE_RegisterPreservingCC) {
-      bool ShouldUseRegisterPreservingCC = false;
-      auto &TargetTriple = F.getParent()->getTargetTriple();
-      llvm::Triple Triple(TargetTriple);
-      auto Arch = Triple.getArch();
-      if (Arch == llvm::Triple::ArchType::aarch64) {
-        ShouldUseRegisterPreservingCC = true;
-      }
-
-      if (ShouldUseRegisterPreservingCC)
-        RegisterPreservingCC = SWIFT_LLVM_CC(RegisterPreservingCC);
-    }
-  }
+        DefaultCC(SWIFT_DEFAULT_LLVM_CC) { }
 
   ~ARCEntryPointBuilder() = default;
   ARCEntryPointBuilder(ARCEntryPointBuilder &&) = delete;
@@ -232,12 +211,10 @@
     auto *ObjectPtrTy = getObjectPtrTy();
 
     llvm::Constant *cache = nullptr;
-    Retain = getWrapperFn(
+    Retain = getRuntimeFn(
         getModule(), cache,
         isNonAtomic(OrigI) ? "swift_nonatomic_retain" : "swift_retain",
-        isNonAtomic(OrigI) ? SWIFT_RT_ENTRY_REF_AS_STR(swift_nonatomic_retain)
-                           : SWIFT_RT_ENTRY_REF_AS_STR(swift_retain),
-        RegisterPreservingCC, {ObjectPtrTy}, {ObjectPtrTy},
+        DefaultCC, {ObjectPtrTy}, {ObjectPtrTy},
         {NoUnwind, FirstParamReturned});
 
     return Retain.get();
@@ -251,12 +228,10 @@
     auto *VoidTy = Type::getVoidTy(getModule().getContext());
 
     llvm::Constant *cache = nullptr;
-    Release = getWrapperFn(
+    Release = getRuntimeFn(
         getModule(), cache,
         isNonAtomic(OrigI) ? "swift_nonatomic_release" : "swift_release",
-        isNonAtomic(OrigI) ? SWIFT_RT_ENTRY_REF_AS_STR(swift_nonatomic_release)
-                           : SWIFT_RT_ENTRY_REF_AS_STR(swift_release),
-        RegisterPreservingCC, {VoidTy}, {ObjectPtrTy}, {NoUnwind});
+        DefaultCC, {VoidTy}, {ObjectPtrTy}, {NoUnwind});
 
     return Release.get();
   }
@@ -288,12 +263,10 @@
     auto *Int32Ty = Type::getInt32Ty(getModule().getContext());
 
     llvm::Constant *cache = nullptr;
-    RetainN = getWrapperFn(
+    RetainN = getRuntimeFn(
         getModule(), cache,
         isNonAtomic(OrigI) ? "swift_nonatomic_retain_n" : "swift_retain_n",
-        isNonAtomic(OrigI) ? SWIFT_RT_ENTRY_REF_AS_STR(swift_nonatomic_retain_n)
-                           : SWIFT_RT_ENTRY_REF_AS_STR(swift_retain_n),
-        RegisterPreservingCC, {ObjectPtrTy}, {ObjectPtrTy, Int32Ty},
+        DefaultCC, {ObjectPtrTy}, {ObjectPtrTy, Int32Ty},
         {NoUnwind, FirstParamReturned});
 
     return RetainN.get();
@@ -308,13 +281,10 @@
     auto *VoidTy = Type::getVoidTy(getModule().getContext());
 
     llvm::Constant *cache = nullptr;
-    ReleaseN = getWrapperFn(
+    ReleaseN = getRuntimeFn(
         getModule(), cache,
         isNonAtomic(OrigI) ? "swift_nonatomic_release_n" : "swift_release_n",
-        isNonAtomic(OrigI)
-            ? SWIFT_RT_ENTRY_REF_AS_STR(swift_nonatomic_release_n)
-            : SWIFT_RT_ENTRY_REF_AS_STR(swift_release_n),
-        RegisterPreservingCC, {VoidTy}, {ObjectPtrTy, Int32Ty}, {NoUnwind});
+        DefaultCC, {VoidTy}, {ObjectPtrTy, Int32Ty}, {NoUnwind});
 
     return ReleaseN.get();
   }
diff --git a/lib/LLVMPasses/LLVMARCOpts.h b/lib/LLVMPasses/LLVMARCOpts.h
index 93a82dd..6edec7f 100644
--- a/lib/LLVMPasses/LLVMARCOpts.h
+++ b/lib/LLVMPasses/LLVMARCOpts.h
@@ -18,10 +18,6 @@
 #include "llvm/IR/Function.h"
 #include "llvm/ADT/StringSwitch.h"
 
-#if defined(SWIFT_WRAPPER_PREFIX)
-#define SWIFT_WRAPPER_NAME(Name) SWIFT_WRAPPER_PREFIX Name
-#endif
-
 namespace swift {
 
 enum RT_Kind {
@@ -50,15 +46,6 @@
     .Case("__swift_" #TextualName, RT_ ## Name)
 #include "LLVMSwift.def"
 
-#if defined(SWIFT_WRAPPER_PREFIX)
-#define SWIFT_FUNC(Name, MemBehavior, TextualName) \
-    .Case(SWIFT_WRAPPER_NAME("swift_" #TextualName), RT_ ## Name)
-#define OBJC_FUNC(Name, MemBehavior, TextualName) \
-    .Case(SWIFT_WRAPPER_NAME("objc_" #TextualName), RT_ ## Name)
-#define SWIFT_INTERNAL_FUNC_NEVER_NONATOMIC(Name, MemBehavior, TextualName)
-#include "LLVMSwift.def"
-#endif
-
     // Support non-atomic versions of reference counting entry points.
 #define SWIFT_FUNC(Name, MemBehavior, TextualName) \
     .Case("swift_nonatomic_" #TextualName, RT_ ## Name)
@@ -67,14 +54,6 @@
 #define SWIFT_INTERNAL_FUNC_NEVER_NONATOMIC(Name, MemBehavior, TextualName)
 #include "LLVMSwift.def"
 
-#if defined(SWIFT_WRAPPER_PREFIX)
-#define SWIFT_FUNC(Name, MemBehavior, TextualName) \
-    .Case(SWIFT_WRAPPER_NAME("swift_nonatomic_" #TextualName), RT_ ## Name)
-#define OBJC_FUNC(Name, MemBehavior, TextualName) \
-    .Case(SWIFT_WRAPPER_NAME("objc_nonatomic_" #TextualName), RT_ ## Name)
-#define SWIFT_INTERNAL_FUNC_NEVER_NONATOMIC(Name, MemBehavior, TextualName)
-#include "LLVMSwift.def"
-#endif
     .Default(RT_Unknown);
 }
 
diff --git a/lib/SIL/SILType.cpp b/lib/SIL/SILType.cpp
index ef76be1..a250b89 100644
--- a/lib/SIL/SILType.cpp
+++ b/lib/SIL/SILType.cpp
@@ -336,17 +336,19 @@
     return SILType(objectType, getCategory());
   }
 
+  // If the case is indirect, then the payload is boxed.
+  if (elt->isIndirect() || elt->getParentEnum()->isIndirect()) {
+    auto box = M.Types.getBoxTypeForEnumElement(*this, elt);
+    return SILType(SILType::getPrimitiveObjectType(box).getSwiftRValueType(),
+                   getCategory());
+  }
+
   auto substEltTy =
     getSwiftRValueType()->getTypeOfMember(M.getSwiftModule(), elt,
                                           elt->getArgumentInterfaceType());
   auto loweredTy =
     M.Types.getLoweredType(M.Types.getAbstractionPattern(elt), substEltTy);
 
-  // If the case is indirect, then the payload is boxed.
-  if (elt->isIndirect() || elt->getParentEnum()->isIndirect())
-    loweredTy = SILType::getPrimitiveObjectType(
-      SILBoxType::get(loweredTy.getSwiftRValueType()));
-
   return SILType(loweredTy.getSwiftRValueType(), getCategory());
 }
 
diff --git a/lib/SIL/TypeLowering.cpp b/lib/SIL/TypeLowering.cpp
index 839b958..1a254f1 100644
--- a/lib/SIL/TypeLowering.cpp
+++ b/lib/SIL/TypeLowering.cpp
@@ -2516,6 +2516,45 @@
   return boxType;
 }
 
+CanSILBoxType TypeConverter::getBoxTypeForEnumElement(SILType enumType,
+                                                      EnumElementDecl *elt) {
+
+  auto *enumDecl = enumType.getEnumOrBoundGenericEnum();
+
+  assert(elt->getDeclContext() == enumDecl);
+  assert(elt->isIndirect() || elt->getParentEnum()->isIndirect());
+
+  auto &C = M.getASTContext();
+
+  auto boxSignature = getEffectiveGenericSignature(enumDecl);
+
+  if (boxSignature == CanGenericSignature()) {
+    auto eltIntfTy = elt->getArgumentInterfaceType();
+    auto boxVarTy = getLoweredType(eltIntfTy).getSwiftRValueType();
+    auto layout = SILLayout::get(C, nullptr, SILField(boxVarTy, true));
+    return SILBoxType::get(C, layout, {});
+  }
+
+  // Use the enum's signature for the box type.
+  auto boundEnum = enumType.getSwiftRValueType();
+
+  // Lower the enum element's argument in the box's context.
+  auto eltIntfTy = elt->getArgumentInterfaceType();
+  GenericContextScope scope(*this, boxSignature);
+  auto boxVarTy = getLoweredType(getAbstractionPattern(elt), eltIntfTy)
+                      .getSwiftRValueType();
+  auto layout = SILLayout::get(C, boxSignature, SILField(boxVarTy, true));
+
+  // Instantiate the layout with enum's substitution list.
+  auto subMap = boundEnum->getContextSubstitutionMap(
+      M.getSwiftModule(), enumDecl, enumDecl->getGenericEnvironment());
+  SmallVector<Substitution, 4> genericArgs;
+  boxSignature->getSubstitutions(subMap, genericArgs);
+
+  auto boxTy = SILBoxType::get(C, layout, genericArgs);
+  return boxTy;
+}
+
 static void countNumberOfInnerFields(unsigned &fieldsCount, SILModule &Module,
                                      SILType Ty) {
   if (auto *structDecl = Ty.getStructOrBoundGenericStruct()) {
diff --git a/lib/SILGen/SILGenApply.cpp b/lib/SILGen/SILGenApply.cpp
index 3b49538..2dfaf13 100644
--- a/lib/SILGen/SILGenApply.cpp
+++ b/lib/SILGen/SILGenApply.cpp
@@ -3541,7 +3541,7 @@
   // throws, we know to deallocate the uninitialized box.
   if (element->isIndirect() ||
       element->getParentEnum()->isIndirect()) {
-    auto boxTy = SILBoxType::get(payloadTL.getLoweredType().getSwiftRValueType());
+    auto boxTy = SGM.M.Types.getBoxTypeForEnumElement(enumTy, element);
     auto *box = B.createAllocBox(loc, boxTy);
     auto *addr = B.createProjectBox(loc, box, 0);
 
diff --git a/lib/Sema/CSApply.cpp b/lib/Sema/CSApply.cpp
index 0a040e7..a0576f0 100644
--- a/lib/Sema/CSApply.cpp
+++ b/lib/Sema/CSApply.cpp
@@ -5518,6 +5518,38 @@
   return 0;
 }
 
+// HACK: Support calling functions with inouts of differing kinds of
+// optionality so that we can warn about overloading by IUO vs. plain
+// Optional and allow users to correct the issue by removing an
+// overload and passing the differently-optional value to the
+// remaining overload.
+bool inOutOptionalityDifferenceHack(Expr *arg, Type paramType,
+                                    ConstraintSystem &cs) {
+  auto *inOutArgTy = cs.getType(arg)->getAs<InOutType>();
+  if (!inOutArgTy)
+    return false;
+
+  auto *inOutParamTy = paramType->getAs<InOutType>();
+  if (!inOutParamTy)
+    return false;
+
+  OptionalTypeKind argOTK;
+  OptionalTypeKind paramOTK;
+  auto argObjTy = inOutArgTy->getObjectType()->getAnyOptionalObjectType(argOTK);
+  auto paramObjTy =
+      inOutParamTy->getObjectType()->getAnyOptionalObjectType(paramOTK);
+
+  if (argOTK == paramOTK || argOTK == OTK_None || paramOTK == OTK_None)
+    return false;
+
+  if (!argObjTy->isEqual(paramObjTy))
+    return false;
+
+  // Hammer over the argument type with the expected parameter type.
+  cs.setType(arg, paramType);
+  return true;
+}
+
 Expr *ExprRewriter::coerceCallArguments(
     Expr *arg, AnyFunctionType *funcType,
     ApplyExpr *apply,
@@ -5748,11 +5780,16 @@
       continue;
     }
 
-    // Convert the argument.
-    auto convertedArg = coerceToType(arg, paramType,
-                                     getArgLocator(argIdx, paramIdx));
-    if (!convertedArg)
-      return nullptr;
+    Expr *convertedArg;
+    if (inOutOptionalityDifferenceHack(arg, paramType, cs)) {
+      convertedArg = arg;
+    } else {
+      // Convert the argument.
+      convertedArg =
+          coerceToType(arg, paramType, getArgLocator(argIdx, paramIdx));
+      if (!convertedArg)
+        return nullptr;
+    }
 
     // Add the converted argument.
     fromTupleExpr[argIdx] = convertedArg;
diff --git a/lib/Sema/CSRanking.cpp b/lib/Sema/CSRanking.cpp
index 4f38811..1da00ae 100644
--- a/lib/Sema/CSRanking.cpp
+++ b/lib/Sema/CSRanking.cpp
@@ -80,6 +80,8 @@
     case SK_ValueToPointerConversion:
       log << "value-to-pointer conversion";
       break;
+    case SK_InOutOptionalityConversion:
+      log << "inout optionality conversion";
     }
     log << ")\n";
   }
diff --git a/lib/Sema/CSSimplify.cpp b/lib/Sema/CSSimplify.cpp
index d8d6345..b616aba 100644
--- a/lib/Sema/CSSimplify.cpp
+++ b/lib/Sema/CSSimplify.cpp
@@ -1863,16 +1863,32 @@
                         locator.withPathElement(
                           ConstraintLocator::ArrayElementType));
     
-    case TypeKind::InOut:
+    case TypeKind::InOut: {
       // If the RHS is an inout type, the LHS must be an @lvalue type.
       if (kind == ConstraintKind::BindParam ||
           kind >= ConstraintKind::OperatorArgumentConversion)
         return getTypeMatchFailure(locator);
-      
-      return matchTypes(cast<InOutType>(desugar1)->getObjectType(),
-                        cast<InOutType>(desugar2)->getObjectType(),
-                        ConstraintKind::Equal, subflags,
-                  locator.withPathElement(ConstraintLocator::ArrayElementType));
+
+      auto inoutObjTy1 = cast<InOutType>(desugar1)->getObjectType();
+      auto inoutObjTy2 = cast<InOutType>(desugar2)->getObjectType();
+
+      OptionalTypeKind OTK1;
+      OptionalTypeKind OTK2;
+      auto optionalObjTy1 = inoutObjTy1->getAnyOptionalObjectType(OTK1);
+      auto optionalObjTy2 = inoutObjTy2->getAnyOptionalObjectType(OTK2);
+      if (OTK1 != OTK2 && optionalObjTy1 && optionalObjTy2) {
+        increaseScore(ScoreKind::SK_InOutOptionalityConversion);
+        return matchTypes(inoutObjTy1,
+                          inoutObjTy2,
+                          ConstraintKind::ArgumentConversion, subflags,
+                          locator.withPathElement(ConstraintLocator::ArrayElementType));
+      } else {
+        return matchTypes(inoutObjTy1,
+                          inoutObjTy2,
+                          ConstraintKind::Equal, subflags,
+                          locator.withPathElement(ConstraintLocator::ArrayElementType));
+      }
+    }
 
     case TypeKind::UnboundGeneric:
       llvm_unreachable("Unbound generic type should have been opened");
diff --git a/lib/Sema/ConstraintSystem.h b/lib/Sema/ConstraintSystem.h
index f5af01b..11adc65 100644
--- a/lib/Sema/ConstraintSystem.h
+++ b/lib/Sema/ConstraintSystem.h
@@ -462,8 +462,12 @@
   SK_KeyPathSubscript,
   /// A conversion from a string, array, or inout to a pointer.
   SK_ValueToPointerConversion,
+  /// A conversion from 'inout Optional<T>' to 'inout
+  /// ImplicitlyUnwrappedOptional<T>' or vice-versa.
+  /// FIXME: This goes away when IUO-as-a-type goes away.
+  SK_InOutOptionalityConversion,
 
-  SK_LastScoreKind = SK_ValueToPointerConversion,
+  SK_LastScoreKind = SK_InOutOptionalityConversion,
 };
 
 /// The number of score kinds.
diff --git a/lib/Sema/TypeChecker.cpp b/lib/Sema/TypeChecker.cpp
index e9118d0..b2bbe27 100644
--- a/lib/Sema/TypeChecker.cpp
+++ b/lib/Sema/TypeChecker.cpp
@@ -675,8 +675,18 @@
     verify(SF);
 
     // Verify imported modules.
+    //
+    // Skip per-file verification in whole-module mode. Verifying imports
+    // between files could cause the importer to cache declarations without
+    // adding them to the ASTContext. This happens when the importer registers a
+    // declaration without a valid TypeChecker instance, as is the case during
+    // verification. A subsequent file may require that declaration to be fully
+    // imported (e.g. to synthesized a function body), but since it has already
+    // been cached, it will never be added to the ASTContext. The solution is to
+    // skip verification and avoid caching it.
 #ifndef NDEBUG
-    if (SF.Kind != SourceFileKind::REPL &&
+    if (!(Options & TypeCheckingFlags::DelayWholeModuleChecking) &&
+        SF.Kind != SourceFileKind::REPL &&
         SF.Kind != SourceFileKind::SIL &&
         !Ctx.LangOpts.DebuggerSupport) {
       Ctx.verifyAllLoadedModules();
@@ -692,6 +702,21 @@
   Ctx.diagnoseObjCMethodConflicts(SF);
   Ctx.diagnoseObjCUnsatisfiedOptReqConflicts(SF);
   Ctx.diagnoseUnintendedObjCMethodOverrides(SF);
+
+  // In whole-module mode, import verification is deferred until all files have
+  // been type checked. This avoids caching imported declarations when a valid
+  // type checker is not present. The same declaration may need to be fully
+  // imported by subsequent files.
+  //
+  // FIXME: some playgrounds tests (playground_lvalues.swift) fail with
+  // verification enabled.
+#if 0
+  if (SF.Kind != SourceFileKind::REPL &&
+      SF.Kind != SourceFileKind::SIL &&
+      !Ctx.LangOpts.DebuggerSupport) {
+    Ctx.verifyAllLoadedModules();
+  }
+#endif
 }
 
 bool swift::performTypeLocChecking(ASTContext &Ctx, TypeLoc &T,
diff --git a/stdlib/private/StdlibUnittestFoundationExtras/UnavailableFoundationMethodThunks.mm b/stdlib/private/StdlibUnittestFoundationExtras/UnavailableFoundationMethodThunks.mm
index ccb5ac0..3426c62 100644
--- a/stdlib/private/StdlibUnittestFoundationExtras/UnavailableFoundationMethodThunks.mm
+++ b/stdlib/private/StdlibUnittestFoundationExtras/UnavailableFoundationMethodThunks.mm
@@ -19,7 +19,7 @@
                    id *objects, NSUInteger rangeLocation,
                    NSUInteger rangeLength) {
   [nsArray getObjects:objects range:NSMakeRange(rangeLocation, rangeLength)];
-  [nsArray release];
+  SWIFT_CC_PLUSONE_GUARD([nsArray release]);
 }
 
 SWIFT_CC(swift) LLVM_LIBRARY_VISIBILITY
@@ -27,6 +27,6 @@
 NSDictionary_getObjects(NSDictionary *_Nonnull nsDictionary,
                         id *objects, id *keys) {
   [nsDictionary getObjects:objects andKeys:keys];
-  [nsDictionary release];
+  SWIFT_CC_PLUSONE_GUARD([nsDictionary release]);
 }
 
diff --git a/stdlib/public/SDK/Foundation/DataThunks.m b/stdlib/public/SDK/Foundation/DataThunks.m
index 90975bd..c014651 100644
--- a/stdlib/public/SDK/Foundation/DataThunks.m
+++ b/stdlib/public/SDK/Foundation/DataThunks.m
@@ -120,8 +120,8 @@
 
     if (![path getFileSystemRepresentation:cpath maxLength:1024]) {
         if (errorPtr) *errorPtr = _NSErrorWithFilePath(NSFileWriteInvalidFileNameError, path);
-        [data release];
-        [url release];
+        SWIFT_CC_PLUSONE_GUARD([data release]);
+        SWIFT_CC_PLUSONE_GUARD([url release]);
         return NO;
     }
 
@@ -137,8 +137,8 @@
     int32_t fd = _NSOpenFileDescriptor(cpath, flags, protectionClass, 0666);
     if (fd < 0) {
         if (errorPtr) *errorPtr = _NSErrorWithFilePathAndErrno(errno, path, NO);
-        [url release];
-        [data release];
+        SWIFT_CC_PLUSONE_GUARD([url release]);
+        SWIFT_CC_PLUSONE_GUARD([data release]);
         return NO;
     }
 
@@ -172,12 +172,12 @@
         if (errorPtr) {
             *errorPtr = _NSErrorWithFilePathAndErrno(errno, path, NO);
         }
-        [url release];
-        [data release];
+        SWIFT_CC_PLUSONE_GUARD([url release]);
+        SWIFT_CC_PLUSONE_GUARD([data release]);
         return NO;
     }
     close(fd);
-    [url release];
-    [data release];
+    SWIFT_CC_PLUSONE_GUARD([url release]);
+    SWIFT_CC_PLUSONE_GUARD([data release]);
     return YES;
 }
diff --git a/stdlib/public/SDK/Foundation/TypePreservingNSNumber.mm b/stdlib/public/SDK/Foundation/TypePreservingNSNumber.mm
index 69f2b66..21b7672 100644
--- a/stdlib/public/SDK/Foundation/TypePreservingNSNumber.mm
+++ b/stdlib/public/SDK/Foundation/TypePreservingNSNumber.mm
@@ -325,7 +325,7 @@
   } else if (CFGetTypeID(self_) == CFBooleanGetTypeID()) {
     result = SwiftBool;
   }
-  [self_ release];
+  SWIFT_CC_PLUSONE_GUARD([self_ release]);
   return result;
 }
 
@@ -339,7 +339,7 @@
     } \
     C_TYPE result; \
     memcpy(&result, self_->storage, sizeof(result)); \
-    [self_ release]; \
+    SWIFT_CC_PLUSONE_GUARD([self_ release]); \
     return result; \
   }
 
diff --git a/stdlib/public/SwiftShims/RefCount.h b/stdlib/public/SwiftShims/RefCount.h
index 2bbefe9..13430e3 100644
--- a/stdlib/public/SwiftShims/RefCount.h
+++ b/stdlib/public/SwiftShims/RefCount.h
@@ -192,8 +192,7 @@
 
 // FIXME: HACK: copied from HeapObject.cpp
 extern "C" LLVM_LIBRARY_VISIBILITY LLVM_ATTRIBUTE_NOINLINE LLVM_ATTRIBUTE_USED
-void _swift_release_dealloc(swift::HeapObject *object)
-SWIFT_CC(RegisterPreservingCC_IMPL);
+void _swift_release_dealloc(swift::HeapObject *object);
 
 namespace swift {
 
diff --git a/stdlib/public/core/DebuggerSupport.swift b/stdlib/public/core/DebuggerSupport.swift
index ab671fb..af7fbca 100644
--- a/stdlib/public/core/DebuggerSupport.swift
+++ b/stdlib/public/core/DebuggerSupport.swift
@@ -170,6 +170,11 @@
     if isRoot || collectionStatus.isCollection { return true }
     let count = Int(mirror.children.count)
     if count > 0 { return true }
+    if let ds = mirror.displayStyle {
+      if ds == .`class` {
+        return true
+      }
+    }
     if let sc = mirror.superclassMirror {
       return ivarCount(mirror: sc) > 0
     } else {
diff --git a/stdlib/public/core/RuntimeFunctionCounters.swift b/stdlib/public/core/RuntimeFunctionCounters.swift
index 5587ad2..3b3274f 100644
--- a/stdlib/public/core/RuntimeFunctionCounters.swift
+++ b/stdlib/public/core/RuntimeFunctionCounters.swift
@@ -18,6 +18,12 @@
 //  number of invocations, or per-object counters, which represent the
 //  number of runtime functions calls for a specific object.
 
+// By default, this feature is enabled only when assertions are enabled. To control it
+// separately, set the SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS environment variable when
+// invoking build-script:
+// SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS=TRUE ./utils/build-script ...
+#if SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS
+
 /// Collect all references inside the object using Mirrors.
 /// - Parameter value: the value to be inspected
 /// - Parameter references: the array which should contain the collected
@@ -541,3 +547,5 @@
       mode: savedMode)
     return (globalCountersBefore.diff(globalCountersAfter), objectsCountersDiff)
 }
+
+#endif
diff --git a/stdlib/public/runtime/AnyHashableSupport.cpp b/stdlib/public/runtime/AnyHashableSupport.cpp
index 8a1b904..4861fbc 100644
--- a/stdlib/public/runtime/AnyHashableSupport.cpp
+++ b/stdlib/public/runtime/AnyHashableSupport.cpp
@@ -161,6 +161,7 @@
 
       if (auto unboxedHashableWT =
               swift_conformsToProtocol(type, &HashableProtocolDescriptor)) {
+#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
         ValueBuffer unboxedCopyBuf;
         // Allocate buffer.
         OpaqueValue *unboxedValueCopy =
@@ -172,9 +173,15 @@
         _swift_makeAnyHashableUpcastingToHashableBaseType(
             unboxedValueCopy, anyHashableResultPointer, unboxedType,
             unboxedHashableWT);
+
         // Deallocate buffer.
         unboxedType->deallocateBufferIn(&unboxedCopyBuf);
         type->vw_destroy(value);
+#else
+        _swift_makeAnyHashableUpcastingToHashableBaseType(
+            unboxedValue, anyHashableResultPointer, unboxedType,
+            unboxedHashableWT);
+#endif
         return;
       }
     }
diff --git a/stdlib/public/runtime/Array.cpp b/stdlib/public/runtime/Array.cpp
index 24f9faf..ec9b5de 100644
--- a/stdlib/public/runtime/Array.cpp
+++ b/stdlib/public/runtime/Array.cpp
@@ -134,7 +134,6 @@
   } while (i != 0);
 }
 
-SWIFT_CC(c)
 SWIFT_RUNTIME_EXPORT
 void swift_arrayInitWithCopy(OpaqueValue *dest, OpaqueValue *src, size_t count,
                              const Metadata *self) {
@@ -142,7 +141,6 @@
       dest, src, count, self);
 }
 
-SWIFT_CC(c)
 SWIFT_RUNTIME_EXPORT
 void swift_arrayInitWithTakeNoAlias(OpaqueValue *dest, OpaqueValue *src,
                                     size_t count, const Metadata *self) {
@@ -150,7 +148,6 @@
       dest, src, count, self);
 }
 
-SWIFT_CC(c)
 SWIFT_RUNTIME_EXPORT
 void swift_arrayInitWithTakeFrontToBack(OpaqueValue *dest, OpaqueValue *src,
                                         size_t count, const Metadata *self) {
@@ -158,7 +155,6 @@
                        ArrayCopy::FrontToBack>(dest, src, count, self);
 }
 
-SWIFT_CC(c)
 SWIFT_RUNTIME_EXPORT
 void swift_arrayInitWithTakeBackToFront(OpaqueValue *dest, OpaqueValue *src,
                                         size_t count, const Metadata *self) {
@@ -166,7 +162,6 @@
                        ArrayCopy::BackToFront>(dest, src, count, self);
 }
 
-SWIFT_CC(c)
 SWIFT_RUNTIME_EXPORT
 void swift_arrayAssignWithCopyNoAlias(OpaqueValue *dest, OpaqueValue *src,
                                       size_t count, const Metadata *self) {
@@ -174,7 +169,6 @@
                        ArrayCopy::NoAlias>(dest, src, count, self);
 }
 
-SWIFT_CC(c)
 SWIFT_RUNTIME_EXPORT
 void swift_arrayAssignWithCopyFrontToBack(OpaqueValue *dest, OpaqueValue *src,
                                           size_t count, const Metadata *self) {
@@ -182,7 +176,6 @@
                        ArrayCopy::FrontToBack>(dest, src, count, self);
 }
 
-SWIFT_CC(c)
 SWIFT_RUNTIME_EXPORT
 void swift_arrayAssignWithCopyBackToFront(OpaqueValue *dest, OpaqueValue *src,
                                           size_t count, const Metadata *self) {
@@ -190,7 +183,6 @@
                        ArrayCopy::BackToFront>(dest, src, count, self);
 }
 
-SWIFT_CC(c)
 SWIFT_RUNTIME_EXPORT
 void swift_arrayAssignWithTake(OpaqueValue *dest, OpaqueValue *src,
                                size_t count, const Metadata *self) {
@@ -198,7 +190,6 @@
                        ArrayCopy::NoAlias>(dest, src, count, self);
 }
 
-SWIFT_CC(c)
 SWIFT_RUNTIME_EXPORT
 void swift_arrayDestroy(OpaqueValue *begin, size_t count, const Metadata *self) {
   if (count == 0)
diff --git a/stdlib/public/runtime/CMakeLists.txt b/stdlib/public/runtime/CMakeLists.txt
index 08ae964..e9c1ee8 100644
--- a/stdlib/public/runtime/CMakeLists.txt
+++ b/stdlib/public/runtime/CMakeLists.txt
@@ -62,7 +62,6 @@
     Portability.cpp
     ProtocolConformance.cpp
     RefCount.cpp
-    RuntimeEntrySymbols.cpp
     RuntimeInvocationsTracking.cpp
     "${SWIFT_SOURCE_DIR}/lib/Demangling/OldDemangler.cpp"
     "${SWIFT_SOURCE_DIR}/lib/Demangling/Demangler.cpp"
diff --git a/stdlib/public/runtime/Casting.cpp b/stdlib/public/runtime/Casting.cpp
index 1c46897..b877ab4 100644
--- a/stdlib/public/runtime/Casting.cpp
+++ b/stdlib/public/runtime/Casting.cpp
@@ -266,8 +266,7 @@
 
 /// Dynamically cast a class instance to a Swift class type.
 const void *swift::swift_dynamicCastClass(const void *object,
-                                          const ClassMetadata *targetType)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+                                          const ClassMetadata *targetType) {
 #if SWIFT_OBJC_INTEROP
   assert(!targetType->isPureObjC());
 
@@ -567,7 +566,7 @@
 }
 
 #if SWIFT_OBJC_INTEROP
-SWIFT_CC(c) SWIFT_RUNTIME_EXPORT
+SWIFT_RUNTIME_EXPORT
 id
 swift_dynamicCastMetatypeToObjectConditional(const Metadata *metatype) {
   switch (metatype->getKind()) {
@@ -595,7 +594,7 @@
   }
 }
 
-SWIFT_CC(c) SWIFT_RUNTIME_EXPORT
+SWIFT_RUNTIME_EXPORT
 id
 swift_dynamicCastMetatypeToObjectUnconditional(const Metadata *metatype) {
   switch (metatype->getKind()) {
@@ -2403,8 +2402,7 @@
 bool swift::swift_dynamicCast(OpaqueValue *dest, OpaqueValue *src,
                               const Metadata *srcType,
                               const Metadata *targetType,
-                              DynamicCastFlags flags)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+                              DynamicCastFlags flags) {
   auto unwrapResult = checkDynamicCastFromOptional(dest, src, srcType,
                                                    targetType, flags);
   srcType = unwrapResult.payloadType;
@@ -3235,13 +3233,13 @@
 }
 
 // Called by compiler-generated cast code.
-SWIFT_CC(c) SWIFT_RUNTIME_STDLIB_API
+SWIFT_RUNTIME_STDLIB_API
 bool swift_isClassType(const Metadata *type) {
   return Metadata::isAnyKindOfClass(type->getKind());
 }
 
 // Called by compiler-generated code.
-SWIFT_CC(c) SWIFT_RUNTIME_STDLIB_API
+SWIFT_RUNTIME_STDLIB_API
 bool swift_isOptionalType(const Metadata *type) {
   return type->getKind() == MetadataKind::Optional;
 }
diff --git a/stdlib/public/runtime/Enum.cpp b/stdlib/public/runtime/Enum.cpp
index e547848..e69e47f 100644
--- a/stdlib/public/runtime/Enum.cpp
+++ b/stdlib/public/runtime/Enum.cpp
@@ -133,8 +133,7 @@
 
 int swift::swift_getEnumCaseSinglePayload(const OpaqueValue *value,
                                           const Metadata *payload,
-                                          unsigned emptyCases)
-  SWIFT_CC(RegisterPreservingCC_IMPL) {
+                                          unsigned emptyCases) {
 
   auto *payloadWitnesses = payload->getValueWitnesses();
   auto size = payloadWitnesses->getSize();
@@ -150,8 +149,7 @@
 
 void swift::swift_storeEnumTagSinglePayload(OpaqueValue *value,
                                             const Metadata *payload,
-                                            int whichCase, unsigned emptyCases)
-  SWIFT_CC(RegisterPreservingCC_IMPL) {
+                                            int whichCase, unsigned emptyCases){
 
   auto *payloadWitnesses = payload->getValueWitnesses();
   auto size = payloadWitnesses->getSize();
diff --git a/stdlib/public/runtime/ErrorObject.mm b/stdlib/public/runtime/ErrorObject.mm
index 5163e27..7d2cb21 100644
--- a/stdlib/public/runtime/ErrorObject.mm
+++ b/stdlib/public/runtime/ErrorObject.mm
@@ -382,10 +382,13 @@
     reinterpret_cast<GetDefaultFn*> (dlsym(RTLD_DEFAULT,
     MANGLE_AS_STRING(MANGLE_SYM(10Foundation24_getErrorDefaultUserInfoyyXlSgxs0C0RzlF)))));
   if (!foundationGetDefaultUserInfo) {
-    T->vw_destroy(error);
+    SWIFT_CC_PLUSONE_GUARD(T->vw_destroy(error));
     return nullptr;
   }
 
+  // +0 Convention: In the case where we have the +1 convention, this will
+  // destroy the error for us, otherwise, it will take the value guaranteed. The
+  // conclusion is that we can leave this alone.
   return foundationGetDefaultUserInfo(error, T, Error);
 }
 
diff --git a/stdlib/public/runtime/Heap.cpp b/stdlib/public/runtime/Heap.cpp
index e7d2b12..90bd56a 100644
--- a/stdlib/public/runtime/Heap.cpp
+++ b/stdlib/public/runtime/Heap.cpp
@@ -22,15 +22,13 @@
 
 using namespace swift;
 
-void *swift::swift_slowAlloc(size_t size, size_t alignMask)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void *swift::swift_slowAlloc(size_t size, size_t alignMask) {
   // FIXME: use posix_memalign if alignMask is larger than the system guarantee.
   void *p = malloc(size);
   if (!p) swift::crash("Could not allocate memory.");
   return p;
 }
 
-void swift::swift_slowDealloc(void *ptr, size_t bytes, size_t alignMask)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_slowDealloc(void *ptr, size_t bytes, size_t alignMask) {
   free(ptr);
 }
diff --git a/stdlib/public/runtime/HeapObject.cpp b/stdlib/public/runtime/HeapObject.cpp
index fa24f1a..f7a0d66 100644
--- a/stdlib/public/runtime/HeapObject.cpp
+++ b/stdlib/public/runtime/HeapObject.cpp
@@ -27,6 +27,7 @@
 #include "RuntimeInvocationsTracking.h"
 #include "WeakReference.h"
 #include "swift/Runtime/Debug.h"
+#include "swift/Runtime/InstrumentsSupport.h"
 #include <algorithm>
 #include <cassert>
 #include <cstring>
@@ -40,7 +41,7 @@
 # include <objc/runtime.h>
 # include <objc/message.h>
 # include <objc/objc.h>
-#include "swift/Runtime/ObjCBridge.h"
+# include "swift/Runtime/ObjCBridge.h"
 #endif
 #include "Leaks.h"
 
@@ -76,23 +77,16 @@
 
 HeapObject *swift::swift_allocObject(HeapMetadata const *metadata,
                                      size_t requiredSize,
-                                     size_t requiredAlignmentMask)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
-  return SWIFT_RT_ENTRY_REF(swift_allocObject)(metadata, requiredSize,
-                                               requiredAlignmentMask);
+                                     size_t requiredAlignmentMask) {
+  return _swift_allocObject(metadata, requiredSize, requiredAlignmentMask);
 }
 
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C"
-HeapObject *
-SWIFT_RT_ENTRY_IMPL(swift_allocObject)(HeapMetadata const *metadata,
+static HeapObject *_swift_allocObject_(HeapMetadata const *metadata,
                                        size_t requiredSize,
-                                       size_t requiredAlignmentMask)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+                                       size_t requiredAlignmentMask) {
   assert(isAlignmentMask(requiredAlignmentMask));
   auto object = reinterpret_cast<HeapObject *>(
-      SWIFT_RT_ENTRY_CALL(swift_slowAlloc)(requiredSize,
-                                           requiredAlignmentMask));
+      swift_slowAlloc(requiredSize, requiredAlignmentMask));
   // FIXME: this should be a placement new but that adds a null check
   object->metadata = metadata;
   object->refCounts.init();
@@ -105,6 +99,8 @@
   return object;
 }
 
+auto swift::_swift_allocObject = _swift_allocObject_;
+
 HeapObject *
 swift::swift_initStackObject(HeapMetadata const *metadata,
                              HeapObject *object) {
@@ -163,18 +159,13 @@
 /// \brief Allocate a reference-counted object on the heap that
 /// occupies <size> bytes of maximally-aligned storage.  The object is
 /// uninitialized except for its header.
-SWIFT_CC(swift)
-SWIFT_RUNTIME_EXPORT
+SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_INTERNAL
 HeapObject* swift_bufferAllocate(
   HeapMetadata const* bufferType, size_t size, size_t alignMask)
 {
-  return swift::SWIFT_RT_ENTRY_CALL(swift_allocObject)(bufferType, size,
-                                                       alignMask);
+  return swift::swift_allocObject(bufferType, size, alignMask);
 }
 
-SWIFT_RUNTIME_EXPORT
-intptr_t swift_bufferHeaderSize() { return sizeof(HeapObject); }
-
 namespace {
 /// Heap object destructor for a generic box allocated with swift_allocBox.
 static SWIFT_CC(swift) void destroyGenericBox(SWIFT_CONTEXT HeapObject *o) {
@@ -184,8 +175,8 @@
   metadata->BoxedType->vw_destroy(value);
 
   // Deallocate the box.
-  SWIFT_RT_ENTRY_CALL(swift_deallocObject) (o, metadata->getAllocSize(),
-                                            metadata->getAllocAlignMask());
+  swift_deallocObject(o, metadata->getAllocSize(),
+                      metadata->getAllocAlignMask());
 }
 
 class BoxCacheEntry {
@@ -219,10 +210,6 @@
 
 static SimpleGlobalCache<BoxCacheEntry> Boxes;
 
-BoxPair::Return swift::swift_allocBox(const Metadata *type) {
-  return SWIFT_RT_ENTRY_REF(swift_allocBox)(type);
-}
-
 BoxPair::Return swift::swift_makeBoxUnique(OpaqueValue *buffer, const Metadata *type,
                                     size_t alignMask) {
   auto *inlineBuffer = reinterpret_cast<ValueBuffer*>(buffer);
@@ -248,26 +235,30 @@
   }
 }
 
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C"
-BoxPair::Return SWIFT_RT_ENTRY_IMPL(swift_allocBox)(const Metadata *type) {
+BoxPair::Return swift::swift_allocBox(const Metadata *type) {
+  return _swift_allocBox(type);
+}
+
+static BoxPair::Return _swift_allocBox_(const Metadata *type) {
   // Get the heap metadata for the box.
   auto metadata = &Boxes.getOrInsert(type).first->Data;
 
   // Allocate and project the box.
-  auto allocation = SWIFT_RT_ENTRY_CALL(swift_allocObject)(
-      metadata, metadata->getAllocSize(), metadata->getAllocAlignMask());
+  auto allocation = swift_allocObject(metadata, metadata->getAllocSize(),
+                                      metadata->getAllocAlignMask());
   auto projection = metadata->project(allocation);
 
   return BoxPair{allocation, projection};
 }
 
+auto swift::_swift_allocBox = _swift_allocBox_;
+
 void swift::swift_deallocBox(HeapObject *o) {
   auto metadata = static_cast<const GenericBoxHeapMetadata *>(o->metadata);
   // Move the object to the deallocating state (+1 -> +0).
   o->refCounts.decrementFromOneNonAtomic();
-  SWIFT_RT_ENTRY_CALL(swift_deallocObject)(o, metadata->getAllocSize(),
-                                           metadata->getAllocAlignMask());
+  swift_deallocObject(o, metadata->getAllocSize(),
+                      metadata->getAllocAlignMask());
 }
 
 OpaqueValue *swift::swift_projectBox(HeapObject *o) {
@@ -300,126 +291,85 @@
 
 HeapObject *swift::swift_allocEmptyBox() {
   auto heapObject = reinterpret_cast<HeapObject*>(&_EmptyBoxStorage);
-  SWIFT_RT_ENTRY_CALL(swift_retain)(heapObject);
+  swift_retain(heapObject);
   return heapObject;
 }
 
 // Forward-declare this, but define it after swift_release.
 extern "C" LLVM_LIBRARY_VISIBILITY LLVM_ATTRIBUTE_NOINLINE LLVM_ATTRIBUTE_USED 
-void _swift_release_dealloc(HeapObject *object) SWIFT_CC(RegisterPreservingCC_IMPL);
+void _swift_release_dealloc(HeapObject *object);
 
-HeapObject *swift::swift_retain(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
-  return SWIFT_RT_ENTRY_REF(swift_retain)(object);
+HeapObject *swift::swift_retain(HeapObject *object) {
+  return _swift_retain(object);
 }
 
-HeapObject *swift::swift_nonatomic_retain(HeapObject *object) {
-  return SWIFT_RT_ENTRY_REF(swift_nonatomic_retain)(object);
-}
-
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C" HeapObject *
-SWIFT_RT_ENTRY_IMPL(swift_nonatomic_retain)(HeapObject *object) {
-  SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_retain);
-  if (isValidPointerForNativeRetain(object))
-    object->refCounts.incrementNonAtomic(1);
-  return object;
-}
-
-void swift::swift_nonatomic_release(HeapObject *object) {
-  return SWIFT_RT_ENTRY_REF(swift_nonatomic_release)(object);
-}
-
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C"
-void SWIFT_RT_ENTRY_IMPL(swift_nonatomic_release)(HeapObject *object) {
-  SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_release);
-  if (isValidPointerForNativeRetain(object))
-    object->refCounts.decrementAndMaybeDeinitNonAtomic(1);
-}
-
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C"
-HeapObject *SWIFT_RT_ENTRY_IMPL(swift_retain)(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+static HeapObject *_swift_retain_(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_retain);
   if (isValidPointerForNativeRetain(object))
     object->refCounts.increment(1);
   return object;
 }
 
-HeapObject *swift::swift_retain_n(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
-  return SWIFT_RT_ENTRY_REF(swift_retain_n)(object, n);
+auto swift::_swift_retain = _swift_retain_;
+
+HeapObject *swift::swift_nonatomic_retain(HeapObject *object) {
+  SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_retain);
+  if (isValidPointerForNativeRetain(object))
+    object->refCounts.incrementNonAtomic(1);
+  return object;
 }
 
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C"
-HeapObject *SWIFT_RT_ENTRY_IMPL(swift_retain_n)(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+HeapObject *swift::swift_retain_n(HeapObject *object, uint32_t n) {
+  return _swift_retain_n(object, n);
+}
+
+static HeapObject *_swift_retain_n_(HeapObject *object, uint32_t n) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_retain_n);
   if (isValidPointerForNativeRetain(object))
     object->refCounts.increment(n);
   return object;
 }
 
-HeapObject *swift::swift_nonatomic_retain_n(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
-  return SWIFT_RT_ENTRY_REF(swift_nonatomic_retain_n)(object, n);
-}
+auto swift::_swift_retain_n = _swift_retain_n_;
 
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C" HeapObject *
-SWIFT_RT_ENTRY_IMPL(swift_nonatomic_retain_n)(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+HeapObject *swift::swift_nonatomic_retain_n(HeapObject *object, uint32_t n) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_retain_n);
   if (isValidPointerForNativeRetain(object))
     object->refCounts.incrementNonAtomic(n);
   return object;
 }
 
-void swift::swift_release(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
-  SWIFT_RT_ENTRY_REF(swift_release)(object);
+void swift::swift_release(HeapObject *object) {
+  _swift_release(object);
 }
 
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C"
-void SWIFT_RT_ENTRY_IMPL(swift_release)(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+static void _swift_release_(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_release);
   if (isValidPointerForNativeRetain(object))
     object->refCounts.decrementAndMaybeDeinit(1);
 }
 
-void swift::swift_release_n(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
-  return SWIFT_RT_ENTRY_REF(swift_release_n)(object, n);
+auto swift::_swift_release = _swift_release_;
+
+void swift::swift_nonatomic_release(HeapObject *object) {
+  SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_release);
+  if (isValidPointerForNativeRetain(object))
+    object->refCounts.decrementAndMaybeDeinitNonAtomic(1);
 }
 
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C"
-void SWIFT_RT_ENTRY_IMPL(swift_release_n)(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_release_n(HeapObject *object, uint32_t n) {
+  return _swift_release_n(object, n);
+}
+
+static void _swift_release_n_(HeapObject *object, uint32_t n) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_release_n);
   if (isValidPointerForNativeRetain(object))
     object->refCounts.decrementAndMaybeDeinit(n);
 }
 
-void swift::swift_setDeallocating(HeapObject *object) {
-  SWIFT_RT_TRACK_INVOCATION(object, swift_setDeallocating);
-  object->refCounts.decrementFromOneNonAtomic();
-}
+auto swift::_swift_release_n = _swift_release_n_;
 
-void swift::swift_nonatomic_release_n(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
-  return SWIFT_RT_ENTRY_REF(swift_nonatomic_release_n)(object, n);
-}
-
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C"
-void SWIFT_RT_ENTRY_IMPL(swift_nonatomic_release_n)(HeapObject *object, uint32_t n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_nonatomic_release_n(HeapObject *object, uint32_t n) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_release_n);
   if (isValidPointerForNativeRetain(object))
     object->refCounts.decrementAndMaybeDeinitNonAtomic(n);
@@ -433,8 +383,7 @@
   return object->refCounts.getUnownedCount();
 }
 
-HeapObject *swift::swift_unownedRetain(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+HeapObject *swift::swift_unownedRetain(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_unownedRetain);
   if (!isValidPointerForNativeRetain(object))
     return object;
@@ -443,8 +392,7 @@
   return object;
 }
 
-void swift::swift_unownedRelease(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_unownedRelease(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_unownedRelease);
   if (!isValidPointerForNativeRetain(object))
     return;
@@ -456,14 +404,12 @@
   if (object->refCounts.decrementUnownedShouldFree(1)) {
     auto classMetadata = static_cast<const ClassMetadata*>(object->metadata);
     
-    SWIFT_RT_ENTRY_CALL(swift_slowDealloc)
-        (object, classMetadata->getInstanceSize(),
-         classMetadata->getInstanceAlignMask());
+    swift_slowDealloc(object, classMetadata->getInstanceSize(),
+                      classMetadata->getInstanceAlignMask());
   }
 }
 
-void *swift::swift_nonatomic_unownedRetain(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void *swift::swift_nonatomic_unownedRetain(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_unownedRetain);
   if (!isValidPointerForNativeRetain(object))
     return object;
@@ -472,8 +418,7 @@
   return object;
 }
 
-void swift::swift_nonatomic_unownedRelease(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_nonatomic_unownedRelease(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_unownedRelease);
   if (!isValidPointerForNativeRetain(object))
     return;
@@ -485,14 +430,12 @@
   if (object->refCounts.decrementUnownedShouldFreeNonAtomic(1)) {
     auto classMetadata = static_cast<const ClassMetadata*>(object->metadata);
 
-    SWIFT_RT_ENTRY_CALL(swift_slowDealloc)
-        (object, classMetadata->getInstanceSize(),
-         classMetadata->getInstanceAlignMask());
+    swift_slowDealloc(object, classMetadata->getInstanceSize(),
+                       classMetadata->getInstanceAlignMask());
   }
 }
 
-HeapObject *swift::swift_unownedRetain_n(HeapObject *object, int n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+HeapObject *swift::swift_unownedRetain_n(HeapObject *object, int n) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_unownedRetain_n);
   if (!isValidPointerForNativeRetain(object))
     return object;
@@ -501,8 +444,7 @@
   return object;
 }
 
-void swift::swift_unownedRelease_n(HeapObject *object, int n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_unownedRelease_n(HeapObject *object, int n) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_unownedRelease_n);
   if (!isValidPointerForNativeRetain(object))
     return;
@@ -513,14 +455,12 @@
   
   if (object->refCounts.decrementUnownedShouldFree(n)) {
     auto classMetadata = static_cast<const ClassMetadata*>(object->metadata);
-    SWIFT_RT_ENTRY_CALL(swift_slowDealloc)
-        (object, classMetadata->getInstanceSize(),
-         classMetadata->getInstanceAlignMask());
+    swift_slowDealloc(object, classMetadata->getInstanceSize(),
+                      classMetadata->getInstanceAlignMask());
   }
 }
 
-HeapObject *swift::swift_nonatomic_unownedRetain_n(HeapObject *object, int n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+HeapObject *swift::swift_nonatomic_unownedRetain_n(HeapObject *object, int n) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_unownedRetain_n);
   if (!isValidPointerForNativeRetain(object))
     return object;
@@ -529,8 +469,7 @@
   return object;
 }
 
-void swift::swift_nonatomic_unownedRelease_n(HeapObject *object, int n)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_nonatomic_unownedRelease_n(HeapObject *object, int n) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_unownedRelease_n);
   if (!isValidPointerForNativeRetain(object))
     return;
@@ -541,14 +480,12 @@
 
   if (object->refCounts.decrementUnownedShouldFreeNonAtomic(n)) {
     auto classMetadata = static_cast<const ClassMetadata*>(object->metadata);
-    SWIFT_RT_ENTRY_CALL(swift_slowDealloc)
-        (object, classMetadata->getInstanceSize(),
-         classMetadata->getInstanceAlignMask());
+    swift_slowDealloc(object, classMetadata->getInstanceSize(),
+                      classMetadata->getInstanceAlignMask());
   }
 }
 
-HeapObject *swift::swift_tryPin(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+HeapObject *swift::swift_tryPin(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_tryPin);
   assert(isValidPointerForNativeRetain(object));
 
@@ -562,20 +499,13 @@
   return nullptr;
 }
 
-void swift::swift_unpin(HeapObject *object)
-  SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_unpin(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_unpin);
   if (isValidPointerForNativeRetain(object))
     object->refCounts.decrementAndUnpinAndMaybeDeinit();
 }
 
-HeapObject *swift::swift_tryRetain(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
-  return SWIFT_RT_ENTRY_REF(swift_tryRetain)(object);
-}
-
-HeapObject *swift::swift_nonatomic_tryPin(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+HeapObject *swift::swift_nonatomic_tryPin(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_tryPin);
   assert(object);
 
@@ -589,17 +519,17 @@
   return nullptr;
 }
 
-void swift::swift_nonatomic_unpin(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_nonatomic_unpin(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_unpin);
   if (isValidPointerForNativeRetain(object))
     object->refCounts.decrementAndUnpinAndMaybeDeinitNonAtomic();
 }
 
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C"
-HeapObject *SWIFT_RT_ENTRY_IMPL(swift_tryRetain)(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+HeapObject *swift::swift_tryRetain(HeapObject *object) {
+  return _swift_tryRetain(object);
+}
+
+static HeapObject *_swift_tryRetain_(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_tryRetain);
   if (!isValidPointerForNativeRetain(object))
     return nullptr;
@@ -608,21 +538,20 @@
   else return nullptr;
 }
 
-SWIFT_RUNTIME_EXPORT
-bool swift_isDeallocating(HeapObject *object) {
-  return SWIFT_RT_ENTRY_REF(swift_isDeallocating)(object);
-}
+auto swift::_swift_tryRetain = _swift_tryRetain_;
 
-SWIFT_RT_ENTRY_IMPL_VISIBILITY
-extern "C"
-bool SWIFT_RT_ENTRY_IMPL(swift_isDeallocating)(HeapObject *object) {
+bool swift::swift_isDeallocating(HeapObject *object) {
   if (!isValidPointerForNativeRetain(object))
     return false;
   return object->refCounts.isDeiniting();
 }
 
-HeapObject *swift::swift_unownedRetainStrong(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_setDeallocating(HeapObject *object) {
+  SWIFT_RT_TRACK_INVOCATION(object, swift_setDeallocating);
+  object->refCounts.decrementFromOneNonAtomic();
+}
+
+HeapObject *swift::swift_unownedRetainStrong(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_unownedRetainStrong);
   if (!isValidPointerForNativeRetain(object))
     return object;
@@ -634,8 +563,7 @@
   return object;
 }
 
-HeapObject *swift::swift_nonatomic_unownedRetainStrong(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+HeapObject *swift::swift_nonatomic_unownedRetainStrong(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_unownedRetainStrong);
   if (!isValidPointerForNativeRetain(object))
     return object;
@@ -647,8 +575,7 @@
   return object;
 }
 
-void swift::swift_unownedRetainStrongAndRelease(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_unownedRetainStrongAndRelease(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_unownedRetainStrongAndRelease);
   if (!isValidPointerForNativeRetain(object))
     return;
@@ -664,8 +591,7 @@
   (void) dealloc;
 }
 
-void swift::swift_nonatomic_unownedRetainStrongAndRelease(HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+void swift::swift_nonatomic_unownedRetainStrongAndRelease(HeapObject *object) {
   SWIFT_RT_TRACK_INVOCATION(object, swift_nonatomic_unownedRetainStrongAndRelease);
   if (!isValidPointerForNativeRetain(object))
     return;
@@ -690,9 +616,7 @@
     swift::swift_abortRetainUnowned(object);
 }
 
-// Declared extern "C" LLVM_LIBRARY_VISIBILITY in RefCount.h
-void _swift_release_dealloc(HeapObject *object)
-  SWIFT_CC(RegisterPreservingCC_IMPL) {
+void _swift_release_dealloc(HeapObject *object) {
   asFullMetadata(object->metadata)->destroy(object);
 }
 
@@ -716,17 +640,14 @@
   // references associated with this object.
   objc_destructInstance((id)object);
 #endif
-  SWIFT_RT_ENTRY_CALL(swift_deallocObject)
-      (object, allocatedSize,
-       allocatedAlignMask);
+  swift_deallocObject(object, allocatedSize, allocatedAlignMask);
 }
 
 /// Variant of the above used in constructor failure paths.
-SWIFT_RUNTIME_EXPORT
-void swift_deallocPartialClassInstance(HeapObject *object,
-                                       HeapMetadata const *metadata,
-                                       size_t allocatedSize,
-                                       size_t allocatedAlignMask) {
+void swift::swift_deallocPartialClassInstance(HeapObject *object,
+                                              HeapMetadata const *metadata,
+                                              size_t allocatedSize,
+                                              size_t allocatedAlignMask) {
   if (!object)
     return;
 
@@ -885,12 +806,10 @@
 
   if (object->refCounts.canBeFreedNow()) {
     // object state DEINITING -> DEAD
-    SWIFT_RT_ENTRY_CALL(swift_slowDealloc)
-         (object, allocatedSize,
-          allocatedAlignMask);
+    swift_slowDealloc(object, allocatedSize, allocatedAlignMask);
   } else {
     // object state DEINITING -> DEINITED
-    SWIFT_RT_ENTRY_CALL(swift_unownedRelease)(object);
+    swift_unownedRelease(object);
   }
 }
 
diff --git a/stdlib/public/runtime/Metadata.cpp b/stdlib/public/runtime/Metadata.cpp
index 1e40561..1bc22a9 100644
--- a/stdlib/public/runtime/Metadata.cpp
+++ b/stdlib/public/runtime/Metadata.cpp
@@ -225,8 +225,7 @@
 
 /// The primary entrypoint.
 const Metadata *swift::swift_getGenericMetadata(GenericMetadata *pattern,
-                                                const void *arguments)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+                                                const void *arguments) {
   auto genericArgs = (const void * const *) arguments;
   size_t numGenericArgs = pattern->NumKeyArguments;
 
@@ -2373,8 +2372,7 @@
                                   ProtocolClassConstraint classConstraint,
                                   const Metadata *superclassConstraint,
                                   size_t numProtocols,
-                                  const ProtocolDescriptor * const *protocols)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+                                  const ProtocolDescriptor * const *protocols) {
 
   // We entrust that the compiler emitting the call to
   // swift_getExistentialTypeMetadata always sorts the `protocols` array using
@@ -2823,7 +2821,7 @@
 
 const WitnessTable *swift::swift_getGenericWitnessTable(
     GenericWitnessTable *genericTable, const Metadata *type,
-    void *const *instantiationArgs) SWIFT_CC(RegisterPreservingCC_IMPL) {
+    void *const *instantiationArgs) {
   if (doesNotRequireInstantiation(genericTable)) {
     return genericTable->Pattern;
   }
diff --git a/stdlib/public/runtime/Reflection.mm b/stdlib/public/runtime/Reflection.mm
index d49fc4e..14d613e 100644
--- a/stdlib/public/runtime/Reflection.mm
+++ b/stdlib/public/runtime/Reflection.mm
@@ -356,9 +356,7 @@
                                  const OpaqueValue *value,
                                  const Metadata *type) {
   auto Tuple = static_cast<const TupleTypeMetadata *>(type);
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-  swift_release(owner);
-#endif
+  SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
   return Tuple->NumElements;
 }
 
@@ -404,9 +402,9 @@
   auto bytes = reinterpret_cast<const char*>(value);
   auto eltData = reinterpret_cast<const OpaqueValue *>(bytes + elt.Offset);
 
-#ifdef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-  swift_retain(owner);
-#endif
+  // Since 'owner' is consumed, when we have a +0 convention, we must retain
+  // owner first.
+  SWIFT_CC_PLUSZERO_GUARD(swift_retain(owner));
 
   // 'owner' is consumed by this call.
   new (outMirror) Mirror(reflect(owner, eltData, elt.Type));
@@ -496,9 +494,7 @@
                                   const OpaqueValue *value,
                                   const Metadata *type) {
   auto Struct = static_cast<const StructMetadata *>(type);
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-  swift_release(owner);
-#endif
+  SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
   return Struct->Description->Struct.NumFields;
 }
 
@@ -524,6 +520,8 @@
   new (outString) String(getFieldName(Struct->Description->Struct.FieldNames, i));
 
   // 'owner' is consumed by this call.
+  SWIFT_CC_PLUSZERO_GUARD(swift_unknownRetain(owner));
+
   assert(!fieldType.isIndirect() && "indirect struct fields not implemented");
 
   if (loadSpecialReferenceStorage(owner, fieldData, fieldType, outMirror))
@@ -583,9 +581,7 @@
                                       const OpaqueValue *value,
                                       const Metadata *type) {
   if (!isEnumReflectable(type)) {
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-    swift_release(owner);
-#endif
+    SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
     return nullptr;
   }
 
@@ -595,9 +591,7 @@
   unsigned tag;
   getEnumMirrorInfo(value, type, &tag, nullptr, nullptr);
 
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-  swift_release(owner);
-#endif
+  SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
 
   return getFieldName(Description.CaseNames, tag);
 }
@@ -612,12 +606,8 @@
   OpaqueValue *mirrorValue = const_cast<OpaqueValue*>(cMirrorValue);
   Mirror mirror;
 
-  bool take =
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-    mirrorValue == value;
-#else
-    false;
-#endif
+  bool take = false;
+  SWIFT_CC_PLUSONE_GUARD(take = (mirrorValue == value));
 
   ::new (&mirror) MagicMirror(mirrorValue, mirrorType, take);
 
@@ -625,11 +615,9 @@
   MagicMirrorData data = theMirror->Data;
   const char *result = swift_EnumMirror_caseName(data.Owner, data.Value, data.Type);
 
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
   // Destroy the whole original value if we couldn't take it.
   if (!take)
       type->vw_destroy(value);
-#endif
 
   return result;
 }
@@ -639,17 +627,13 @@
                                 const OpaqueValue *value,
                                 const Metadata *type) {
   if (!isEnumReflectable(type)) {
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-    swift_release(owner);
-#endif
+    SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
     return 0;
   }
 
   const Metadata *payloadType;
   getEnumMirrorInfo(value, type, nullptr, &payloadType, nullptr);
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-  swift_release(owner);
-#endif
+  SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
   return (payloadType != nullptr) ? 1 : 0;
 }
 
@@ -678,9 +662,7 @@
   type->vw_destructiveInjectEnumTag(const_cast<OpaqueValue *>(value),
                                     (int) (tag - Description.getNumPayloadCases()));
 
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-  swift_release(owner);
-#endif
+  SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
 
   owner = pair.first;
   value = pair.second;
@@ -708,9 +690,7 @@
                                  const OpaqueValue *value,
                                  const Metadata *type) {
   auto Clas = static_cast<const ClassMetadata*>(type);
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-  swift_release(owner);
-#endif
+  SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
   auto count = Clas->getDescription()->Class.NumFields;
 
   // If the class has a superclass, the superclass instance is treated as the
@@ -857,9 +837,7 @@
 swift_ClassMirror_quickLookObject(HeapObject *owner, const OpaqueValue *value,
                                   const Metadata *type) {
   id object = [*reinterpret_cast<const id *>(value) retain];
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-  swift_release(owner);
-#endif
+  SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
   if ([object respondsToSelector:@selector(debugQuickLookObject)]) {
     id quickLookObject = [object debugQuickLookObject];
     [quickLookObject retain];
@@ -955,9 +933,7 @@
   Mirror resultBuf;
   MagicMirror *result = ::new (&resultBuf) MagicMirror;
 
-#ifdef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-  swift_retain(owner);
-#endif
+  SWIFT_CC_PLUSZERO_GUARD(swift_retain(owner));
 
   result->Self = ClassSuperMirrorMetadata();
   result->MirrorWitness = &ClassSuperMirrorWitnessTable;
@@ -978,9 +954,7 @@
   Mirror resultBuf;
   MagicMirror *result = ::new (&resultBuf) MagicMirror;
 
-#ifdef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-  swift_retain(owner);
-#endif
+  SWIFT_CC_PLUSZERO_GUARD(swift_retain(owner));
 
   result->Self = ObjCSuperMirrorMetadata();
   result->MirrorWitness = &ObjCSuperMirrorWitnessTable;
@@ -1130,19 +1104,14 @@
   Mirror result;
   // Take the value, unless we projected a subvalue from it. We don't want to
   // deal with partial value deinitialization.
-  bool take =
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
-    mirrorValue == value;
-#else
-    false;
-#endif
+  bool take = false;
+  SWIFT_CC_PLUSONE_GUARD(take = (mirrorValue == value));
   ::new (&result) MagicMirror(mirrorValue, mirrorType, take);
 
-#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
   // Destroy the whole original value if we couldn't take it.
-  if (!take)
+  if (!take) {
     T->vw_destroy(value);
-#endif
+  }
   return MirrorReturn(result);
 }
 
diff --git a/stdlib/public/runtime/RuntimeEntrySymbols.cpp b/stdlib/public/runtime/RuntimeEntrySymbols.cpp
deleted file mode 100644
index 1e48c06..0000000
--- a/stdlib/public/runtime/RuntimeEntrySymbols.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-//===--- RuntimeEntrySymbols.cpp - Define symbols for runtime entries -----===//
-//
-// This source file is part of the Swift.org open source project
-//
-// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
-// Licensed under Apache License v2.0 with Runtime Library Exception
-//
-// See https://swift.org/LICENSE.txt for license information
-// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
-//
-//===----------------------------------------------------------------------===//
-//
-//  This file defines function pointer symbols for runtime entries.
-//
-//===----------------------------------------------------------------------===//
-
-// Produce global symbols referencing runtime function implementations only for
-// those runtime entries that demand it.
-//
-// Each runtime function definition in RuntimeFunctions.def should
-// indicate if it requires a global referencing it.
-//
-// For example, all entries using the RegisterPreservingCC calling convention
-// need a global, because they are currently always invoked indirectly using a
-// client-side wrapper.
-//
-// Runtime entries using the DefaultCC calling convention do not
-// demand a global symbol by default. But they can optionally ask for it, in
-// case it is needed. For example, _swift_isDeallocating is required by
-// Instruments.
-
-#include "swift/Runtime/Config.h"
-
-// Entry points using a standard C calling convention or not using the new
-// calling convention do not need to have global symbols referring to their
-// implementations.
-#define FOR_CONV_DefaultCC(...)
-#define FOR_CONV_C_CC(...)
-
-// Entry points implemented in swift using the swift calling convention.
-#define FOR_CONV_SwiftCC(...)
-
-// Entry points using the new calling convention require global symbols
-// referring to their implementations.
-#define FOR_CONV_RegisterPreservingCC(x) x
-
-typedef void (*RuntimeEntry)();
-
-// Generate a forward declaration of the runtime entry implementation.
-// Define a global symbol referring to this implementation.
-
-#define DEFINE_SYMBOL(SymbolName, Name, CC)                                    \
-  SWIFT_RT_ENTRY_IMPL_VISIBILITY extern "C" void Name()                        \
-      SWIFT_CC(CC);                                                            \
-  SWIFT_RUNTIME_EXPORT RuntimeEntry SymbolName =                    \
-      reinterpret_cast<RuntimeEntry>(Name);
-
-#define FUNCTION1(Id, Name, CC, ReturnTys, ArgTys, Attrs)                      \
-  DEFINE_SYMBOL(SWIFT_RT_ENTRY_REF(Name), Name, CC)
-
-#if defined(SWIFT_RT_USE_WRAPPERS)
-// Automatically generate a global symbol name if it is required by the calling
-// convention.
-#define FUNCTION(Id, Name, CC, ReturnTys, ArgTys, Attrs)                       \
-  FOR_CONV_##CC(FUNCTION1(Id, Name, CC, ReturnTys, ArgTys, Attrs))
-#else
-// No need to generate any global symbols for entries that do not provide their
-// own symbols.
-#define FUNCTION(Id, Name, CC, ReturnTys, ArgTys, Attrs)
-#endif
-// Allow for a custom global symbol name and implementation.
-#define FUNCTION_WITH_GLOBAL_SYMBOL_AND_IMPL(Id, Name, GlobalSymbolName, Impl, \
-                                             CC, ReturnTys, ArgTys, Attrs)     \
-  DEFINE_SYMBOL(GlobalSymbolName, Impl, CC)
-
-// Indicate that we are going to generate the global symbols for those runtime
-// functions that require it.
-#define SWIFT_RUNTIME_GENERATE_GLOBAL_SYMBOLS 1
-
-namespace swift {
-// Generate global symbols which are function pointers to the actual
-// implementations of runtime entry points.
-// This is done only for entry points using a new calling convention or
-// for those entry points which explicitly require it.
-#include "swift/Runtime/RuntimeFunctions.def"
-} // namespace swift
-
diff --git a/stdlib/public/runtime/RuntimeInvocationsTracking.cpp b/stdlib/public/runtime/RuntimeInvocationsTracking.cpp
index 1a4bbde..95957758 100644
--- a/stdlib/public/runtime/RuntimeInvocationsTracking.cpp
+++ b/stdlib/public/runtime/RuntimeInvocationsTracking.cpp
@@ -21,10 +21,7 @@
 #include "swift/Runtime/HeapObject.h"
 #include "swift/Runtime/Mutex.h"
 
-// This file is compiled always, even if assertions are disabled and no runtime
-// functions are being tracked. This is done to avoid recompiling Swift clients
-// using these APIs. They should be able to link against the standard library
-// independent of the fact whether assertions are enabled or not.
+#if defined(SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS)
 
 #define SWIFT_RT_FUNCTION_INVOCATION_COUNTER_NAME(RT_FUNCTION)                 \
   invocationCounter_##RT_FUNCTION
@@ -238,3 +235,5 @@
 /// TODO: Provide an API to remove any counters releated to a specific object
 /// or all objects.
 /// This is useful if you want to reset the stats for some/all objects.
+
+#endif
diff --git a/stdlib/public/runtime/RuntimeInvocationsTracking.h b/stdlib/public/runtime/RuntimeInvocationsTracking.h
index f906678..74d6091 100644
--- a/stdlib/public/runtime/RuntimeInvocationsTracking.h
+++ b/stdlib/public/runtime/RuntimeInvocationsTracking.h
@@ -20,6 +20,9 @@
 
 #include "swift/Runtime/Config.h"
 
+/// This API is only enabled if this define is set.
+#if defined(SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS)
+
 #if defined(__cplusplus)
 
 namespace swift {
@@ -39,10 +42,6 @@
 #define SWIFT_RT_TRACK_INVOCATION_NAME(RT_FUNCTION)                            \
   swift_trackRuntimeInvocation_##RT_FUNCTION
 
-/// Instrument the runtime functions only if we are building with
-/// assertions enabled.
-#if !defined(NDEBUG)
-
 /// Invoke a helper function for tracking the calls of a runtime function.
 #define SWIFT_RT_TRACK_INVOCATION(OBJ, RT_FUNCTION)                            \
   SWIFT_RT_TRACK_INVOCATION_NAME(RT_FUNCTION)(OBJ)
@@ -52,13 +51,6 @@
 /// Declarations of external functions for invocations tracking.
 #include "RuntimeInvocationsTracking.def"
 
-#else
-
-/// It is just a NOP if assertions are not enabled.
-#define SWIFT_RT_TRACK_INVOCATION(OBJ, RT_FUNCTION)
-
-#endif // NDEBUG
-
 /// This type defines a callback to be called on any intercepted runtime
 /// function.
 using RuntimeFunctionCountersUpdateHandler =
@@ -118,4 +110,12 @@
 _swift_setGlobalRuntimeFunctionCountersUpdateHandler(
     RuntimeFunctionCountersUpdateHandler handler);
 
+#else
+
+/// Let runtime functions unconditionally use this define by making it a NOP if
+/// counters are not enabled.
+#define SWIFT_RT_TRACK_INVOCATION(OBJ, RT_FUNCTION)
+
+#endif // SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS
+
 #endif
diff --git a/stdlib/public/runtime/SwiftObject.mm b/stdlib/public/runtime/SwiftObject.mm
index 9accc5e..ea9bdc9 100644
--- a/stdlib/public/runtime/SwiftObject.mm
+++ b/stdlib/public/runtime/SwiftObject.mm
@@ -480,8 +480,7 @@
 static uintptr_t const objectPointerIsObjCBit = 0x00000002U;
 #endif
 
-void *swift::swift_unknownRetain_n(void *object, int n)
-    SWIFT_CC(DefaultCC_IMPL) {
+void *swift::swift_unknownRetain_n(void *object, int n) {
   if (isObjCTaggedPointerOrNull(object)) return object;
   if (objectUsesNativeSwiftReferenceCounting(object)) {
     return swift_retain_n(static_cast<HeapObject *>(object), n);
@@ -492,8 +491,7 @@
   return object;
 }
 
-void swift::swift_unknownRelease_n(void *object, int n)
-    SWIFT_CC(DefaultCC_IMPL) {
+void swift::swift_unknownRelease_n(void *object, int n) {
   if (isObjCTaggedPointerOrNull(object)) return;
   if (objectUsesNativeSwiftReferenceCounting(object))
     return swift_release_n(static_cast<HeapObject *>(object), n);
@@ -501,8 +499,7 @@
     objc_release(static_cast<id>(object));
 }
 
-void *swift::swift_unknownRetain(void *object)
-    SWIFT_CC(DefaultCC_IMPL) {
+void *swift::swift_unknownRetain(void *object) {
   if (isObjCTaggedPointerOrNull(object)) return object;
   if (objectUsesNativeSwiftReferenceCounting(object)) {
     return swift_retain(static_cast<HeapObject *>(object));
@@ -510,16 +507,14 @@
   return objc_retain(static_cast<id>(object));
 }
 
-void swift::swift_unknownRelease(void *object)
-    SWIFT_CC(DefaultCC_IMPL) {
+void swift::swift_unknownRelease(void *object) {
   if (isObjCTaggedPointerOrNull(object)) return;
   if (objectUsesNativeSwiftReferenceCounting(object))
-    return SWIFT_RT_ENTRY_CALL(swift_release)(static_cast<HeapObject *>(object));
+    return swift_release(static_cast<HeapObject *>(object));
   return objc_release(static_cast<id>(object));
 }
 
-void *swift::swift_nonatomic_unknownRetain_n(void *object, int n)
-    SWIFT_CC(DefaultCC_IMPL) {
+void *swift::swift_nonatomic_unknownRetain_n(void *object, int n) {
   if (isObjCTaggedPointerOrNull(object)) return object;
   if (objectUsesNativeSwiftReferenceCounting(object)) {
     return swift_nonatomic_retain_n(static_cast<HeapObject *>(object), n);
@@ -529,8 +524,7 @@
   return object;
 }
 
-void swift::swift_nonatomic_unknownRelease_n(void *object, int n)
-    SWIFT_CC(DefaultCC_IMPL) {
+void swift::swift_nonatomic_unknownRelease_n(void *object, int n) {
   if (isObjCTaggedPointerOrNull(object)) return;
   if (objectUsesNativeSwiftReferenceCounting(object))
     return swift_nonatomic_release_n(static_cast<HeapObject *>(object), n);
@@ -538,8 +532,7 @@
     objc_release(static_cast<id>(object));
 }
 
-void *swift::swift_nonatomic_unknownRetain(void *object)
-    SWIFT_CC(DefaultCC_IMPL) {
+void *swift::swift_nonatomic_unknownRetain(void *object) {
   if (isObjCTaggedPointerOrNull(object)) return object;
   if (objectUsesNativeSwiftReferenceCounting(object)) {
     return swift_nonatomic_retain(static_cast<HeapObject *>(object));
@@ -547,11 +540,10 @@
   return objc_retain(static_cast<id>(object));
 }
 
-void swift::swift_nonatomic_unknownRelease(void *object)
-    SWIFT_CC(DefaultCC_IMPL) {
+void swift::swift_nonatomic_unknownRelease(void *object) {
   if (isObjCTaggedPointerOrNull(object)) return;
   if (objectUsesNativeSwiftReferenceCounting(object))
-    return SWIFT_RT_ENTRY_CALL(swift_release)(static_cast<HeapObject *>(object));
+    return swift_release(static_cast<HeapObject *>(object));
   return objc_release(static_cast<id>(object));
 }
 
@@ -576,8 +568,7 @@
   return (void*)(uintptr_t(object) & ~unTaggedNonNativeBridgeObjectBits);
 }
 
-void *swift::swift_bridgeObjectRetain(void *object)
-    SWIFT_CC(DefaultCC_IMPL) {
+void *swift::swift_bridgeObjectRetain(void *object) {
 #if SWIFT_OBJC_INTEROP
   if (isObjCTaggedPointer(object))
     return object;
@@ -598,8 +589,7 @@
 }
 
 SWIFT_RUNTIME_EXPORT
-void *swift::swift_nonatomic_bridgeObjectRetain(void *object)
-    SWIFT_CC(DefaultCC_IMPL) {
+void *swift::swift_nonatomic_bridgeObjectRetain(void *object) {
 #if SWIFT_OBJC_INTEROP
   if (isObjCTaggedPointer(object))
     return object;
@@ -620,8 +610,7 @@
 }
 
 SWIFT_RUNTIME_EXPORT
-void swift::swift_bridgeObjectRelease(void *object)
-    SWIFT_CC(DefaultCC_IMPL) {
+void swift::swift_bridgeObjectRelease(void *object) {
 #if SWIFT_OBJC_INTEROP
   if (isObjCTaggedPointer(object))
     return;
@@ -638,8 +627,7 @@
 #endif
 }
 
-void swift::swift_nonatomic_bridgeObjectRelease(void *object)
-    SWIFT_CC(DefaultCC_IMPL) {
+void swift::swift_nonatomic_bridgeObjectRelease(void *object) {
 #if SWIFT_OBJC_INTEROP
   if (isObjCTaggedPointer(object))
     return;
@@ -656,8 +644,7 @@
 #endif
 }
 
-void *swift::swift_bridgeObjectRetain_n(void *object, int n)
-    SWIFT_CC(DefaultCC_IMPL) {
+void *swift::swift_bridgeObjectRetain_n(void *object, int n) {
 #if SWIFT_OBJC_INTEROP
   if (isObjCTaggedPointer(object))
     return object;
@@ -680,8 +667,7 @@
 #endif
 }
 
-void swift::swift_bridgeObjectRelease_n(void *object, int n)
-    SWIFT_CC(DefaultCC_IMPL) {
+void swift::swift_bridgeObjectRelease_n(void *object, int n) {
 #if SWIFT_OBJC_INTEROP
   if (isObjCTaggedPointer(object))
     return;
@@ -699,8 +685,7 @@
 #endif
 }
 
-void *swift::swift_nonatomic_bridgeObjectRetain_n(void *object, int n)
-    SWIFT_CC(DefaultCC_IMPL) {
+void *swift::swift_nonatomic_bridgeObjectRetain_n(void *object, int n) {
 #if SWIFT_OBJC_INTEROP
   if (isObjCTaggedPointer(object))
     return object;
@@ -723,8 +708,7 @@
 #endif
 }
 
-void swift::swift_nonatomic_bridgeObjectRelease_n(void *object, int n)
-    SWIFT_CC(DefaultCC_IMPL) {
+void swift::swift_nonatomic_bridgeObjectRelease_n(void *object, int n) {
 #if SWIFT_OBJC_INTEROP
   if (isObjCTaggedPointer(object))
     return;
@@ -1248,9 +1232,7 @@
   (void)registered;
 }
 
-SWIFT_RT_ENTRY_VISIBILITY
-Class swift_getInitializedObjCClass(Class c)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+Class swift::swift_getInitializedObjCClass(Class c) {
   // Used when we have class metadata and we want to ensure a class has been
   // initialized by the Objective-C runtime. We need to do this because the
   // class "c" might be valid metadata, but it hasn't been initialized yet.
@@ -1306,8 +1288,7 @@
 }
 #endif
 
-bool swift::swift_isUniquelyReferenced_nonNull_native(const HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+bool swift::swift_isUniquelyReferenced_nonNull_native(const HeapObject *object){
   assert(object != nullptr);
   assert(!object->refCounts.isDeiniting());
   return object->refCounts.isUniquelyReferenced();
@@ -1315,7 +1296,7 @@
 
 bool swift::swift_isUniquelyReferenced_native(const HeapObject* object) {
   return object != nullptr
-    && swift::SWIFT_RT_ENTRY_CALL(swift_isUniquelyReferenced_nonNull_native)(object);
+    && swift::swift_isUniquelyReferenced_nonNull_native(object);
 }
 
 bool swift::swift_isUniquelyReferencedNonObjC_nonNull(const void* object) {
@@ -1324,8 +1305,7 @@
 #if SWIFT_OBJC_INTEROP
     usesNativeSwiftReferenceCounting_nonNull(object) &&
 #endif
-    SWIFT_RT_ENTRY_CALL(swift_isUniquelyReferenced_nonNull_native)(
-      (const HeapObject*)object);
+    swift_isUniquelyReferenced_nonNull_native((const HeapObject*)object);
 }
 
 // Given an object reference, return true iff it is non-nil and refers
@@ -1354,12 +1334,11 @@
   // object is going to be a negligible cost for a possible big win.
 #if SWIFT_OBJC_INTEROP
   return !isNonNative_unTagged_bridgeObject(bridgeObject)
-             ? SWIFT_RT_ENTRY_CALL(swift_isUniquelyReferenced_nonNull_native)(
+             ? swift_isUniquelyReferenced_nonNull_native(
                    (const HeapObject *)object)
              : swift_isUniquelyReferencedNonObjC_nonNull(object);
 #else
-  return SWIFT_RT_ENTRY_CALL(swift_isUniquelyReferenced_nonNull_native)(
-      (const HeapObject *)object);
+  return swift_isUniquelyReferenced_nonNull_native((const HeapObject *)object);
 #endif
 }
 
@@ -1404,8 +1383,7 @@
 // Given a non-@objc object reference, return true iff the
 // object is non-nil and either has a strong reference count of 1
 // or is pinned.
-bool swift::swift_isUniquelyReferencedOrPinned_native(const HeapObject *object)
-    SWIFT_CC(RegisterPreservingCC_IMPL) {
+bool swift::swift_isUniquelyReferencedOrPinned_native(const HeapObject *object){
   return object != nullptr &&
          swift_isUniquelyReferencedOrPinned_nonNull_native(object);
 }
@@ -1414,7 +1392,7 @@
 /// either the object has a strong reference count of 1 or its
 /// pinned flag is set.
 bool swift::swift_isUniquelyReferencedOrPinned_nonNull_native(
-    const HeapObject *object) SWIFT_CC(RegisterPreservingCC_IMPL) {
+    const HeapObject *object) {
   assert(object != nullptr);
   assert(!object->refCounts.isDeiniting());
   return object->refCounts.isUniquelyReferencedOrPinned();
diff --git a/stdlib/public/stubs/Reflection.mm b/stdlib/public/stubs/Reflection.mm
index 68a16cc..c92e199 100644
--- a/stdlib/public/stubs/Reflection.mm
+++ b/stdlib/public/stubs/Reflection.mm
@@ -21,8 +21,8 @@
     id SWIFT_NS_RELEASES_ARGUMENT _Nonnull object,
     NSString *SWIFT_NS_RELEASES_ARGUMENT _Nonnull className) {
   bool result = [object isKindOfClass:NSClassFromString(className)];
-  [object release];
-  [className release];
+  SWIFT_CC_PLUSONE_GUARD([object release]);
+  SWIFT_CC_PLUSONE_GUARD([className release]);
 
   return result;
 }
diff --git a/stdlib/public/stubs/SwiftNativeNSXXXBase.mm.gyb b/stdlib/public/stubs/SwiftNativeNSXXXBase.mm.gyb
index c427717..0642352 100644
--- a/stdlib/public/stubs/SwiftNativeNSXXXBase.mm.gyb
+++ b/stdlib/public/stubs/SwiftNativeNSXXXBase.mm.gyb
@@ -107,8 +107,8 @@
 swift_stdlib_NSObject_isEqual(NSObject *SWIFT_NS_RELEASES_ARGUMENT lhs,
                               NSObject *SWIFT_NS_RELEASES_ARGUMENT rhs) {
   bool Result = (lhs == rhs) || [lhs isEqual:rhs];
-  swift_unknownRelease(lhs);
-  swift_unknownRelease(rhs);
+  SWIFT_CC_PLUSONE_GUARD(swift_unknownRelease(lhs));
+  SWIFT_CC_PLUSONE_GUARD(swift_unknownRelease(rhs));
   return Result;
 }
 
@@ -118,8 +118,8 @@
   // 'kCFCompareNonliteral' actually means "normalize to NFD".
   int Result = CFStringCompare((__bridge CFStringRef)lhs,
                                (__bridge CFStringRef)rhs, kCFCompareNonliteral);
-  swift_unknownRelease(lhs);
-  swift_unknownRelease(rhs);
+  SWIFT_CC_PLUSONE_GUARD(swift_unknownRelease(lhs));
+  SWIFT_CC_PLUSONE_GUARD(swift_unknownRelease(rhs));
   return Result;
 }
 
@@ -152,8 +152,8 @@
       (__bridge CFStringRef)theString, (__bridge CFStringRef)prefix,
       CFRangeMake(0, Length), kCFCompareAnchored | kCFCompareNonliteral,
       nullptr);
-  swift_unknownRelease(theString);
-  swift_unknownRelease(prefix);
+  SWIFT_CC_PLUSONE_GUARD(swift_unknownRelease(theString));
+  SWIFT_CC_PLUSONE_GUARD(swift_unknownRelease(prefix));
   return Result;
 }
 
@@ -177,8 +177,8 @@
       (__bridge CFStringRef)theString, (__bridge CFStringRef)suffix,
       CFRangeMake(0, Length),
       kCFCompareAnchored | kCFCompareBackwards | kCFCompareNonliteral, nullptr);
-  swift_unknownRelease(theString);
-  swift_unknownRelease(suffix);
+  SWIFT_CC_PLUSONE_GUARD(swift_unknownRelease(theString));
+  SWIFT_CC_PLUSONE_GUARD(swift_unknownRelease(suffix));
   return Result;
 }
 
@@ -197,7 +197,7 @@
 void swift_stdlib_CFSetGetValues(NSSet *SWIFT_NS_RELEASES_ARGUMENT set,
                                  const void **values) {
   CFSetGetValues((__bridge CFSetRef)set, values);
-  swift_unknownRelease(set);
+  SWIFT_CC_PLUSONE_GUARD(swift_unknownRelease(set));
 }
 #endif
 
diff --git a/test/ClangImporter/objc_ir.swift b/test/ClangImporter/objc_ir.swift
index 43f9cb9..22b76b1 100644
--- a/test/ClangImporter/objc_ir.swift
+++ b/test/ClangImporter/objc_ir.swift
@@ -81,7 +81,7 @@
 // CHECK-LABEL: define hidden swiftcc %TSo1BC* @"$S7objc_ir8downcast1aSo1BCSo1AC_tF"(
 func downcast(a a: A) -> B {
   // CHECK: [[CLASS:%.*]] = load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$_B"
-  // CHECK: [[T0:%.*]] = call %objc_class* @swift_rt_swift_getInitializedObjCClass(%objc_class* [[CLASS]])
+  // CHECK: [[T0:%.*]] = call %objc_class* @swift_getInitializedObjCClass(%objc_class* [[CLASS]])
   // CHECK: [[T1:%.*]] = bitcast %objc_class* [[T0]] to i8*
   // CHECK: call i8* @swift_dynamicCastObjCClassUnconditional(i8* [[A:%.*]], i8* [[T1]]) [[NOUNWIND:#[0-9]+]]
   return a as! B
@@ -132,7 +132,7 @@
   // CHECK: [[RAW_RESULT:%.+]] = call i8* @processComboType(i8* {{%.+}})
   // CHECK: [[CASTED_RESULT:%.+]] = bitcast i8* [[RAW_RESULT]] to %objc_class*
   // CHECK: [[SWIFT_RESULT:%.+]] = call %swift.type* @swift_getObjCClassMetadata(%objc_class* [[CASTED_RESULT]])
-  // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T7objc_ir4ImplC*)*)(%T7objc_ir4ImplC* %0)
+  // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T7objc_ir4ImplC*)*)(%T7objc_ir4ImplC* %0)
   // CHECK: ret %swift.type* [[SWIFT_RESULT]]
   let type = processComboType(type(of: p))
   return type
@@ -145,7 +145,7 @@
   // CHECK: [[RAW_RESULT:%.+]] = call i8* @processComboType2(i8* {{%.+}})
   // CHECK: [[CASTED_RESULT:%.+]] = bitcast i8* [[RAW_RESULT]] to %objc_class*
   // CHECK: [[SWIFT_RESULT:%.+]] = call %swift.type* @swift_getObjCClassMetadata(%objc_class* [[CASTED_RESULT]])
-  // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T7objc_ir4ImplC*)*)(%T7objc_ir4ImplC* %0)
+  // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T7objc_ir4ImplC*)*)(%T7objc_ir4ImplC* %0)
   // CHECK: ret %swift.type* [[SWIFT_RESULT]]
   let type = processComboType2(type(of: p))
   return type
diff --git a/test/Constraints/iuo.swift b/test/Constraints/iuo.swift
index 7ae5dab..ebbea48 100644
--- a/test/Constraints/iuo.swift
+++ b/test/Constraints/iuo.swift
@@ -180,3 +180,27 @@
   let _: (Bool) -> T? = id(T.iuoResultStatic as (Bool) -> T?)
   let _: T! = id(T.iuoResultStatic(true))
 }
+
+func takesInOutIUO(_ i: inout Int!) {}
+func takesInOutOpt(_ o: inout Int?) {}
+
+func overloadedByOptionality(_ a: inout Int!) {}
+// expected-note@-1 {{'overloadedByOptionality' previously declared here}}
+// expected-note@-2 {{'overloadedByOptionality' previously declared here}}
+func overloadedByOptionality(_ a: inout Int?) {}
+// expected-warning@-1 {{invalid redeclaration of 'overloadedByOptionality' which differs only by the kind of optional passed as an inout argument ('Int?' vs. 'Int!')}}
+// expected-warning@-2 {{invalid redeclaration of 'overloadedByOptionality' which differs only by the kind of optional passed as an inout argument ('Int?' vs. 'Int!')}}
+// expected-note@-3 {{overloading by kind of optional is deprecated and will be removed in a future release}}
+// expected-note@-4 {{overloading by kind of optional is deprecated and will be removed in a future release}}
+
+func testInOutOptionality() {
+  var i: Int! = 1
+  var o: Int? = 2
+
+  takesInOutIUO(&i)
+  takesInOutOpt(&i)
+  takesInOutIUO(&o)
+  takesInOutOpt(&o)
+
+  overloadedByOptionality(&o)
+}
diff --git a/test/DebugInfo/linetable-cleanups.swift b/test/DebugInfo/linetable-cleanups.swift
index ab8a3ff..d8b2c8e 100644
--- a/test/DebugInfo/linetable-cleanups.swift
+++ b/test/DebugInfo/linetable-cleanups.swift
@@ -27,7 +27,7 @@
 // CHECK-NEXT:  !dbg ![[CLEANUPS]]
 // CHECK-NEXT:  llvm.lifetime.end
 // CHECK-NEXT:  load
-// CHECK-NEXT:  swift_rt_swift_release
+// CHECK-NEXT:  swift_release
 // CHECK-NEXT:  bitcast
 // CHECK-NEXT:  llvm.lifetime.end
 // CHECK-NEXT:  ret void, !dbg ![[CLEANUPS]]
diff --git a/test/DebugInfo/linetable.swift b/test/DebugInfo/linetable.swift
index 1759c25..7c2cc4a 100644
--- a/test/DebugInfo/linetable.swift
+++ b/test/DebugInfo/linetable.swift
@@ -33,7 +33,7 @@
         {
             var result = my_class.do_something(x)
             markUsed(result)
-// CHECK: call {{.*}} @swift_rt_swift_release {{.*}}
+// CHECK: call {{.*}} @swift_release {{.*}}
 // CHECK: bitcast
 // CHECK: llvm.lifetime.end
 // CHECK: call {{.*}}llvm.lifetime.end{{.*}}, !dbg ![[CLOSURE_END:.*]]
diff --git a/test/DebugInfo/return.swift b/test/DebugInfo/return.swift
index 65c4584..2da1ff0 100644
--- a/test/DebugInfo/return.swift
+++ b/test/DebugInfo/return.swift
@@ -13,14 +13,14 @@
   // CHECK: [[X:%.*]] = call {{.*}}%T6return1XC* @"$S6return1XC1iACs5Int64V_tcfC"(
   // CHECK-SAME:                                  i64 0, %swift.type* swiftself [[META]])
   // CHECK:  store %T6return1XC* [[X]], %T6return1XC** [[ALLOCA]]
-  // CHECK:  @swift_rt_swift_release to void (%T6return1XC*)*)(%T6return1XC* [[X]])
+  // CHECK:  @swift_release to void (%T6return1XC*)*)(%T6return1XC* [[X]])
   if true {
     x.x += 1
   } else {
     x.x -= 1
   }
   // CHECK:  [[X:%.*]] = load %T6return1XC*, %T6return1XC** [[ALLOCA]]
-  // CHECK:  @swift_rt_swift_release to void (%T6return1XC*)*)(%T6return1XC* [[X]])
+  // CHECK:  @swift_release to void (%T6return1XC*)*)(%T6return1XC* [[X]])
   // CHECK-SAME:                    , !dbg ![[RELEASE:.*]]
 
   // The ret instruction should be in the same scope as the return expression.
diff --git a/test/Demangle/remangle.swift b/test/Demangle/remangle.swift
index c120765..616efd4 100644
--- a/test/Demangle/remangle.swift
+++ b/test/Demangle/remangle.swift
@@ -5,3 +5,7 @@
 
 RUN: swift-demangle -test-remangle < %t.input > %t.output
 RUN: diff %t.input %t.output
+
+// CHECK: Swift.(Mystruct in _7B40D7ED6632C2BEA2CA3BFFD57E3435)
+RUN: swift-demangle -remangle-objc-rt '$Ss8Mystruct33_7B40D7ED6632C2BEA2CA3BFFD57E3435LLV' | %FileCheck %s
+
diff --git a/test/IRGen/alloc_box.swift b/test/IRGen/alloc_box.swift
index d3ffa80..fd0d7b1 100644
--- a/test/IRGen/alloc_box.swift
+++ b/test/IRGen/alloc_box.swift
@@ -11,5 +11,5 @@
 // CHECK-LABEL: @"$S9alloc_boxyycfU_"
 // CHECK: <label>:8:
 // CHECK-NOT: call void @swift_setDeallocating
-// CHECK: call void @swift_rt_swift_deallocUninitializedObject
+// CHECK: call void @swift_deallocUninitializedObject
 
diff --git a/test/IRGen/associated_type_witness.swift b/test/IRGen/associated_type_witness.swift
index 2470814..f304c69 100644
--- a/test/IRGen/associated_type_witness.swift
+++ b/test/IRGen/associated_type_witness.swift
@@ -142,7 +142,7 @@
 // CHECK-NEXT:     [[COUNT:%.*]] = getelementptr inbounds %swift.witness_table_slice, %swift.witness_table_slice* %conditional.tables, i32 0, i32 1
 // CHECK-NEXT:     store i64 %2, i64* [[COUNT]], align 8
 // CHECK-NEXT:     [[INSTANTIATION_ARGS:%.*]] = bitcast %swift.witness_table_slice* %conditional.tables to i8**
-// CHECK-NEXT:     [[WTABLE:%.*]] = call i8** @swift_rt_swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S23associated_type_witness15GenericComputedVyxGAA22DerivedFromSimpleAssocAAWG", %swift.type* %0, i8** [[INSTANTIATION_ARGS]])
+// CHECK-NEXT:     [[WTABLE:%.*]] = call i8** @swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S23associated_type_witness15GenericComputedVyxGAA22DerivedFromSimpleAssocAAWG", %swift.type* %0, i8** [[INSTANTIATION_ARGS]])
 // CHECK-NEXT:     ret i8** [[WTABLE]]
 
 
@@ -191,7 +191,7 @@
 // CHECK-NEXT:    [[COUNT:%.*]] = getelementptr inbounds %swift.witness_table_slice, %swift.witness_table_slice* %conditional.tables, i32 0, i32 1
 // CHECK-NEXT:    store i64 %2, i64* [[COUNT]], align 8
 // CHECK-NEXT:    [[INSTANTIATION_ARGS:%.*]] = bitcast %swift.witness_table_slice* %conditional.tables to i8**
-// CHECK-NEXT:    [[WTABLE:%.*]] = call i8** @swift_rt_swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S23associated_type_witness15GenericComputedVyxGAA14HasSimpleAssocAAWG", %swift.type* %0, i8** [[INSTANTIATION_ARGS]])
+// CHECK-NEXT:    [[WTABLE:%.*]] = call i8** @swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S23associated_type_witness15GenericComputedVyxGAA14HasSimpleAssocAAWG", %swift.type* %0, i8** [[INSTANTIATION_ARGS]])
 // CHECK-NEXT:    ret i8** [[WTABLE]]
 
 
diff --git a/test/IRGen/big_types_corner_cases.swift b/test/IRGen/big_types_corner_cases.swift
index 6510c35..7a2575a 100644
--- a/test/IRGen/big_types_corner_cases.swift
+++ b/test/IRGen/big_types_corner_cases.swift
@@ -120,7 +120,7 @@
 // CHECK-LABEL: define{{( protected)?}} linkonce_odr hidden swiftcc { i8*, %swift.refcounted* } @"$S22big_types_corner_cases3FooC8myMethodyyyAA8MyStructV_SitcFTc"(%T22big_types_corner_cases3FooC*)
 // CHECK: getelementptr inbounds %T22big_types_corner_cases3FooC, %T22big_types_corner_cases3FooC*
 // CHECK: getelementptr inbounds void (i8*, %swift.refcounted*, %T22big_types_corner_cases3FooC*)*, void (i8*, %swift.refcounted*, %T22big_types_corner_cases3FooC*)**
-// CHECK: call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* getelementptr inbounds (%swift.full_boxmetadata, %swift.full_boxmetadata*
+// CHECK: call noalias %swift.refcounted* @swift_allocObject(%swift.type* getelementptr inbounds (%swift.full_boxmetadata, %swift.full_boxmetadata*
 // CHECK: ret { i8*, %swift.refcounted* }
 
 public enum LargeEnum {
diff --git a/test/IRGen/bitcast.sil b/test/IRGen/bitcast.sil
index 2b38ef3..a54ab3e 100644
--- a/test/IRGen/bitcast.sil
+++ b/test/IRGen/bitcast.sil
@@ -117,8 +117,8 @@
 }
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @unchecked_ref_cast_addr
-// CHECK-i386: call i1 @swift_rt_swift_dynamicCast(%swift.opaque* %0, %swift.opaque* %{{.*}}, %swift.type* %T, %swift.type* %U, i32 7)
-// CHECK-x86_64: call i1 @swift_rt_swift_dynamicCast(%swift.opaque* %0, %swift.opaque* %{{.*}}, %swift.type* %T, %swift.type* %U, i64 7)
+// CHECK-i386: call i1 @swift_dynamicCast(%swift.opaque* %0, %swift.opaque* %{{.*}}, %swift.type* %T, %swift.type* %U, i32 7)
+// CHECK-x86_64: call i1 @swift_dynamicCast(%swift.opaque* %0, %swift.opaque* %{{.*}}, %swift.type* %T, %swift.type* %U, i64 7)
 sil @unchecked_ref_cast_addr : $@convention(thin) <T, U> (@in T) -> @out U {
 bb0(%0 : $*U, %1 : $*T):
   %a = alloc_stack $T
diff --git a/test/IRGen/boxed_existential.sil b/test/IRGen/boxed_existential.sil
index 0bd30f9..3e9f0c9 100644
--- a/test/IRGen/boxed_existential.sil
+++ b/test/IRGen/boxed_existential.sil
@@ -8,12 +8,12 @@
 sil @retain_release_boxed_existential : $@convention(thin) (@owned Error) -> () {
 entry(%e : $Error):
   // CHECK-objc: @swift_errorRetain
-  // CHECK-native: @swift_rt_swift_retain
+  // CHECK-native: @swift_retain
   strong_retain %e : $Error
   %1 = function_ref @error_user : $@convention(thin) (@owned Error) -> ()
   apply %1(%e) : $@convention(thin) (@owned Error) -> ()
   // CHECK-objc: @swift_errorRelease
-  // CHECK-native: @swift_rt_swift_release
+  // CHECK-native: @swift_release
   strong_release %e : $Error
   return undef : $()
 }
@@ -105,7 +105,7 @@
   %m = existential_metatype $@thick Error.Type, %b : $Error
 
   // CHECK-objc:   call void @swift_errorRelease(%swift.error* %0)
-  // CHECK-native: call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%swift.error*)*)(%swift.error* %0)
+  // CHECK-native: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%swift.error*)*)(%swift.error* %0)
   strong_release %b : $Error
 
   // CHECK: [[RET:%.*]] = insertvalue { %swift.type*, i8** } undef, %swift.type* [[DYNAMIC_TYPE]], 0
diff --git a/test/IRGen/builtins.swift b/test/IRGen/builtins.swift
index 6f30f2a..3fcd691 100644
--- a/test/IRGen/builtins.swift
+++ b/test/IRGen/builtins.swift
@@ -152,7 +152,7 @@
 // CHECK: define hidden {{.*}}%swift.refcounted* @"$S8builtins16load_object_test{{[_0-9a-zA-Z]*}}F"
 func load_object_test(_ ptr: Builtin.RawPointer) -> Builtin.NativeObject {
   // CHECK: [[T0:%.*]] = load [[REFCOUNT]]*, [[REFCOUNT]]**
-  // CHECK: call [[REFCOUNT]]* @swift_rt_swift_retain([[REFCOUNT]]* returned [[T0]])
+  // CHECK: call [[REFCOUNT]]* @swift_retain([[REFCOUNT]]* returned [[T0]])
   // CHECK: ret [[REFCOUNT]]* [[T0]]
   return Builtin.load(ptr)
 }
@@ -160,7 +160,7 @@
 // CHECK: define hidden {{.*}}%swift.refcounted* @"$S8builtins20load_raw_object_test{{[_0-9a-zA-Z]*}}F"
 func load_raw_object_test(_ ptr: Builtin.RawPointer) -> Builtin.NativeObject {
   // CHECK: [[T0:%.*]] = load [[REFCOUNT]]*, [[REFCOUNT]]**
-  // CHECK: call [[REFCOUNT]]* @swift_rt_swift_retain([[REFCOUNT]]* returned [[T0]])
+  // CHECK: call [[REFCOUNT]]* @swift_retain([[REFCOUNT]]* returned [[T0]])
   // CHECK: ret [[REFCOUNT]]* [[T0]]
   return Builtin.loadRaw(ptr)
 }
@@ -643,7 +643,7 @@
 // CHECK-LABEL: define hidden {{.*}}i1 @"$S8builtins8isUniqueyBi1_BozF"(%swift.refcounted** nocapture dereferenceable({{.*}})) {{.*}} {
 // CHECK-NEXT: entry:
 // CHECK-NEXT: load %swift.refcounted*, %swift.refcounted** %0
-// CHECK-NEXT: call i1 @swift_rt_swift_isUniquelyReferenced_nonNull_native(%swift.refcounted* %1)
+// CHECK-NEXT: call i1 @swift_isUniquelyReferenced_nonNull_native(%swift.refcounted* %1)
 // CHECK-NEXT: ret i1 %2
 func isUnique(_ ref: inout Builtin.NativeObject) -> Bool {
   return Builtin.isUnique(&ref)
@@ -654,7 +654,7 @@
 // CHECK-NEXT: entry:
 // CHECK-NEXT: bitcast [[BUILTIN_NATIVE_OBJECT_TY]]* %0 to %swift.refcounted**
 // CHECK-NEXT: load %swift.refcounted*, %swift.refcounted** %1
-// CHECK-NEXT: call i1 @swift_rt_swift_isUniquelyReferencedOrPinned_native(%swift.refcounted* %2)
+// CHECK-NEXT: call i1 @swift_isUniquelyReferencedOrPinned_native(%swift.refcounted* %2)
 // CHECK-NEXT: ret i1 %3
 func isUniqueOrPinned(_ ref: inout Builtin.NativeObject?) -> Bool {
   return Builtin.isUniqueOrPinned(&ref)
@@ -664,7 +664,7 @@
 // CHECK-LABEL: define hidden {{.*}}i1 @"$S8builtins16isUniqueOrPinnedyBi1_BozF"(%swift.refcounted** nocapture dereferenceable({{.*}})) {{.*}} {
 // CHECK-NEXT: entry:
 // CHECK-NEXT: load %swift.refcounted*, %swift.refcounted** %0
-// CHECK-NEXT: call i1 @swift_rt_swift_isUniquelyReferencedOrPinned_nonNull_native(%swift.refcounted* %1)
+// CHECK-NEXT: call i1 @swift_isUniquelyReferencedOrPinned_nonNull_native(%swift.refcounted* %1)
 // CHECK-NEXT: ret i1 %2
 func isUniqueOrPinned(_ ref: inout Builtin.NativeObject) -> Bool {
   return Builtin.isUniqueOrPinned(&ref)
@@ -691,7 +691,7 @@
 // CHECK-NEXT: entry:
 // CHECK-NEXT: load [[UNKNOWN_OBJECT]]*, [[UNKNOWN_OBJECT]]** %0
 // CHECK-objc-NEXT: call i1 @swift_isUniquelyReferencedNonObjC_nonNull([[UNKNOWN_OBJECT]]* %1)
-// CHECK-native-NEXT: call i1 @swift_rt_swift_isUniquelyReferenced_nonNull_native([[UNKNOWN_OBJECT]]* %1)
+// CHECK-native-NEXT: call i1 @swift_isUniquelyReferenced_nonNull_native([[UNKNOWN_OBJECT]]* %1)
 // CHECK-NEXT: ret i1 %2
 func isUnique(_ ref: inout Builtin.UnknownObject) -> Bool {
   return Builtin.isUnique(&ref)
@@ -702,7 +702,7 @@
 // CHECK-SAME:    ([[UNKNOWN_OBJECT]]** nocapture dereferenceable({{.*}})) {{.*}} {
 // CHECK-NEXT: entry:
 // CHECK-NEXT: load [[UNKNOWN_OBJECT]]*, [[UNKNOWN_OBJECT]]** %0
-// CHECK-native-NEXT: call i1 @swift_rt_swift_isUniquelyReferencedOrPinned_nonNull_native([[UNKNOWN_OBJECT]]* %1)
+// CHECK-native-NEXT: call i1 @swift_isUniquelyReferencedOrPinned_nonNull_native([[UNKNOWN_OBJECT]]* %1)
 // CHECK-objc-NEXT: call i1 @swift_isUniquelyReferencedOrPinnedNonObjC_nonNull([[UNKNOWN_OBJECT]]* %1)
 // CHECK-NEXT: ret i1 %2
 func isUniqueOrPinned(_ ref: inout Builtin.UnknownObject) -> Bool {
@@ -734,7 +734,7 @@
 // CHECK-NEXT: entry:
 // CHECK-NEXT: bitcast %swift.bridge** %0 to %swift.refcounted**
 // CHECK-NEXT: load %swift.refcounted*, %swift.refcounted** %1
-// CHECK-NEXT: call i1 @swift_rt_swift_isUniquelyReferenced_nonNull_native(%swift.refcounted* %2)
+// CHECK-NEXT: call i1 @swift_isUniquelyReferenced_nonNull_native(%swift.refcounted* %2)
 // CHECK-NEXT: ret i1 %3
 func isUnique_native(_ ref: inout Builtin.BridgeObject) -> Bool {
   return Builtin.isUnique_native(&ref)
@@ -745,7 +745,7 @@
 // CHECK-NEXT: entry:
 // CHECK-NEXT: bitcast %swift.bridge** %0 to %swift.refcounted**
 // CHECK-NEXT: load %swift.refcounted*, %swift.refcounted** %1
-// CHECK-NEXT: call i1 @swift_rt_swift_isUniquelyReferencedOrPinned_nonNull_native(%swift.refcounted* %2)
+// CHECK-NEXT: call i1 @swift_isUniquelyReferencedOrPinned_nonNull_native(%swift.refcounted* %2)
 // CHECK-NEXT: ret i1 %3
 func isUniqueOrPinned_native(_ ref: inout Builtin.BridgeObject) -> Bool {
   return Builtin.isUniqueOrPinned_native(&ref)
@@ -799,9 +799,9 @@
 
 // CHECK-LABEL: define {{.*}} @{{.*}}unsafeGuaranteed_test
 // CHECK:  [[LOCAL:%.*]] = alloca %swift.refcounted*
-// CHECK:  call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned %0)
+// CHECK:  call %swift.refcounted* @swift_retain(%swift.refcounted* returned %0)
 // CHECK:  store %swift.refcounted* %0, %swift.refcounted** [[LOCAL]]
-// CHECK:  call void @swift_rt_swift_release(%swift.refcounted* %0)
+// CHECK:  call void @swift_release(%swift.refcounted* %0)
 // CHECK:  ret %swift.refcounted* %0
 func unsafeGuaranteed_test(_ x: Builtin.NativeObject) -> Builtin.NativeObject {
   var (g,t) = Builtin.unsafeGuaranteed(x)
diff --git a/test/IRGen/casts.sil b/test/IRGen/casts.sil
index 409acde..965a0e1 100644
--- a/test/IRGen/casts.sil
+++ b/test/IRGen/casts.sil
@@ -225,7 +225,7 @@
 // CHECK:         [[OBJ_PTR:%.*]] = bitcast %T5casts1AC* [[T0]] to i8*
 // CHECK:         [[METADATA:%.*]] = call %swift.type* @"$S5casts1ACMa"()
 // CHECK:         [[METADATA_PTR:%.*]] = bitcast %swift.type* [[METADATA]] to i8*
-// CHECK:         [[RESULT_PTR:%.*]] = call i8* @swift_rt_swift_dynamicCastClass(i8* [[OBJ_PTR]], i8* [[METADATA_PTR]])
+// CHECK:         [[RESULT_PTR:%.*]] = call i8* @swift_dynamicCastClass(i8* [[OBJ_PTR]], i8* [[METADATA_PTR]])
 // CHECK:         [[RESULT:%.*]] = bitcast i8* [[RESULT_PTR]] to %T5casts1AC*
 // CHECK:         [[COND:%.*]] = icmp ne %T5casts1AC* [[RESULT]], null
 // CHECK:         br i1 [[COND]]
diff --git a/test/IRGen/class.sil b/test/IRGen/class.sil
index 338a48e..34ae784 100644
--- a/test/IRGen/class.sil
+++ b/test/IRGen/class.sil
@@ -6,12 +6,12 @@
 import Builtin
 import Swift
 
-// CHECK: [[REF:%swift.refcounted]] = type
-// CHECK: [[TYPE:%swift.type]] = type
-// CHECK: [[OBJCCLASS:%objc_class]] = type
-// CHECK: [[OPAQUE:%swift.opaque]] = type opaque
-// CHECK: [[C_CLASS:%T5class1CC]] = type
-// CHECK: [[OBJCOBJ:%objc_object]] = type
+// CHECK-DAG: [[REF:%swift.refcounted]] = type
+// CHECK-DAG: [[TYPE:%swift.type]] = type
+// CHECK-DAG: [[OBJCCLASS:%objc_class]] = type
+// CHECK-DAG: [[OPAQUE:%swift.opaque]] = type opaque
+// CHECK-DAG: [[C_CLASS:%T5class1CC]] = type
+// CHECK-DAG: [[OBJCOBJ:%objc_object]] = type
 
 class C {}
 sil_vtable C {}
@@ -100,7 +100,7 @@
   // CHECK:   [[T1:%.*]] = bitcast i8* [[T0]] to i16*
   // CHECK:   [[ALIGN16:%.*]] = load i16, i16* [[T1]], align 4
   // CHECK:   [[ALIGN:%.*]] = zext i16 [[ALIGN16]] to i64
-  // CHECK:   [[RESULT:%[0-9]+]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %0, i64 [[SIZE]], i64 [[ALIGN]])
+  // CHECK:   [[RESULT:%[0-9]+]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* %0, i64 [[SIZE]], i64 [[ALIGN]])
   %1 = alloc_ref_dynamic %0 : $@thick C.Type, $C
   return %1 : $C
 }
diff --git a/test/IRGen/class_resilience.sil b/test/IRGen/class_resilience.sil
index 3ed1b15..6f1fe46 100644
--- a/test/IRGen/class_resilience.sil
+++ b/test/IRGen/class_resilience.sil
@@ -31,7 +31,7 @@
 // CHECK-NEXT: [[ALIGN_PTR:%.*]] = bitcast i8* [[ALIGN_ADDR]] to i16*
 // CHECK-NEXT: [[ALIGN_2:%.*]] = load i16, i16* [[ALIGN_PTR]], align 4
 // CHECK-NEXT: [[ALIGN:%.*]] = zext i16 [[ALIGN_2]] to i64
-// CHECK-NEXT: call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[META]], i64 [[SIZE]], i64 [[ALIGN]])
+// CHECK-NEXT: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[META]], i64 [[SIZE]], i64 [[ALIGN]])
 
 sil @allocResilientOutsideParent : $@convention(thin) () -> () {
 bb0:
diff --git a/test/IRGen/class_stack_alloc.sil b/test/IRGen/class_stack_alloc.sil
index 5d2cd21..8b05be7 100644
--- a/test/IRGen/class_stack_alloc.sil
+++ b/test/IRGen/class_stack_alloc.sil
@@ -34,7 +34,7 @@
 // CHECK-NEXT: [[O:%[0-9]+]] = bitcast %[[C]]* %reference.raw to %swift.refcounted*
 // CHECK-NEXT: %reference.new = call %swift.refcounted* @swift_initStackObject(%swift.type* [[M]], %swift.refcounted* [[O]])
 // CHECK-NEXT: [[R:%[0-9]+]] = bitcast %swift.refcounted* %reference.new to %[[C]]*
-// CHECK-NEXT: call {{.*}} @swift_rt_swift_release {{.*}} [[R]])
+// CHECK-NEXT: call {{.*}} @swift_release {{.*}} [[R]])
 // CHECK-NEXT: [[O2:%[0-9]+]] = bitcast %[[C]]* [[R]] to i8*
 // CHECK-NEXT: call void @llvm.lifetime.end.p0i8(i64 -1, i8* [[O2]])
 // CHECK-NEXT: ret void
@@ -56,7 +56,7 @@
 // CHECK: alloca {{.*}}TestStruct
 // CHECK-NOT: alloca
 // CHECK: call %swift.refcounted* @swift_initStackObject
-// CHECK: call noalias %swift.refcounted* @swift_rt_swift_allocObject
+// CHECK: call noalias %swift.refcounted* @swift_allocObject
 // CHECK: ret void
 sil @exceed_limit : $@convention(thin) () -> () {
 bb0:
@@ -124,7 +124,7 @@
 }
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @not_promoted_with_inlined_devirtualized_release
-// CHECK: [[O:%[0-9]+]] = call {{.*}} @swift_rt_swift_allocObject
+// CHECK: [[O:%[0-9]+]] = call {{.*}} @swift_allocObject
 // CHECK-NEXT: [[BC:%[0-9]+]] = bitcast %swift.refcounted* [[O]] to
 // CHECK-NEXT: call {{.*}} @swift_setDeallocating {{.*}}({{.*}} [[BC]])
 // CHECK-NEXT: [[BC2:%[0-9]+]] = bitcast {{.*}} [[BC]] to %swift.refcounted*
diff --git a/test/IRGen/copy_value_destroy_value.sil b/test/IRGen/copy_value_destroy_value.sil
index ab36f89..bfdc2a9 100644
--- a/test/IRGen/copy_value_destroy_value.sil
+++ b/test/IRGen/copy_value_destroy_value.sil
@@ -32,10 +32,10 @@
 // CHECK-NEXT: [[VAL1:%.*]] = load %swift.refcounted*, %swift.refcounted** [[GEP1]], align 8
 // CHECK: [[GEP2:%.*]] = getelementptr inbounds %T019copy_value_destroy_B03FooV, %T019copy_value_destroy_B03FooV* %1, i32 0, i32 5
 // CHECK-NEXT: [[VAL2:%.*]] = load %swift.refcounted*, %swift.refcounted** [[GEP2]], align 8
-// CHECK: call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned [[VAL1]])
-// CHECK: call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned [[VAL2]])
-// CHECK: call void @swift_rt_swift_release(%swift.refcounted* [[VAL1]])
-// CHECK: call void @swift_rt_swift_release(%swift.refcounted* [[VAL2]])
+// CHECK: call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[VAL1]])
+// CHECK: call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[VAL2]])
+// CHECK: call void @swift_release(%swift.refcounted* [[VAL1]])
+// CHECK: call void @swift_release(%swift.refcounted* [[VAL2]])
 sil @non_trivial : $@convention(thin) (Foo) -> () {
 bb0(%0 : $Foo):
   %1 = copy_value %0 : $Foo
diff --git a/test/IRGen/dllimport.swift b/test/IRGen/dllimport.swift
index c303429..ee44b05 100644
--- a/test/IRGen/dllimport.swift
+++ b/test/IRGen/dllimport.swift
@@ -36,12 +36,12 @@
   blackhole({ () -> () in })
 }
 
-// CHECK-NO-OPT-DAG: @_swift_allocObject = external dllimport global %swift.refcounted* (%swift.type*, i32, i32)*
-// CHECK-NO-OPT-DAG: @_swift_deallocObject = external dllimport global void (%swift.refcounted*, i32, i32)*
-// CHECK-NO-OPT-DAG: @_swift_release = external dllimport global void (%swift.refcounted*)
-// CHECK-NO-OPT-DAG: @_swift_retain = external dllimport global %swift.refcounted* (%swift.refcounted*)
-// CHECK-NO-OPT-DAG: @_swift_slowAlloc = external dllimport global i8* (i32, i32)*
-// CHECK-NO-OPT-DAG: @_swift_slowDealloc = external dllimport global void (i8*, i32, i32)*
+// CHECK-NO-OPT-DAG: declare dllimport %swift.refcounted* @swift_allocObject(%swift.type*, i32, i32)
+// CHECK-NO-OPT-DAG: declare dllimport void @swift_deallocObject(%swift.refcounted*, i32, i32)
+// CHECK-NO-OPT-DAG: declare dllimport void @swift_release(%swift.refcounted*)
+// CHECK-NO-OPT-DAG: declare dllimport %swift.refcounted* @swift_retain(%swift.refcounted* returned)
+// CHECK-NO-OPT-DAG: declare dllimport i8* @swift_slowAlloc(i32, i32) #2
+// CHECK-NO-OPT-DAG: declare dllimport void @swift_slowDealloc(i8*, i32, i32) #2
 // CHECK-NO-OPT-DAG: @"$S9dllexport1cCN" = external dllimport global %swift.type
 // CHECK-NO-OPT-DAG: @"$S9dllexport1pMp" = external dllimport global %swift.protocol
 // CHECK-NO-OPT-DAG: @"$SytN" = external dllimport global %swift.full_type
@@ -50,21 +50,14 @@
 // CHECK-NO-OPT-DAG: declare dllimport swiftcc %swift.refcounted* @"$S9dllexport1cCfd"(%T9dllexport1cC* swiftself)
 // CHECK-NO-OPT-DAG: declare dllimport %swift.type* @"$S9dllexport1cCMa"()
 // CHECK-NO-OPT-DAG: declare dllimport void @swift_deallocClassInstance(%swift.refcounted*, i32, i32)
-// CHECK-NO-OPT-DAG: define linkonce_odr hidden i8* @swift_rt_swift_slowAlloc(i32, i32)
-// CHECK-NO-OPT-DAG: define linkonce_odr hidden void @swift_rt_swift_release(%swift.refcounted*)
-// CHECK-NO-OPT-DAG: define linkonce_odr hidden %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned)
-// CHECK-NO-OPT-DAG: define linkonce_odr hidden void @swift_rt_swift_slowDealloc(i8*, i32, i32)
 
-// CHECK-OPT-DAG: @_swift_retain = external dllimport local_unnamed_addr global %swift.refcounted* (%swift.refcounted*)
+// CHECK-OPT-DAG: declare dllimport %swift.refcounted* @swift_retain(%swift.refcounted* returned) local_unnamed_addr
 // CHECK-OPT-DAG: @"$SBoWV" = external dllimport global i8*
 // CHECK-OPT-DAG: @"$S9dllexport1cCN" = external dllimport global %swift.type
 // CHECK-OPT-DAG: @"$S9dllexport1pMp" = external dllimport global %swift.protocol
-// CHECK-OPT-DAG: @_swift_slowAlloc = external dllimport local_unnamed_addr global i8* (i32, i32)*
-// CHECK-OPT-DAG: @_swift_slowDealloc = external dllimport local_unnamed_addr global void (i8*, i32, i32)*
+// CHECK-OPT-DAG: declare dllimport i8* @swift_slowAlloc(i32, i32) local_unnamed_addr
+// CHECK-OPT-DAG: declare dllimport void @swift_slowDealloc(i8*, i32, i32) local_unnamed_addr
 // CHECK-OPT-DAG: declare dllimport swiftcc i8* @"$S9dllexport2ciAA1cCvau"()
 // CHECK-OPT-DAG: declare dllimport %swift.type* @"$S9dllexport1cCMa"()
 // CHECK-OPT-DAG: declare dllimport void @swift_deallocClassInstance(%swift.refcounted*, i32, i32)
 // CHECK-OPT-DAG: declare dllimport swiftcc %swift.refcounted* @"$S9dllexport1cCfd"(%T9dllexport1cC* swiftself)
-// CHECK-OPT-DAG: define linkonce_odr hidden i8* @swift_rt_swift_slowAlloc(i32, i32)
-// CHECK-OPT-DAG: define linkonce_odr hidden void @swift_rt_swift_slowDealloc(i8*, i32, i32)
-
diff --git a/test/IRGen/dynamic_cast.sil b/test/IRGen/dynamic_cast.sil
index b960715..dc35f9b 100644
--- a/test/IRGen/dynamic_cast.sil
+++ b/test/IRGen/dynamic_cast.sil
@@ -26,7 +26,7 @@
   // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]*
   // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]*
   // CHECK: [[T3:%.*]] = call [[TYPE:%.*]]* @"$S12dynamic_cast1P_pMa"()
-  // CHECK: call i1 @swift_rt_swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], [[TYPE]]* [[T3]], [[TYPE]]* {{.*}}, [[LLVM_PTRSIZE_INT]] 7)
+  // CHECK: call i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], [[TYPE]]* [[T3]], [[TYPE]]* {{.*}}, [[LLVM_PTRSIZE_INT]] 7)
   %1 = alloc_stack $S
   unconditional_checked_cast_addr P in %0 : $*P to S in %1 : $*S
   destroy_addr %1 : $*S
@@ -36,7 +36,7 @@
 }
 
 // CHECK-LABEL: define linkonce_odr hidden %swift.type* @"$S12dynamic_cast1P_pMa"()
-// CHECK:       call %swift.type* @swift_rt_swift_getExistentialTypeMetadata(
+// CHECK:       call %swift.type* @swift_getExistentialTypeMetadata(
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @testUnconditional1(
 sil @testUnconditional1 : $@convention(thin) (@in P) -> () {
@@ -45,7 +45,7 @@
   // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]*
   // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]*
   // CHECK: [[T3:%.*]] = call [[TYPE:%.*]]* @"$S12dynamic_cast1P_pMa"()
-  // CHECK: call i1 @swift_rt_swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], [[TYPE]]* [[T3]], [[TYPE]]* {{.*}}, [[LLVM_PTRSIZE_INT]] 7)
+  // CHECK: call i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], [[TYPE]]* [[T3]], [[TYPE]]* {{.*}}, [[LLVM_PTRSIZE_INT]] 7)
   %1 = alloc_stack $S
   unconditional_checked_cast_addr P in %0 : $*P to S in %1 : $*S
   destroy_addr %1 : $*S
@@ -61,7 +61,7 @@
   // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]*
   // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]*
   // CHECK: [[T3:%.*]] = call [[TYPE:%.*]]* @"$S12dynamic_cast1P_pMa"()
-  // CHECK: [[T4:%.*]] = call i1 @swift_rt_swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], [[TYPE]]* [[T3]], [[TYPE]]* {{.*}}, [[LLVM_PTRSIZE_INT]] 6)
+  // CHECK: [[T4:%.*]] = call i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], [[TYPE]]* [[T3]], [[TYPE]]* {{.*}}, [[LLVM_PTRSIZE_INT]] 6)
   // CHECK: br i1 [[T4]],
   %1 = alloc_stack $S
   checked_cast_addr_br take_always P in %0 : $*P to S in %1 : $*S, bb1, bb2
@@ -81,7 +81,7 @@
   // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]*
   // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]*
   // CHECK: [[T3:%.*]] = call [[TYPE:%.*]]* @"$S12dynamic_cast1P_pMa"()
-  // CHECK: [[T4:%.*]] = call i1 @swift_rt_swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], [[TYPE]]* [[T3]], [[TYPE]]* {{.*}}, [[LLVM_PTRSIZE_INT]] 2)
+  // CHECK: [[T4:%.*]] = call i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], [[TYPE]]* [[T3]], [[TYPE]]* {{.*}}, [[LLVM_PTRSIZE_INT]] 2)
   // CHECK: br i1 [[T4]],
   %1 = alloc_stack $S
   checked_cast_addr_br take_on_success P in %0 : $*P to S in %1 : $*S, bb1, bb2
@@ -101,7 +101,7 @@
   // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]*
   // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]*
   // CHECK: [[T3:%.*]] = call [[TYPE:%.*]]* @"$S12dynamic_cast1P_pMa"()
-  // CHECK: [[T4:%.*]] = call i1 @swift_rt_swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], [[TYPE]]* [[T3]], [[TYPE]]* {{.*}}, [[LLVM_PTRSIZE_INT]] 0)
+  // CHECK: [[T4:%.*]] = call i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], [[TYPE]]* [[T3]], [[TYPE]]* {{.*}}, [[LLVM_PTRSIZE_INT]] 0)
   // CHECK: br i1 [[T4]],
   %1 = alloc_stack $S
   checked_cast_addr_br copy_on_success P in %0 : $*P to S in %1 : $*S, bb1, bb2
diff --git a/test/IRGen/dynamic_init.sil b/test/IRGen/dynamic_init.sil
index f30eb43..e272afb 100644
--- a/test/IRGen/dynamic_init.sil
+++ b/test/IRGen/dynamic_init.sil
@@ -25,7 +25,7 @@
   %2 = class_method %0 : $@thick C.Type, #C.init!allocator.1 : (C.Type) -> () -> C, $@convention(method) (@thick C.Type) -> @owned C
   // CHECK:   [[RESULT:%[0-9]+]] = call swiftcc %T12dynamic_init1CC* [[CTOR]](%swift.type* swiftself %0)
   %3 = apply %2(%0) : $@convention(method) (@thick C.Type) -> @owned C
-  // CHECK:   call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T12dynamic_init1CC*)*)(%T12dynamic_init1CC* [[RESULT]])
+  // CHECK:   call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T12dynamic_init1CC*)*)(%T12dynamic_init1CC* [[RESULT]])
   strong_release %3 : $C
   // CHECK: ret void
   %5 = tuple ()
diff --git a/test/IRGen/enum_dynamic_multi_payload.sil b/test/IRGen/enum_dynamic_multi_payload.sil
index 7833685..81c4b78 100644
--- a/test/IRGen/enum_dynamic_multi_payload.sil
+++ b/test/IRGen/enum_dynamic_multi_payload.sil
@@ -381,7 +381,7 @@
   // CHECK:        call void %destroy(%swift.opaque* noalias {{%.*}}, %swift.type* %T)
   // CHECK:        br label %[[NOOP]]
   // CHECK:      <label>:[[RIGHT]]
-  // CHECK:        call void {{.*}} @swift_rt_swift_release
+  // CHECK:        call void {{.*}} @swift_release
   // CHECK:      <label>:[[NOOP]]
   destroy_addr %a : $*EitherOr<T, C>
 
@@ -408,7 +408,7 @@
   // CHECK:        call %swift.opaque* %initializeWithCopy(%swift.opaque* noalias {{%.*}}, %swift.type* %T)
   // CHECK:        br label %[[DONE:[0-9]+]]
   // CHECK:      <label>:[[RIGHT]]
-  // CHECK:        call %swift.refcounted* @swift_rt_swift_retain
+  // CHECK:        call %swift.refcounted* @swift_retain
   // CHECK:        br label %[[DONE:[0-9]+]]
   // CHECK:      <label>:[[TRIVIAL]]
   // CHECK:        call void @llvm.memcpy
diff --git a/test/IRGen/enum_resilience.swift b/test/IRGen/enum_resilience.swift
index 7cef5df..621dfb7 100644
--- a/test/IRGen/enum_resilience.swift
+++ b/test/IRGen/enum_resilience.swift
@@ -204,7 +204,7 @@
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @"$S15enum_resilience25resilientEnumPartialApplyyySi0c1_A06MediumOcF"(i8*, %swift.refcounted*)
 public func resilientEnumPartialApply(_ f: (Medium) -> Int) {
 
-// CHECK:     [[CONTEXT:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject
+// CHECK:     [[CONTEXT:%.*]] = call noalias %swift.refcounted* @swift_allocObject
 // CHECK:     call swiftcc void @"$S15enum_resilience13reabstractionyyx010resilient_A06MediumOclF"(i8* bitcast (void (%TSi*, %swift.opaque*, %swift.refcounted*)* @"$S14resilient_enum6MediumOSiIgid_ACSiIgir_TRTA" to i8*), %swift.refcounted* [[CONTEXT:%.*]], %swift.type* @"$SSiN")
   reabstraction(f)
 
@@ -275,4 +275,4 @@
 }
 
 // CHECK-LABEL: define{{( protected)?}} internal %T15enum_resilience19ProtGenEnumWithSize33_59077B69D65A4A3BEE0C93708067D5F0LLO* @"$S15enum_resilienceytWh2_"(%T15enum_resilience19ProtGenEnumWithSize
-// CHECK:   ret %T15enum_resilience19ProtGenEnumWithSize33_59077B69D65A4A3BEE0C93708067D5F0LLO* %0
\ No newline at end of file
+// CHECK:   ret %T15enum_resilience19ProtGenEnumWithSize33_59077B69D65A4A3BEE0C93708067D5F0LLO* %0
diff --git a/test/IRGen/enum_value_semantics.sil b/test/IRGen/enum_value_semantics.sil
index 8d32502..ff2167e 100644
--- a/test/IRGen/enum_value_semantics.sil
+++ b/test/IRGen/enum_value_semantics.sil
@@ -282,7 +282,7 @@
 // CHECK:      ; <label>:[[RELEASE_PAYLOAD]]
 // CHECK-NEXT: [[DATA_ADDR:%.*]] = bitcast %T20enum_value_semantics23SinglePayloadNontrivialO* [[ADDR]] to %swift.refcounted**
 // CHECK-NEXT: [[DATA:%.*]] = load %swift.refcounted*, %swift.refcounted** [[DATA_ADDR]], align 8
-// CHECK-NEXT: call void @swift_rt_swift_release(%swift.refcounted* [[DATA]])
+// CHECK-NEXT: call void @swift_release(%swift.refcounted* [[DATA]])
 // CHECK-NEXT: br label %[[DONE]]
 
 // CHECK:      ; <label>:[[DONE]]
diff --git a/test/IRGen/enum_value_semantics_special_cases.sil b/test/IRGen/enum_value_semantics_special_cases.sil
index 70c211d..358982c 100644
--- a/test/IRGen/enum_value_semantics_special_cases.sil
+++ b/test/IRGen/enum_value_semantics_special_cases.sil
@@ -16,7 +16,7 @@
 // CHECK:   %0 = bitcast %swift.opaque* %object to %T34enum_value_semantics_special_cases18NullableRefcountedO*
 // CHECK:   %1 = bitcast %T34enum_value_semantics_special_cases18NullableRefcountedO* %0 to %swift.refcounted**
 // CHECK:   %2 = load %swift.refcounted*, %swift.refcounted** %1, align 8
-// CHECK:   call void @swift_rt_swift_release(%swift.refcounted* %2) {{#[0-9]+}}
+// CHECK:   call void @swift_release(%swift.refcounted* %2)
 // CHECK:   ret void
 // CHECK: }
 
@@ -27,7 +27,7 @@
 // CHECK:   %2 = bitcast %T34enum_value_semantics_special_cases18NullableRefcountedO* %0 to %swift.refcounted**
 // CHECK:   %3 = bitcast %T34enum_value_semantics_special_cases18NullableRefcountedO* %1 to %swift.refcounted**
 // CHECK:   %4 = load %swift.refcounted*, %swift.refcounted** %3, align 8
-// CHECK:   %5 = call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned %4) #2
+// CHECK:   %5 = call %swift.refcounted* @swift_retain(%swift.refcounted* returned %4)
 // CHECK:   store %swift.refcounted* %4, %swift.refcounted** %2, align 8
 // CHECK:   %6 = bitcast %T34enum_value_semantics_special_cases18NullableRefcountedO* %0 to %swift.opaque*
 // CHECK:   ret %swift.opaque* %6
@@ -41,9 +41,9 @@
 // CHECK:   %3 = bitcast %T34enum_value_semantics_special_cases18NullableRefcountedO* %1 to %swift.refcounted**
 // CHECK:   %4 = load %swift.refcounted*, %swift.refcounted** %2, align 8
 // CHECK:   %5 = load %swift.refcounted*, %swift.refcounted** %3, align 8
-// CHECK:   %6 = call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned %5) #2
+// CHECK:   %6 = call %swift.refcounted* @swift_retain(%swift.refcounted* returned %5)
 // CHECK:   store %swift.refcounted* %5, %swift.refcounted** %2, align 8
-// CHECK:   call void @swift_rt_swift_release(%swift.refcounted* %4) #2
+// CHECK:   call void @swift_release(%swift.refcounted* %4)
 // CHECK:   %7 = bitcast %T34enum_value_semantics_special_cases18NullableRefcountedO* %0 to %swift.opaque*
 // CHECK:   ret %swift.opaque* %7
 // CHECK: }
@@ -57,7 +57,7 @@
 // CHECK:   %4 = load %swift.refcounted*, %swift.refcounted** %2, align 8
 // CHECK:   %5 = load %swift.refcounted*, %swift.refcounted** %3, align 8
 // CHECK:   store %swift.refcounted* %5, %swift.refcounted** %2, align 8
-// CHECK:   call void @swift_rt_swift_release(%swift.refcounted* %4) #2
+// CHECK:   call void @swift_release(%swift.refcounted* %4)
 // CHECK:   %6 = bitcast %T34enum_value_semantics_special_cases18NullableRefcountedO* %0 to %swift.opaque*
 // CHECK:   ret %swift.opaque* %6
 // CHECK: }
@@ -74,7 +74,7 @@
 // CHECK:   %0 = bitcast %swift.opaque* %object to %T34enum_value_semantics_special_cases23NullableBlockRefcountedO*
 // CHECK:   %1 = bitcast %T34enum_value_semantics_special_cases23NullableBlockRefcountedO* %0 to %objc_block**
 // CHECK:   %2 = load %objc_block*, %objc_block** %1, align 8
-// CHECK:   call void @_Block_release(%objc_block* %2) {{#[0-9]+}}
+// CHECK:   call void @_Block_release(%objc_block* %2)
 // CHECK:   ret void
 // CHECK: }
 
@@ -101,7 +101,7 @@
 // CHECK:   %5 = load %objc_block*, %objc_block** %3, align 8
 // CHECK:   %6 = call %objc_block* @_Block_copy(%objc_block* %5)
 // CHECK:   store %objc_block* %5, %objc_block** %2, align 8
-// CHECK:   call void @_Block_release(%objc_block* %4) #2
+// CHECK:   call void @_Block_release(%objc_block* %4)
 // CHECK:   %7 = bitcast %T34enum_value_semantics_special_cases23NullableBlockRefcountedO* %0 to %swift.opaque*
 // CHECK:   ret %swift.opaque* %7
 // CHECK: }
@@ -115,7 +115,7 @@
 // CHECK:   %4 = load %objc_block*, %objc_block** %2, align 8
 // CHECK:   %5 = load %objc_block*, %objc_block** %3, align 8
 // CHECK:   store %objc_block* %5, %objc_block** %2, align 8
-// CHECK:   call void @_Block_release(%objc_block* %4) #2
+// CHECK:   call void @_Block_release(%objc_block* %4)
 // CHECK:   %6 = bitcast %T34enum_value_semantics_special_cases23NullableBlockRefcountedO* %0 to %swift.opaque*
 // CHECK:   ret %swift.opaque* %6
 // CHECK: }
@@ -139,7 +139,7 @@
 // CHECK: ; <label>:3:                                      ; preds = %entry
 // CHECK:   %4 = bitcast %T34enum_value_semantics_special_cases23MultipleEmptyRefcountedO* %0 to %swift.refcounted**
 // CHECK:   %toDestroy = load %swift.refcounted*, %swift.refcounted** %4, align 8
-// CHECK:   call void @swift_rt_swift_release(%swift.refcounted* %toDestroy) {{#[0-9]+}}
+// CHECK:   call void @swift_release(%swift.refcounted* %toDestroy)
 // CHECK:   br label %5
 // CHECK: ; <label>:5:                                      ; preds = %3, %entry, %entry
 // CHECK:   ret void
@@ -172,7 +172,7 @@
 // --                        0x3fffffffffffffff
 // CHECK:   %3 = and i64 %2, 4611686018427387903
 // CHECK:   %4 = inttoptr i64 %3 to %swift.refcounted*
-// CHECK:   call void @swift_rt_swift_release(%swift.refcounted* %4) {{#[0-9]+}}
+// CHECK:   call void @swift_release(%swift.refcounted* %4)
 // CHECK:   ret void
 // CHECK: }
 
@@ -180,7 +180,7 @@
 // --                              0x3fffffffffffffff
 // CHECK:         %4 = and i64 %3, 4611686018427387903
 // CHECK:         %5 = inttoptr i64 %4 to %swift.refcounted*
-// CHECK:         call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned %5)
+// CHECK:         call %swift.refcounted* @swift_retain(%swift.refcounted* returned %5)
 // CHECK:         %6 = bitcast %T34enum_value_semantics_special_cases13AllRefcountedO* %0 to i64*
 // -- NB: The original loaded value is stored, not the masked one.
 // CHECK:         store i64 %3, i64* %6, align 8
diff --git a/test/IRGen/errors.sil b/test/IRGen/errors.sil
index aa47378..5eb9404 100644
--- a/test/IRGen/errors.sil
+++ b/test/IRGen/errors.sil
@@ -76,7 +76,7 @@
 // CHECK-objc:        [[T0:%.*]] = phi %objc_object* [ [[RESULT]],
 // CHECK-objc-NEXT:   call void @swift_unknownRelease(%objc_object* [[T0]])
 // CHECK-native:      [[T0:%.*]] = phi %swift.refcounted* [ [[RESULT]],
-// CHECK-native-NEXT: call void @swift_rt_swift_release(%swift.refcounted* [[T0]])
+// CHECK-native-NEXT: call void @swift_release(%swift.refcounted* [[T0]])
 // CHECK-NEXT:        br label [[CONT:%[0-9]+]]
 bb1(%2 : $AnyObject):
   strong_release %2 : $AnyObject
@@ -85,7 +85,7 @@
 // CHECK:             [[T0:%.*]] = phi %swift.error* [ [[ERR]],
 // CHECK-NEXT:        store %swift.error* null, %swift.error** [[ERRORSLOT]], align
 // CHECK-objc-NEXT:   call void @swift_errorRelease(%swift.error* [[T0]])
-// CHECK-native-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%swift.error*)*)(%swift.error* [[T0]])
+// CHECK-native-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%swift.error*)*)(%swift.error* [[T0]])
 // CHECK-NEXT:        br label [[CONT]]
 bb2(%3 : $Error):
   release_value %3 : $Error
diff --git a/test/IRGen/existentials.sil b/test/IRGen/existentials.sil
index 694b286..5c182e7 100644
--- a/test/IRGen/existentials.sil
+++ b/test/IRGen/existentials.sil
@@ -12,15 +12,15 @@
 sil @class_existential_unowned : $@convention(thin) (@owned CP) -> @owned CP {
 entry(%s : $CP):
   %u = ref_to_unowned %s : $CP to $@sil_unowned CP
-  // CHECK: call %swift.refcounted* @swift_rt_swift_unownedRetain(%swift.refcounted* returned %0)
+  // CHECK: call %swift.refcounted* @swift_unownedRetain(%swift.refcounted* returned %0)
   unowned_retain %u : $@sil_unowned CP
-  // CHECK: call void @swift_rt_swift_unownedRelease(%swift.refcounted* %0)
+  // CHECK: call void @swift_unownedRelease(%swift.refcounted* %0)
   unowned_release %u : $@sil_unowned CP
 
-  // CHECK: call %swift.refcounted* @swift_rt_swift_unownedRetainStrong(%swift.refcounted* returned %0)
+  // CHECK: call %swift.refcounted* @swift_unownedRetainStrong(%swift.refcounted* returned %0)
   strong_retain_unowned %u : $@sil_unowned CP
   %t = unowned_to_ref %u : $@sil_unowned CP to $CP
-  // CHECK: call void @swift_rt_swift_release(%swift.refcounted* %0)
+  // CHECK: call void @swift_release(%swift.refcounted* %0)
   strong_release %t : $CP
 
   %v = ref_to_unmanaged %s : $CP to $@sil_unmanaged CP
diff --git a/test/IRGen/existentials_opaque_boxed.sil b/test/IRGen/existentials_opaque_boxed.sil
index ac11959..3ba158b 100644
--- a/test/IRGen/existentials_opaque_boxed.sil
+++ b/test/IRGen/existentials_opaque_boxed.sil
@@ -80,7 +80,7 @@
 // CHECK:  [[CONTAINER:%.*]] = alloca %T25existentials_opaque_boxed11ExistentialP
 // CHECK:  [[INLINEBUFFER:%.*]] = getelementptr inbounds %T25existentials_opaque_boxed11ExistentialP, %T25existentials_opaque_boxed11ExistentialP* [[CONTAINER]], i32 0, i32 0
 // CHECK:  [[INLINEBUFFER:%.*]] = getelementptr inbounds %T25existentials_opaque_boxed11ExistentialP, %T25existentials_opaque_boxed11ExistentialP* [[CONTAINER]], i32 0, i32 0
-// CHECK:  [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* getelementptr inbounds (%swift.full_boxmetadata, %swift.full_boxmetadata* @metadata, i32 0, i32 2), {{(i64 48|i32 40)}}, {{(i64|i32)}} 7)
+// CHECK:  [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* getelementptr inbounds (%swift.full_boxmetadata, %swift.full_boxmetadata* @metadata, i32 0, i32 2), {{(i64 48|i32 40)}}, {{(i64|i32)}} 7)
 // CHECK:  [[BOX_ADDR:%.*]] = bitcast %swift.refcounted* [[BOX]] to <{ %swift.refcounted{{(, \[4 x i8\])?}}, [32 x i8] }>*
 // CHECK:  [[VALUE_ADDR:%.*]] = getelementptr inbounds <{ %swift.refcounted{{(, \[4 x i8\])?}}, [32 x i8] }>, <{ %swift.refcounted{{(, \[4 x i8\])?}}, [32 x i8] }>* [[BOX_ADDR]], i32 0, i32 {{(1|2)}}
 // CHECK:  [[INIT_EXIST_ADDR:%.*]] = bitcast [32 x i8]* [[VALUE_ADDR]] to %T25existentials_opaque_boxed14NotInlineFixedV*
@@ -142,7 +142,7 @@
 // CHECK:   [[HEAPSIZE:%.*]] = add {{(i64|i32)}} [[ALIGNEDSTART]], [[SIZE]]
 // CHECK:   [[ALIGNMASK_ATLEASTPOINTER:%.*]] = or {{(i64|i32)}} [[ALIGNMASK]], {{(7|3)}}
 // CHECK:   [[PTR:%.*]] = bitcast %swift.refcounted* [[REFERENCE]] to i8*
-// CHECK:   call void @swift_rt_swift_slowDealloc(i8* [[PTR]], {{(i64|i32)}} [[HEAPSIZE]], {{(i64|i32)}} [[ALIGNMASK_ATLEASTPOINTER]])
+// CHECK:   call void @swift_slowDealloc(i8* [[PTR]], {{(i64|i32)}} [[HEAPSIZE]], {{(i64|i32)}} [[ALIGNMASK_ATLEASTPOINTER]])
 // CHECK:   ret void
 
 // CHECK-LABEL: define {{.*}} @test_open_existential_addr_immutable(%T25existentials_opaque_boxed11ExistentialP*
@@ -265,7 +265,7 @@
 // CHECK: outline:
 // CHECK:   [[REFERENCE_ADDR:%.*]] = bitcast [{{(24|12)}} x i8]* [[BUFFER_ADDR]] to %swift.refcounted**
 // CHECK:   [[REFERENCE:%.*]] = load %swift.refcounted*, %swift.refcounted** [[REFERENCE_ADDR]]
-// CHECK:   call void @swift_rt_swift_release(%swift.refcounted* [[REFERENCE]])
+// CHECK:   call void @swift_release(%swift.refcounted* [[REFERENCE]])
 // CHECK:   ret void
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @test_assignWithCopy_existential_addr(%T25existentials_opaque_boxed11ExistentialP*
@@ -325,8 +325,8 @@
 // CHECK:   [[SRC_REFADDR:%.*]] = bitcast [{{(24|12)}} x i8]* [[SRC_BUFFERADDR]] to %swift.refcounted**
 // CHECK:   [[DEST_REF:%.*]] = load %swift.refcounted*, %swift.refcounted** [[DEST_REFADDR]]
 // CHECK:   [[SRC_REF:%.*]] = load %swift.refcounted*, %swift.refcounted** [[SRC_REFADDR]]
-// CHECK:   call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned [[SRC_REF]])
-// CHECK:   call void @swift_rt_swift_release(%swift.refcounted* [[DEST_REF]])
+// CHECK:   call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[SRC_REF]])
+// CHECK:   call void @swift_release(%swift.refcounted* [[DEST_REF]])
 // CHECK:   store %swift.refcounted* [[SRC_REF]], %swift.refcounted** [[DEST_REFADDR]]
 // CHECK:   br label %done
 
@@ -382,7 +382,7 @@
 // CHECK:   [[DEST_REFADDR:%.*]] = bitcast [{{(24|12)}} x i8]* [[DEST_BUFFERADDR]] to %swift.refcounted**
 // CHECK:   [[SRC_REFADDR:%.*]] = bitcast [{{(24|12)}} x i8]* [[SRC_BUFFERADDR]] to %swift.refcounted**
 // CHECK:   [[SRC_REF:%.*]] = load %swift.refcounted*, %swift.refcounted** [[SRC_REFADDR]]
-// CHECK:   call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned [[SRC_REF]])
+// CHECK:   call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[SRC_REF]])
 // CHECK:   store %swift.refcounted* [[SRC_REF]], %swift.refcounted** [[DEST_REFADDR]]
 // CHECK:   br label %dest-inline-cont
 //
@@ -418,12 +418,12 @@
 // CHECK:   [[DEST_REFADDR:%.*]] = bitcast [{{(24|12)}} x i8]* [[DEST_BUFFERADDR]] to %swift.refcounted**
 // CHECK:   [[SRC_REFADDR:%.*]] = bitcast [{{(24|12)}} x i8]* [[SRC_BUFFERADDR]] to %swift.refcounted**
 // CHECK:   [[SRC_REF:%.*]] = load %swift.refcounted*, %swift.refcounted** [[SRC_REFADDR]]
-// CHECK:   call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned [[SRC_REF]])
+// CHECK:   call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[SRC_REF]])
 // CHECK:   store %swift.refcounted* [[SRC_REF]], %swift.refcounted** [[DEST_REFADDR]]
 // CHECK:   br label %dest-outline-cont
 //
 // CHECK: dest-outline-cont:
-// CHECK:   call void @swift_rt_swift_release(%swift.refcounted* [[DEST_REF]])
+// CHECK:   call void @swift_release(%swift.refcounted* [[DEST_REF]])
 // CHECK:   br label %done
 //
 // CHECK: done:
@@ -518,7 +518,7 @@
 // CHECK:  [[CONTAINER:%.*]] = alloca %T25existentials_opaque_boxed11ExistentialP
 // CHECK:  [[INLINEBUFFER:%.*]] = getelementptr inbounds %T25existentials_opaque_boxed11ExistentialP, %T25existentials_opaque_boxed11ExistentialP* [[CONTAINER]], i32 0, i32 0
 // CHECK:  [[INLINEBUFFER:%.*]] = getelementptr inbounds %T25existentials_opaque_boxed11ExistentialP, %T25existentials_opaque_boxed11ExistentialP* [[CONTAINER]], i32 0, i32 0
-// CHECK:  [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* getelementptr inbounds (%swift.full_boxmetadata, %swift.full_boxmetadata* @metadata.3, i32 0, i32 2), {{(i64|i32)}} 64, {{(i64|i32)}} 31)
+// CHECK:  [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* getelementptr inbounds (%swift.full_boxmetadata, %swift.full_boxmetadata* @metadata.3, i32 0, i32 2), {{(i64|i32)}} 64, {{(i64|i32)}} 31)
 // CHECK:  [[BOX_ADDR:%.*]] = bitcast %swift.refcounted* [[BOX]] to <{ %swift.refcounted, [{{(16|24)}} x i8], [32 x i8] }>*
 // CHECK:  [[VALUE_ADDR:%.*]] = getelementptr inbounds <{ %swift.refcounted, [{{(16|24)}} x i8], [32 x i8] }>, <{ %swift.refcounted, [{{(16|24)}} x i8], [32 x i8] }>* [[BOX_ADDR]], i32 0, i32 {{(1|2)}}
 // CHECK:  [[INIT_EXIST_ADDR:%.*]] = bitcast [32 x i8]* [[VALUE_ADDR]] to %T25existentials_opaque_boxed14FixedOveralignV*
diff --git a/test/IRGen/field_type_vectors.sil b/test/IRGen/field_type_vectors.sil
index da0e894..c9eabdb 100644
--- a/test/IRGen/field_type_vectors.sil
+++ b/test/IRGen/field_type_vectors.sil
@@ -15,7 +15,7 @@
 // CHECK-LABEL: @"$S18field_type_vectors3BarVMP" = internal global
 // -- There should be 1 word between the field type vector slot, with type %swift.type**,
 //    and the address point
-// CHECK:       %swift.type**, i8**, i64, <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32 }>*, i64, %swift.type*
+// CHECK:       %swift.type**, i8**, i64, <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32 }>*, %swift.type*, i64
 struct Bar<T> {
   var y: Int
 }
@@ -25,7 +25,7 @@
 // CHECK-LABEL: @"$S18field_type_vectors3BasVMP" = internal global
 // -- There should be 1 word between the field type vector slot, with type %swift.type**,
 //    and the address point
-// CHECK:       %swift.type**, i8**, i64, <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32 }>*, i64, i64, %swift.type*, %swift.type*
+// CHECK:       %swift.type**, i8**, i64, <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32 }>*, %swift.type*, %swift.type*, i64, i64
 struct Bas<T, U> {
   var foo: Foo
   var bar: Bar<T>
diff --git a/test/IRGen/function_types.sil b/test/IRGen/function_types.sil
index 18fbf89..1795b5b 100644
--- a/test/IRGen/function_types.sil
+++ b/test/IRGen/function_types.sil
@@ -26,8 +26,8 @@
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc { i8*, %swift.refcounted* } @thick_func_value(i8*, %swift.refcounted*) {{.*}} {
 // CHECK-NEXT:  entry:
-// CHECK-NEXT:    call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned %1) {{#[0-9]+}}
-// CHECK-NEXT:    call void @swift_rt_swift_release(%swift.refcounted* %1) {{#[0-9]+}}
+// CHECK-NEXT:    call %swift.refcounted* @swift_retain(%swift.refcounted* returned %1) {{#[0-9]+}}
+// CHECK-NEXT:    call void @swift_release(%swift.refcounted* %1) {{#[0-9]+}}
 // CHECK-NEXT:    %3 = insertvalue { i8*, %swift.refcounted* } undef, i8* %0, 0
 // CHECK-NEXT:    %4 = insertvalue { i8*, %swift.refcounted* } %3, %swift.refcounted* %1, 1
 // CHECK-NEXT:    ret { i8*, %swift.refcounted* } %4
diff --git a/test/IRGen/generic_casts.swift b/test/IRGen/generic_casts.swift
index 1eb1d1d..1459261 100644
--- a/test/IRGen/generic_casts.swift
+++ b/test/IRGen/generic_casts.swift
@@ -45,7 +45,7 @@
   // CHECK: [[T_TMP:%.*]] = bitcast i8* [[T_ALLOCA]] to %swift.opaque*
   // CHECK: [[TEMP:%.*]] = call %swift.opaque* {{.*}}(%swift.opaque* noalias [[T_TMP]], %swift.opaque* noalias %0, %swift.type* %T)
   // CHECK: [[T0:%.*]] = bitcast %TSi* [[INT_TEMP]] to %swift.opaque*
-  // CHECK: call i1 @swift_rt_swift_dynamicCast(%swift.opaque* [[T0]], %swift.opaque* [[T_TMP]], %swift.type* %T, %swift.type* @"$SSiN", i64 7)
+  // CHECK: call i1 @swift_dynamicCast(%swift.opaque* [[T0]], %swift.opaque* [[T_TMP]], %swift.type* %T, %swift.type* @"$SSiN", i64 7)
   // CHECK: [[T0:%.*]] = getelementptr inbounds %TSi, %TSi* [[INT_TEMP]], i32 0, i32 0
   // CHECK: [[INT_RESULT:%.*]] = load i64, i64* [[T0]],
   // CHECK: ret i64 [[INT_RESULT]]
@@ -57,7 +57,7 @@
   // CHECK: [[T0:%.*]] = getelementptr inbounds %TSi, %TSi* [[INT_TEMP]], i32 0, i32 0
   // CHECK: store i64 %1, i64* [[T0]],
   // CHECK: [[T0:%.*]] = bitcast %TSi* [[INT_TEMP]] to %swift.opaque*
-  // CHECK: call i1 @swift_rt_swift_dynamicCast(%swift.opaque* %0, %swift.opaque* [[T0]], %swift.type* @"$SSiN", %swift.type* %T, i64 7)
+  // CHECK: call i1 @swift_dynamicCast(%swift.opaque* %0, %swift.opaque* [[T0]], %swift.type* @"$SSiN", %swift.type* %T, i64 7)
   return x as! T
 }
 
@@ -101,7 +101,7 @@
   // CHECK: [[LOCAL:%.*]] = alloca %T13generic_casts10ObjCProto1P
   // CHECK: [[LOCAL_OPAQUE:%.*]] = bitcast %T13generic_casts10ObjCProto1P* [[LOCAL]] to %swift.opaque*
   // CHECK: [[PROTO_TYPE:%.*]] = call %swift.type* @"$S13generic_casts10ObjCProto1_pMa"()
-  // CHECK: call i1 @swift_rt_swift_dynamicCast(%swift.opaque* %0, %swift.opaque* [[LOCAL_OPAQUE]], %swift.type* [[PROTO_TYPE]], %swift.type* %T, i64 7)
+  // CHECK: call i1 @swift_dynamicCast(%swift.opaque* %0, %swift.opaque* [[LOCAL_OPAQUE]], %swift.type* [[PROTO_TYPE]], %swift.type* %T, i64 7)
   return x as! T
 }
 
diff --git a/test/IRGen/generic_classes.sil b/test/IRGen/generic_classes.sil
index bdf9683..574a04a 100644
--- a/test/IRGen/generic_classes.sil
+++ b/test/IRGen/generic_classes.sil
@@ -216,7 +216,7 @@
 // CHECK:   [[T1:%.*]] = bitcast i8* [[T0]] to i16*
 // CHECK:   [[ALIGN16:%.*]] = load i16, i16* [[T1]], align 4
 // CHECK:   [[ALIGN:%.*]] = zext i16 [[ALIGN16]] to i64
-// CHECK:   call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[METADATA]], i64 [[SIZE]], i64 [[ALIGN]])
+// CHECK:   call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], i64 [[SIZE]], i64 [[ALIGN]])
 sil @RootGeneric_fragile_dependent_alloc : $<G> () -> RootGeneric<G> {
 entry:
   %x = alloc_ref $RootGeneric<G>
diff --git a/test/IRGen/generic_metatypes.swift b/test/IRGen/generic_metatypes.swift
index 13050c3..54631e0 100644
--- a/test/IRGen/generic_metatypes.swift
+++ b/test/IRGen/generic_metatypes.swift
@@ -110,7 +110,7 @@
 // CHECK:   [[BUFFER_ELT:%.*]] = getelementptr inbounds { %swift.type* }, { %swift.type* }* [[BUFFER]], i32 0, i32 0
 // CHECK:   store %swift.type* %0, %swift.type** [[BUFFER_ELT]]
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type* }* [[BUFFER]] to i8*
-// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_rt_swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes6OneArgVMP" {{.*}}, i8* [[BUFFER_PTR]])
+// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes6OneArgVMP" {{.*}}, i8* [[BUFFER_PTR]])
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type* }* [[BUFFER]] to i8*
 // CHECK:   call void @llvm.lifetime.end
 // CHECK:   ret %swift.type* [[METADATA]]
@@ -128,7 +128,7 @@
 // CHECK:   [[BUFFER_ELT:%.*]] = getelementptr inbounds { %swift.type*, %swift.type* }, { %swift.type*, %swift.type* }* [[BUFFER]], i32 0, i32 1
 // CHECK:   store %swift.type* %1, %swift.type** [[BUFFER_ELT]]
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type*, %swift.type* }* [[BUFFER]] to i8*
-// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_rt_swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes7TwoArgsVMP" {{.*}}, i8* [[BUFFER_PTR]])
+// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes7TwoArgsVMP" {{.*}}, i8* [[BUFFER_PTR]])
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type*, %swift.type* }* [[BUFFER]] to i8*
 // CHECK:   call void @llvm.lifetime.end
 // CHECK:   ret %swift.type* [[METADATA]]
@@ -148,7 +148,7 @@
 // CHECK:   [[BUFFER_ELT:%.*]] = getelementptr inbounds { %swift.type*, %swift.type*, %swift.type* }, { %swift.type*, %swift.type*, %swift.type* }* [[BUFFER]], i32 0, i32 2
 // CHECK:   store %swift.type* %2, %swift.type** [[BUFFER_ELT]]
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type*, %swift.type*, %swift.type* }* [[BUFFER]] to i8*
-// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_rt_swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes9ThreeArgsVMP" {{.*}}, i8* [[BUFFER_PTR]])
+// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes9ThreeArgsVMP" {{.*}}, i8* [[BUFFER_PTR]])
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type*, %swift.type*, %swift.type* }* [[BUFFER]] to i8*
 // CHECK:   call void @llvm.lifetime.end
 // CHECK:   ret %swift.type* [[METADATA]]
@@ -170,7 +170,7 @@
 
 // CHECK: define hidden %swift.type* @"$S17generic_metatypes8FiveArgsVMa"(%swift.type*, %swift.type*, %swift.type*, i8**) [[NOUNWIND_OPT:#[0-9]+]]
 // CHECK-NOT: alloc
-// CHECK:   call %swift.type* @swift_rt_swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes8FiveArgsVMP" {{.*}}, i8*
+// CHECK:   call %swift.type* @swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes8FiveArgsVMP" {{.*}}, i8*
 // CHECK-NOT: call void @llvm.lifetime.end
 // CHECK:   ret %swift.type*
 
diff --git a/test/IRGen/generic_metatypes_arm.swift b/test/IRGen/generic_metatypes_arm.swift
index 1f2d6d0..4812e9c 100644
--- a/test/IRGen/generic_metatypes_arm.swift
+++ b/test/IRGen/generic_metatypes_arm.swift
@@ -108,7 +108,7 @@
 // CHECK:   [[BUFFER_ELT:%.*]] = getelementptr inbounds { %swift.type* }, { %swift.type* }* [[BUFFER]], i32 0, i32 0
 // CHECK:   store %swift.type* %0, %swift.type** [[BUFFER_ELT]]
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type* }* [[BUFFER]] to i8*
-// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_rt_swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes6OneArgVMP" {{.*}}, i8* [[BUFFER_PTR]])
+// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes6OneArgVMP" {{.*}}, i8* [[BUFFER_PTR]])
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type* }* [[BUFFER]] to i8*
 // CHECK:   call void @llvm.lifetime.end
 // CHECK:   ret %swift.type* [[METADATA]]
@@ -126,7 +126,7 @@
 // CHECK:   [[BUFFER_ELT:%.*]] = getelementptr inbounds { %swift.type*, %swift.type* }, { %swift.type*, %swift.type* }* [[BUFFER]], i32 0, i32 1
 // CHECK:   store %swift.type* %1, %swift.type** [[BUFFER_ELT]]
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type*, %swift.type* }* [[BUFFER]] to i8*
-// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_rt_swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes7TwoArgsVMP" {{.*}}, i8* [[BUFFER_PTR]])
+// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes7TwoArgsVMP" {{.*}}, i8* [[BUFFER_PTR]])
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type*, %swift.type* }* [[BUFFER]] to i8*
 // CHECK:   call void @llvm.lifetime.end
 // CHECK:   ret %swift.type* [[METADATA]]
@@ -146,7 +146,7 @@
 // CHECK:   [[BUFFER_ELT:%.*]] = getelementptr inbounds { %swift.type*, %swift.type*, %swift.type* }, { %swift.type*, %swift.type*, %swift.type* }* [[BUFFER]], i32 0, i32 2
 // CHECK:   store %swift.type* %2, %swift.type** [[BUFFER_ELT]]
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type*, %swift.type*, %swift.type* }* [[BUFFER]] to i8*
-// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_rt_swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes9ThreeArgsVMP" {{.*}}, i8* [[BUFFER_PTR]])
+// CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes9ThreeArgsVMP" {{.*}}, i8* [[BUFFER_PTR]])
 // CHECK:   [[BUFFER_PTR:%.*]] = bitcast { %swift.type*, %swift.type*, %swift.type* }* [[BUFFER]] to i8*
 // CHECK:   call void @llvm.lifetime.end
 // CHECK:   ret %swift.type* [[METADATA]]
@@ -157,7 +157,7 @@
 
 // CHECK-LABEL: define hidden %swift.type* @"$S17generic_metatypes8FourArgsVMa"(%swift.type*, %swift.type*, %swift.type*, i8**)
 // CHECK-NOT: alloc
-// CHECK:   call %swift.type* @swift_rt_swift_getGenericMetadata(
+// CHECK:   call %swift.type* @swift_getGenericMetadata(
 // CHECK-NOT: call void @llvm.lifetime.end
 // CHECK:   ret %swift.type*
 
@@ -167,7 +167,7 @@
 
 // CHECK-LABEL: define hidden %swift.type* @"$S17generic_metatypes8FiveArgsVMa"(%swift.type*, %swift.type*, %swift.type*, i8**)
 // CHECK-NOT: alloca
-// CHECK:   call %swift.type* @swift_rt_swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes8FiveArgsVMP" {{.*}}, i8*
+// CHECK:   call %swift.type* @swift_getGenericMetadata(%swift.type_pattern* {{.*}} @"$S17generic_metatypes8FiveArgsVMP" {{.*}}, i8*
 // CHECK-NOT:   call void @llvm.lifetime.end
 // CHECK:   ret %swift.type*
 
diff --git a/test/IRGen/generic_structs.sil b/test/IRGen/generic_structs.sil
index c83ce1a..a194afb 100644
--- a/test/IRGen/generic_structs.sil
+++ b/test/IRGen/generic_structs.sil
@@ -25,13 +25,13 @@
 // --       field count
 // CHECK-SAME:   i32 1,
 // --       field offset vector offset
-// CHECK-SAME:   i32 2,
+// CHECK-SAME:   i32 3,
 // --       field names
 // CHECK-SAME:   [3 x i8]* [[SINGLEDYNAMIC_FIELDS]]
 // --       kind 1 (struct)
 // CHECK-SAME:   i32 1
 // --       generic parameter vector offset
-// CHECK-SAME:   i32 3,
+// CHECK-SAME:   i32 2,
 // --       generic parameter count, primary count
 // CHECK-SAME:   i32 1, i32 1
 // --       nesting depth
@@ -50,7 +50,7 @@
 // -- address point
 // CHECK-SAME:   i64 1, {{.*}}* @"$S15generic_structs13SingleDynamicVMn"
 // -- field offset vector; generic parameter vector
-// CHECK-SAME:   i64 0, %swift.type* null }>
+// CHECK-SAME:   %swift.type* null, i64 0 }>
 
 // -- Nominal type descriptor for generic struct with protocol requirements
 //    FIXME: Strings should be unnamed_addr. rdar://problem/22674524
@@ -62,13 +62,13 @@
 // --       field count
 // CHECK-SAME: i32 2,
 // --       field offset vector offset
-// CHECK-SAME: i32 2,
+// CHECK-SAME: i32 6,
 // --       field names
 // CHECK-SAME: [5 x i8]* [[DYNAMICWITHREQUIREMENTS_FIELDS]]
 // --       kind 1 (struct)
 // CHECK-SAME: i32 1,
 // --       generic parameter vector offset
-// CHECK-SAME: i32 4,
+// CHECK-SAME: i32 2,
 // --       generic requirements count; generic arguments count
 // CHECK-SAME: i32 4, i32 2
 // --       nesting depth
@@ -81,7 +81,7 @@
 
 // CHECK: @"$S15generic_structs23DynamicWithRequirementsVMP" = internal global <{ {{.*}} }> <{
 // -- field offset vector; generic parameter vector
-// CHECK:   i64 0, i64 0, %swift.type* null, %swift.type* null, i8** null, i8** null }>
+// CHECK:   %swift.type* null, %swift.type* null, i8** null, i8** null, i64 0, i64 0 }>
 
 // -- Fixed-layout struct metadata contains fixed field offsets
 // CHECK: @"$S15generic_structs6IntishVMf" = internal constant <{ {{.*}} i64 }> <{
@@ -144,7 +144,7 @@
   %a = struct_element_addr %0 : $*ComplexDynamic<A, B>, #ComplexDynamic.a2
 
   // CHECK: [[METADATA:%.*]] = bitcast %swift.type* {{%.*}} to i64*
-  // CHECK: [[FIELD_OFFSET_VECTOR:%.*]] = getelementptr inbounds i64, i64* [[METADATA]], i64 2
+  // CHECK: [[FIELD_OFFSET_VECTOR:%.*]] = getelementptr inbounds i64, i64* [[METADATA]], i64 4
   // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i64, i64* [[FIELD_OFFSET_VECTOR]], i32 2
   // CHECK: [[FIELD_OFFSET:%.*]] = load i64, i64* [[FIELD_OFFSET_ADDR]], align 8
   // CHECK: [[BYTES:%.*]] = bitcast %T15generic_structs14ComplexDynamicV* %0 to i8*
@@ -153,7 +153,7 @@
   %b = struct_element_addr %0 : $*ComplexDynamic<A, B>, #ComplexDynamic.b
 
   // CHECK: [[METADATA:%.*]] = bitcast %swift.type* {{%.*}} to i64*
-  // CHECK: [[FIELD_OFFSET_VECTOR:%.*]] = getelementptr inbounds i64, i64* [[METADATA]], i64 2
+  // CHECK: [[FIELD_OFFSET_VECTOR:%.*]] = getelementptr inbounds i64, i64* [[METADATA]], i64 4
   // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i64, i64* [[FIELD_OFFSET_VECTOR]], i32 3
   // CHECK: [[FIELD_OFFSET:%.*]] = load i64, i64* [[FIELD_OFFSET_ADDR]], align 8
   // CHECK: [[BYTES:%.*]] = bitcast %T15generic_structs14ComplexDynamicV* %0 to i8*
@@ -163,7 +163,7 @@
   %c = struct_element_addr %5 : $*SingleDynamic<B>, #SingleDynamic.x
 
   // CHECK: [[METADATA:%.*]] = bitcast %swift.type* {{%.*}} to i64*
-  // CHECK: [[FIELD_OFFSET_VECTOR:%.*]] = getelementptr inbounds i64, i64* [[METADATA]], i64 2
+  // CHECK: [[FIELD_OFFSET_VECTOR:%.*]] = getelementptr inbounds i64, i64* [[METADATA]], i64 4
   // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i64, i64* [[FIELD_OFFSET_VECTOR]], i32 4
   // CHECK: [[FIELD_OFFSET:%.*]] = load i64, i64* [[FIELD_OFFSET_ADDR]], align 8
   // CHECK: [[BYTES:%.*]] = bitcast %T15generic_structs14ComplexDynamicV* %0 to i8*
@@ -214,12 +214,12 @@
 // CHECK:   [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericValueMetadata(%swift.type_pattern* %0, i8** %1)
 // CHECK:   [[SELF_ARRAY:%.*]] = bitcast %swift.type* [[METADATA]] to i8**
 //   Fill type argument.
-// CHECK:   [[T1:%.*]] = getelementptr inbounds i8*, i8** [[SELF_ARRAY]], i64 3
+// CHECK:   [[T1:%.*]] = getelementptr inbounds i8*, i8** [[SELF_ARRAY]], i64 2
 // CHECK:   [[T0:%.*]] = bitcast %swift.type* %T to i8*
 // CHECK:   store i8* [[T0]], i8** [[T1]], align 8
 //   Lay out fields.
 // CHECK:   [[T0:%.*]] = bitcast %swift.type* [[METADATA]] to i64*
-// CHECK:   [[T1:%.*]] = getelementptr inbounds i64, i64* [[T0]], i64 2
+// CHECK:   [[T1:%.*]] = getelementptr inbounds i64, i64* [[T0]], i64 3
 // CHECK:   [[T2:%.*]] = getelementptr inbounds i8**, i8*** [[TYPES:%.*]], i32 0
 // CHECK:   call void @swift_initStructMetadata(%swift.type* [[METADATA]], i64 0, i64 1, i8*** [[TYPES]], i64* [[T1]])
 // CHECK:   ret %swift.type* [[METADATA]]
diff --git a/test/IRGen/generic_structs.swift b/test/IRGen/generic_structs.swift
index ee29841..86963d9 100644
--- a/test/IRGen/generic_structs.swift
+++ b/test/IRGen/generic_structs.swift
@@ -41,7 +41,7 @@
 // CHECK-32-LABEL: define{{.*}} swiftcc void @"$S15generic_structs13GenericStructVACyxGycfC"
 // CHECK-32:  [[TYPE:%.*]] =  call %swift.type* @"$S15generic_structs13GenericStructVMa"(%swift.type* %T, i8** %T.Proto)
 // CHECK-32:  [[PTR:%.*]] = bitcast %swift.type* [[TYPE]] to i32*
-// CHECK-32:  [[FIELDOFFSETS:%.*]] = getelementptr inbounds i32, i32* [[PTR]], i32 2
+// CHECK-32:  [[FIELDOFFSETS:%.*]] = getelementptr inbounds i32, i32* [[PTR]], i32 4
 // CHECK-32:  [[FIELDOFFSET:%.*]] = getelementptr inbounds i32, i32* [[FIELDOFFSETS]], i32 2
 // CHECK-32:  [[OFFSET:%.*]] = load i32, i32* [[FIELDOFFSET]]
 // CHECK-32:  [[ADDROFOPT:%.*]] = getelementptr inbounds i8, i8* {{.*}}, i32 [[OFFSET]]
@@ -51,7 +51,7 @@
 // CHECK-64-LABEL: define{{.*}} swiftcc void @"$S15generic_structs13GenericStructVACyxGycfC"
 // CHECK-64:  [[TYPE:%.*]] =  call %swift.type* @"$S15generic_structs13GenericStructVMa"(%swift.type* %T, i8** %T.Proto)
 // CHECK-64:  [[PTR:%.*]] = bitcast %swift.type* [[TYPE]] to i64*
-// CHECK-64:  [[FIELDOFFSETS:%.*]] = getelementptr inbounds i64, i64* [[PTR]], i64 2
+// CHECK-64:  [[FIELDOFFSETS:%.*]] = getelementptr inbounds i64, i64* [[PTR]], i64 4
 // CHECK-64:  [[FIELDOFFSET:%.*]] = getelementptr inbounds i64, i64* [[FIELDOFFSETS]], i32 2
 // CHECK-64:  [[OFFSET:%.*]] = load i64, i64* [[FIELDOFFSET]]
 // CHECK-64:  [[ADDROFOPT:%.*]] = getelementptr inbounds i8, i8* {{.*}}, i64 [[OFFSET]]
diff --git a/test/IRGen/generic_tuples.swift b/test/IRGen/generic_tuples.swift
index dbd12c0..8b0cb23 100644
--- a/test/IRGen/generic_tuples.swift
+++ b/test/IRGen/generic_tuples.swift
@@ -49,7 +49,7 @@
 // CHECK-LABEL: define hidden swiftcc { %T14generic_tuples1CC*, %T14generic_tuples1CC* } @"$S14generic_tuples4dupCyx_xtxAA1CCRbzlF"(%T14generic_tuples1CC*, %swift.type* %T)
 // CHECK-NEXT: entry:
 // CHECK:      [[REF:%.*]] = bitcast %T14generic_tuples1CC* %0 to %swift.refcounted*
-// CHECK-NEXT: call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned [[REF]])
+// CHECK-NEXT: call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[REF]])
 // CHECK-NEXT: [[TUP1:%.*]] = insertvalue { %T14generic_tuples1CC*, %T14generic_tuples1CC* } undef, %T14generic_tuples1CC* %0, 0
 // CHECK-NEXT: [[TUP2:%.*]] = insertvalue { %T14generic_tuples1CC*, %T14generic_tuples1CC* } [[TUP1:%.*]], %T14generic_tuples1CC* %0, 1
 // CHECK-NEXT: ret { %T14generic_tuples1CC*, %T14generic_tuples1CC* } [[TUP2]]
@@ -58,20 +58,20 @@
 // CHECK-LABEL: define hidden swiftcc void @"$S14generic_tuples8callDupCyyAA1CCF"(%T14generic_tuples1CC*)
 // CHECK-NEXT: entry:
 // CHECK-NEXT: [[REF:%.*]] = bitcast %T14generic_tuples1CC* %0 to %swift.refcounted*
-// CHECK-NEXT: call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned [[REF]])
+// CHECK-NEXT: call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[REF]])
 // CHECK-NEXT: [[METATYPE:%.*]] = call %swift.type* @"$S14generic_tuples1CCMa"()
 // CHECK-NEXT: [[TUPLE:%.*]] = call swiftcc { %T14generic_tuples1CC*, %T14generic_tuples1CC* } @"$S14generic_tuples4dupCyx_xtxAA1CCRbzlF"(%T14generic_tuples1CC* %0, %swift.type* [[METATYPE]])
 // CHECK-NEXT: [[LEFT:%.*]] = extractvalue { %T14generic_tuples1CC*, %T14generic_tuples1CC* } [[TUPLE]], 0
 // CHECK-NEXT: [[RIGHT:%.*]] = extractvalue { %T14generic_tuples1CC*, %T14generic_tuples1CC* } [[TUPLE]], 1
 // CHECK-NEXT: [[LEFT_CAST:%.*]] = bitcast %T14generic_tuples1CC* [[LEFT]] to %swift.refcounted*
-// CHECK-NEXT: call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned [[LEFT_CAST]]
+// CHECK-NEXT: call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[LEFT_CAST]]
 // CHECK-NEXT: [[RIGHT_CAST:%.*]] = bitcast %T14generic_tuples1CC* [[RIGHT]] to %swift.refcounted*
-// CHECK-NEXT: call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned [[RIGHT_CAST]]
-// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14generic_tuples1CC*)*)(%T14generic_tuples1CC* [[LEFT]])
-// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14generic_tuples1CC*)*)(%T14generic_tuples1CC* [[RIGHT]])
-// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14generic_tuples1CC*)*)(%T14generic_tuples1CC* [[RIGHT]])
-// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14generic_tuples1CC*)*)(%T14generic_tuples1CC* [[LEFT]])
-// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14generic_tuples1CC*)*)(%T14generic_tuples1CC* %0)
+// CHECK-NEXT: call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[RIGHT_CAST]]
+// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14generic_tuples1CC*)*)(%T14generic_tuples1CC* [[LEFT]])
+// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14generic_tuples1CC*)*)(%T14generic_tuples1CC* [[RIGHT]])
+// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14generic_tuples1CC*)*)(%T14generic_tuples1CC* [[RIGHT]])
+// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14generic_tuples1CC*)*)(%T14generic_tuples1CC* [[LEFT]])
+// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14generic_tuples1CC*)*)(%T14generic_tuples1CC* %0)
 // CHECK-NEXT: ret void
 
 // CHECK: define hidden swiftcc i64 @"$S14generic_tuples4lumpySi_xxtxlF"(%swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type* %T)
diff --git a/test/IRGen/generic_types.swift b/test/IRGen/generic_types.swift
index f071062..b9d2540 100644
--- a/test/IRGen/generic_types.swift
+++ b/test/IRGen/generic_types.swift
@@ -115,7 +115,7 @@
 // CHECK:   %T = load %swift.type*, %swift.type** [[T0]],
 // CHECK-native: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_pattern* %0, i8** %1, %objc_class* null, i64 7)
 // CHECK-objc:   [[T0:%.*]] = load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$__TtCs12_SwiftObject"
-// CHECK-objc:   [[SUPER:%.*]] = call %objc_class* @swift_rt_swift_getInitializedObjCClass(%objc_class* [[T0]])
+// CHECK-objc:   [[SUPER:%.*]] = call %objc_class* @swift_getInitializedObjCClass(%objc_class* [[T0]])
 // CHECK-objc:   [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_pattern* %0, i8** %1, %objc_class* [[SUPER]], i64 7)
 // CHECK:   [[SELF_ARRAY:%.*]] = bitcast %swift.type* [[METADATA]] to i8**
 // CHECK:   [[T1:%.*]] = getelementptr inbounds i8*, i8** [[SELF_ARRAY]], i64 10
@@ -129,7 +129,7 @@
 // CHECK:   %T = load %swift.type*, %swift.type** [[T0]],
 // CHECK-native: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_pattern* %0, i8** %1, %objc_class* null, i64 6)
 // CHECK-objc:   [[T0:%.*]] = load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$__TtCs12_SwiftObject"
-// CHECK-objc:   [[SUPER:%.*]] = call %objc_class* @swift_rt_swift_getInitializedObjCClass(%objc_class* [[T0]])
+// CHECK-objc:   [[SUPER:%.*]] = call %objc_class* @swift_getInitializedObjCClass(%objc_class* [[T0]])
 // CHECK-objc:   [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_pattern* %0, i8** %1, %objc_class* [[SUPER]], i64 6)
 // CHECK:   [[SELF_ARRAY:%.*]] = bitcast %swift.type* [[METADATA]] to i8**
 // CHECK:   [[T1:%.*]] = getelementptr inbounds i8*, i8** [[SELF_ARRAY]], i64 10
diff --git a/test/IRGen/global_resilience.sil b/test/IRGen/global_resilience.sil
index 7d4635d..d66c1f0 100644
--- a/test/IRGen/global_resilience.sil
+++ b/test/IRGen/global_resilience.sil
@@ -73,7 +73,7 @@
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @testLargeGlobal()
 sil @testLargeGlobal : $@convention(thin) () -> () {
 bb0:
-  // CHECK: [[ALLOC:%.*]] = call noalias i8* @swift_rt_swift_slowAlloc([[INT]] 32, [[INT]] 7)
+  // CHECK: [[ALLOC:%.*]] = call noalias i8* @swift_slowAlloc([[INT]] 32, [[INT]] 7)
   // CHECK: store i8* [[ALLOC]], i8** bitcast ([[BUFFER]]* @largeGlobal to i8**), align 1
   alloc_global @largeGlobal
 
@@ -139,7 +139,7 @@
 // CHECK:   [[SIZEWITNESS:%.*]] = load i8*, i8** [[SIZE_ADDR]]
 // CHECK:   [[SIZE:%.*]] = ptrtoint i8* [[SIZEWITNESS]]
 // CHECK:   [[ALIGN:%.*]] = and {{.*}} [[FLAGS]], 65535
-// CHECK:   [[PTR:%.*]] = call noalias i8* @swift_rt_swift_slowAlloc({{.*}} [[SIZE]], {{.*}} [[ALIGN]])
+// CHECK:   [[PTR:%.*]] = call noalias i8* @swift_slowAlloc({{.*}} [[SIZE]], {{.*}} [[ALIGN]])
 // CHECK:   [[ADDR:%.*]] = bitcast %swift.opaque* %1 to i8**
 // CHECK:   store i8* [[PTR]], i8** [[ADDR]]
 // CHECK:   [[OUTLINEADDR:%.*]] = bitcast i8* [[PTR]] to %swift.opaque*
diff --git a/test/IRGen/indirect_argument.sil b/test/IRGen/indirect_argument.sil
index 595c5aa..6a6e8f9 100644
--- a/test/IRGen/indirect_argument.sil
+++ b/test/IRGen/indirect_argument.sil
@@ -64,7 +64,7 @@
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @huge_partial_application(%T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}), %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}))
 // CHECK-NOT:     alloca
-// CHECK:         [[CLOSURE:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject
+// CHECK:         [[CLOSURE:%.*]] = call noalias %swift.refcounted* @swift_allocObject
 // CHECK:         bitcast %swift.refcounted* [[CLOSURE]] to <{ %swift.refcounted, %T17indirect_argument4HugeV }>*
 // CHECK:         call swiftcc void @"$S24huge_partial_applicationTA"(%T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %0, %swift.refcounted* swiftself [[CLOSURE]])
 // CHECK:       define internal swiftcc void @"$S24huge_partial_applicationTA"(%T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}), %swift.refcounted* swiftself)
@@ -81,7 +81,7 @@
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @huge_partial_application_stret(%T17indirect_argument4HugeV* noalias nocapture sret, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}), %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}))
 // CHECK:         [[TMP_RET:%.*]] = alloca
-// CHECK:         [[CLOSURE:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject
+// CHECK:         [[CLOSURE:%.*]] = call noalias %swift.refcounted* @swift_allocObject
 // CHECK:         bitcast %swift.refcounted* [[CLOSURE]] to <{ %swift.refcounted, %T17indirect_argument4HugeV }>*
 // CHECK:         call swiftcc void @"$S30huge_partial_application_stretTA"(%T17indirect_argument4HugeV* noalias nocapture sret [[TMP_RET]], %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %1, %swift.refcounted* swiftself [[CLOSURE]])
 // CHECK:       define internal swiftcc void @"$S30huge_partial_application_stretTA"(%T17indirect_argument4HugeV* noalias nocapture sret, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}), %swift.refcounted* swiftself)
diff --git a/test/IRGen/keypaths.sil b/test/IRGen/keypaths.sil
index 6acd9a1..e83f7e3 100644
--- a/test/IRGen/keypaths.sil
+++ b/test/IRGen/keypaths.sil
@@ -200,8 +200,8 @@
 // CHECK-64-SAME: [4 x i8] zeroinitializer,
 //             -- struct with runtime-resolved offset
 // CHECK-SAME: <i32 0x1ffffffe>,
-// CHECK-32-SAME: i32 8 }>
-// CHECK-64-SAME: i32 16 }>
+// CHECK-32-SAME: i32 16 }>
+// CHECK-64-SAME: i32 32 }>
 
 // -- %j: Gen<A>.y
 // CHECK: [[KP_J:@keypath.*]] = private global <{ {{.*}} }> <{
@@ -213,8 +213,8 @@
 // CHECK-64-SAME: [4 x i8] zeroinitializer,
 //             -- struct with runtime-resolved offset
 // CHECK-SAME: <i32 0x1ffffffe>,
-// CHECK-32-SAME: i32 12 }>
-// CHECK-64-SAME: i32 24 }>
+// CHECK-32-SAME: i32 20 }>
+// CHECK-64-SAME: i32 40 }>
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @stored_property_fixed_offsets()
 sil @stored_property_fixed_offsets : $@convention(thin) () -> () {
diff --git a/test/IRGen/metadata_dominance.swift b/test/IRGen/metadata_dominance.swift
index dbb6037..b66e1e0 100644
--- a/test/IRGen/metadata_dominance.swift
+++ b/test/IRGen/metadata_dominance.swift
@@ -80,5 +80,5 @@
 // conformance metadata_dominance.Foo : metadata_dominance.P should not use the Self type
 // as the type of the object to be created. It should dynamically obtain the type.
 // CHECK-OPT-LABEL: define internal swiftcc %T18metadata_dominance3FooC* @"$S18metadata_dominance3FooCAA1PA2aDP04makeC0ACyFTW"
-// CHECK-OPT-NOT: tail call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %Self
+// CHECK-OPT-NOT: tail call noalias %swift.refcounted* @swift_allocObject(%swift.type* %Self
 
diff --git a/test/IRGen/mixed_mode_class_with_unimportable_fields.sil b/test/IRGen/mixed_mode_class_with_unimportable_fields.sil
index f75809f..0d6d826 100644
--- a/test/IRGen/mixed_mode_class_with_unimportable_fields.sil
+++ b/test/IRGen/mixed_mode_class_with_unimportable_fields.sil
@@ -33,13 +33,13 @@
   // CHECK-32: [[SIZE:%.*]] = load i32
   // CHECK: [[ALIGN16:%.*]] = load i16
   // CHECK: [[ALIGN:%.*]] = zext i16 [[ALIGN16]] to [[WORD:i32|i64]]
-  // CHECK: call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[METADATA]], [[WORD]] [[SIZE]], [[WORD]] [[ALIGN]])
+  // CHECK: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] [[SIZE]], [[WORD]] [[ALIGN]])
   %x = alloc_ref $ButtHolder
   // CHECK: [[METADATA:%.*]] = call %swift.type* @"$S4main13SubButtHolderCMa"()
-  // CHECK: call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[METADATA]], [[WORD]] %{{.*}}, [[WORD]] %{{.*}})
+  // CHECK: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] %{{.*}}, [[WORD]] %{{.*}})
   %y = alloc_ref $SubButtHolder
   // CHECK: [[METADATA:%.*]] = call %swift.type* @"$S4main03SubB10ButtHolderCMa"()
-  // CHECK: call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[METADATA]], [[WORD]] %{{.*}}, [[WORD]] %{{.*}})
+  // CHECK: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] %{{.*}}, [[WORD]] %{{.*}})
   %z = alloc_ref $SubSubButtHolder
   return %x : $ButtHolder
 }
diff --git a/test/IRGen/nonatomic_reference_counting.sil b/test/IRGen/nonatomic_reference_counting.sil
index cb8a056..a3238c5 100644
--- a/test/IRGen/nonatomic_reference_counting.sil
+++ b/test/IRGen/nonatomic_reference_counting.sil
@@ -33,8 +33,8 @@
 sil @doSomething : $@convention(thin) () -> ()
 
 // CHECK-LABEL: define {{.*}}@test_strong_nonatomic_rr
-// CHECK: call {{.*}}@swift_rt_swift_nonatomic_retain
-// CHECK: call {{.*}}@swift_rt_swift_nonatomic_release
+// CHECK: call {{.*}}@swift_nonatomic_retain
+// CHECK: call {{.*}}@swift_nonatomic_release
 // CHECK: ret
 sil @test_strong_nonatomic_rr: $@convention(thin) () -> @owned C {
 bb0:
@@ -47,8 +47,8 @@
 }
 
 // CHECK-LABEL: define {{.*}}@test_unknown_nonatomic_rr
-// CHECK: call {{.*}}@{{(swift_nonatomic_unknownRetain|swift_rt_swift_nonatomic_retain)}}
-// CHECK: call {{.*}}@{{(swift_nonatomic_unknownRelease|swift_rt_swift_nonatomic_release)}}
+// CHECK: call {{.*}}@{{(swift_nonatomic_unknownRetain|swift_nonatomic_retain)}}
+// CHECK: call {{.*}}@{{(swift_nonatomic_unknownRelease|swift_nonatomic_release)}}
 // CHECK: ret
 sil @test_unknown_nonatomic_rr: $@convention(thin) <T where T : P> (@owned T) -> () {
 bb0(%0 : $T):
@@ -61,8 +61,8 @@
 }
 
 // CHECK-LABEL: define {{.*}}@test_strong_nonatomic_rr_n
-// CHECK: call {{.*}}@swift_rt_swift_nonatomic_retain_n
-// CHECK: call {{.*}}@swift_rt_swift_nonatomic_release_n
+// CHECK: call {{.*}}@swift_nonatomic_retain_n
+// CHECK: call {{.*}}@swift_nonatomic_release_n
 // CHECK: ret
 sil @test_strong_nonatomic_rr_n: $@convention(thin) () -> @owned C {
 bb0:
@@ -77,8 +77,8 @@
 }
 
 // CHECK-LABEL: define {{.*}}@test_strong_mixed_rr_n
-// CHECK: call {{.*}}@swift_rt_swift_retain_n
-// CHECK: call {{.*}}@swift_rt_swift_release_n
+// CHECK: call {{.*}}@swift_retain_n
+// CHECK: call {{.*}}@swift_release_n
 // CHECK: ret
 sil @test_strong_mixed_rr_n: $@convention(thin) () -> @owned C {
 bb0:
@@ -93,8 +93,8 @@
 }
 
 // CHECK-LABEL: define {{.*}}@test_unknown_nonatomic_rr_n
-// CHECK: call {{.*}}@{{(swift_nonatomic_unknownRetain_n|swift_rt_swift_nonatomic_retain_n)}}
-// CHECK: call {{.*}}@{{(swift_nonatomic_unknownRelease_n|swift_rt_swift_nonatomic_release_n)}}
+// CHECK: call {{.*}}@{{(swift_nonatomic_unknownRetain_n|swift_nonatomic_retain_n)}}
+// CHECK: call {{.*}}@{{(swift_nonatomic_unknownRelease_n|swift_nonatomic_release_n)}}
 // CHECK: ret
 sil @test_unknown_nonatomic_rr_n: $@convention(thin) <T where T : P> (@owned T) -> () {
 bb0(%0 : $T):
@@ -109,8 +109,8 @@
 }
 
 // CHECK-LABEL: define {{.*}}@test_unknown_mixed_rr_n
-// CHECK: call {{.*}}@{{(swift_unknownRetain_n|swift_rt_swift_retain_n)}}
-// CHECK: call {{.*}}@{{(swift_unknownRelease_n|swift_rt_swift_release_n)}}
+// CHECK: call {{.*}}@{{(swift_unknownRetain_n|swift_retain_n)}}
+// CHECK: call {{.*}}@{{(swift_unknownRelease_n|swift_release_n)}}
 // CHECK: ret
 sil @test_unknown_mixed_rr_n: $@convention(thin) <T where T : P> (@owned T) -> () {
 bb0(%0 : $T):
@@ -196,8 +196,8 @@
 }
 
 // CHECK-LABEL: define {{.*}}@test_nonatomic_pin_unpin
-// CHECK: call {{.*}}@swift_rt_swift_nonatomic_tryPin
-// CHECK: call {{.*}}@swift_rt_swift_nonatomic_unpin
+// CHECK: call {{.*}}@swift_nonatomic_tryPin
+// CHECK: call {{.*}}@swift_nonatomic_unpin
 // CHECK: ret
 sil @test_nonatomic_pin_unpin: $@convention(thin) () -> () {
 bb0:
diff --git a/test/IRGen/objc.swift b/test/IRGen/objc.swift
index 1d955a1..ec4d58a 100644
--- a/test/IRGen/objc.swift
+++ b/test/IRGen/objc.swift
@@ -39,7 +39,7 @@
 class MyBlammo : Blammo {
   func foo() {}
 // CHECK:  define hidden swiftcc void @"$S4objc8MyBlammoC3fooyyF"([[MYBLAMMO]]* swiftself) {{.*}} {
-// CHECK:    call {{.*}} @swift_rt_swift_release
+// CHECK:    call {{.*}} @swift_release
 // CHECK:    ret void
 }
 
@@ -87,7 +87,7 @@
 
 func test1(_ cell: Blammo) {}
 // CHECK:  define hidden swiftcc void @"$S4objc5test1{{[_0-9a-zA-Z]*}}F"([[BLAMMO]]*) {{.*}} {
-// CHECK:    call {{.*}} @swift_rt_swift_release
+// CHECK:    call {{.*}} @swift_release
 // CHECK:    ret void
 
 
diff --git a/test/IRGen/objc_block_storage.sil b/test/IRGen/objc_block_storage.sil
index 256752f..40861f6 100644
--- a/test/IRGen/objc_block_storage.sil
+++ b/test/IRGen/objc_block_storage.sil
@@ -134,7 +134,7 @@
 // CHECK-NEXT:    %2 = getelementptr inbounds { %objc_block, %swift.refcounted* }, { %objc_block, %swift.refcounted* }* %0, i32 0, i32 1
 // CHECK-NEXT:    %3 = getelementptr inbounds { %objc_block, %swift.refcounted* }, { %objc_block, %swift.refcounted* }* %1, i32 0, i32 1
 // CHECK-NEXT:    %4 = load %swift.refcounted*, %swift.refcounted** %3, align 8
-// CHECK-NEXT:    call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned %4) {{#[0-9]+}}
+// CHECK-NEXT:    call %swift.refcounted* @swift_retain(%swift.refcounted* returned %4) {{#[0-9]+}}
 // CHECK-NEXT:    store %swift.refcounted* %4, %swift.refcounted** %2, align 8
 // CHECK-NEXT:    ret void
 
@@ -142,7 +142,7 @@
 // CHECK-NEXT:  entry:
 // CHECK-NEXT:    %1 = getelementptr inbounds { %objc_block, %swift.refcounted* }, { %objc_block, %swift.refcounted* }* %0, i32 0, i32 1
 // CHECK-NEXT:    %toDestroy = load %swift.refcounted*, %swift.refcounted** %1, align 8
-// CHECK-NEXT:    call void @swift_rt_swift_release(%swift.refcounted* %toDestroy) {{#[0-9]+}}
+// CHECK-NEXT:    call void @swift_release(%swift.refcounted* %toDestroy) {{#[0-9]+}}
 // CHECK-NEXT:    ret void
 
 sil public_external @invoke_nontrivial : $@convention(c) (@inout_aliasable @block_storage Builtin.NativeObject) -> ()
diff --git a/test/IRGen/objc_casts.sil b/test/IRGen/objc_casts.sil
index 20d38af..275a303 100644
--- a/test/IRGen/objc_casts.sil
+++ b/test/IRGen/objc_casts.sil
@@ -29,7 +29,7 @@
 //   TODO: is this really necessary? also, this really shouldn't use a direct reference
 // CHECK-NEXT:  [[T1:%.*]] = bitcast %objc_object* [[T0]] to i8*
 // CHECK-NEXT:  [[T2a:%.*]] = load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$_Foo"
-// CHECK-NEXT:  [[T2:%.*]] = call %objc_class* @swift_rt_swift_getInitializedObjCClass(%objc_class* [[T2a]])
+// CHECK-NEXT:  [[T2:%.*]] = call %objc_class* @swift_getInitializedObjCClass(%objc_class* [[T2a]])
 // CHECK-NEXT:  [[T3:%.*]] = bitcast %objc_class* [[T2]] to i8*
 // CHECK-NEXT:  call i8* @swift_dynamicCastObjCClassUnconditional(i8* [[T1]], i8* [[T3]])
 sil hidden @metatype_to_objc_class : $@convention(thin) <T> (@thick T.Type) -> () {
@@ -45,7 +45,7 @@
 //   TODO: is this really necessary? also, this really shouldn't use a direct reference
 // CHECK-NEXT:  [[T1:%.*]] = bitcast %objc_object* [[T0]] to i8*
 // CHECK-NEXT:  [[T2a:%.*]] = load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$_Foo"
-// CHECK-NEXT:  [[T2:%.*]] = call %objc_class* @swift_rt_swift_getInitializedObjCClass(%objc_class* [[T2a]])
+// CHECK-NEXT:  [[T2:%.*]] = call %objc_class* @swift_getInitializedObjCClass(%objc_class* [[T2a]])
 // CHECK-NEXT:  [[T3:%.*]] = bitcast %objc_class* [[T2]] to i8*
 // CHECK-NEXT:  call i8* @swift_dynamicCastObjCClassUnconditional(i8* [[T1]], i8* [[T3]])
 sil hidden @opt_metatype_to_objc_class : $@convention(thin) <T> (Optional<@thick T.Type>) -> () {
diff --git a/test/IRGen/objc_class_export.swift b/test/IRGen/objc_class_export.swift
index 3c0ae44..93b7b19 100644
--- a/test/IRGen/objc_class_export.swift
+++ b/test/IRGen/objc_class_export.swift
@@ -5,15 +5,15 @@
 // REQUIRES: CPU=x86_64
 // REQUIRES: objc_interop
 
-// CHECK: %swift.refcounted = type
-// CHECK: [[HOOZIT:%T17objc_class_export6HoozitC]] = type <{ [[REF:%swift.refcounted]] }>
-// CHECK: [[FOO:%T17objc_class_export3FooC]] = type <{ [[REF]], %TSi }>
-// CHECK: [[INT:%TSi]] = type <{ i64 }>
-// CHECK: [[DOUBLE:%TSd]] = type <{ double }>
-// CHECK: [[NSRECT:%TSo6NSRectV]] = type <{ %TSo7NSPointV, %TSo6NSSizeV }>
-// CHECK: [[NSPOINT:%TSo7NSPointV]] = type <{ %TSd, %TSd }>
-// CHECK: [[NSSIZE:%TSo6NSSizeV]] = type <{ %TSd, %TSd }>
-// CHECK: [[OBJC:%objc_object]] = type opaque
+// CHECK-DAG: %swift.refcounted = type
+// CHECK-DAG: [[HOOZIT:%T17objc_class_export6HoozitC]] = type <{ [[REF:%swift.refcounted]] }>
+// CHECK-DAG: [[FOO:%T17objc_class_export3FooC]] = type <{ [[REF]], %TSi }>
+// CHECK-DAG: [[INT:%TSi]] = type <{ i64 }>
+// CHECK-DAG: [[DOUBLE:%TSd]] = type <{ double }>
+// CHECK-DAG: [[NSRECT:%TSo6NSRectV]] = type <{ %TSo7NSPointV, %TSo6NSSizeV }>
+// CHECK-DAG: [[NSPOINT:%TSo7NSPointV]] = type <{ %TSd, %TSd }>
+// CHECK-DAG: [[NSSIZE:%TSo6NSSizeV]] = type <{ %TSd, %TSd }>
+// CHECK-DAG: [[OBJC:%objc_object]] = type opaque
 
 // CHECK: @"OBJC_METACLASS_$__TtC17objc_class_export3Foo" = hidden global %objc_class {
 // CHECK:   %objc_class* @"OBJC_METACLASS_$__TtCs12_SwiftObject",
diff --git a/test/IRGen/objc_dealloc.sil b/test/IRGen/objc_dealloc.sil
index b8156bf..f920ce5 100644
--- a/test/IRGen/objc_dealloc.sil
+++ b/test/IRGen/objc_dealloc.sil
@@ -91,7 +91,7 @@
   // CHECK-NEXT: [[IVAR_ADDR:%[a-zA-Z0-9]+]] = getelementptr inbounds i8, i8* {{.*}}, i64 [[XOFFSET]]
   // CHECK-NEXT: [[XADDR:%[.a-zA-Z0-9]+]] = bitcast i8* [[IVAR_ADDR]] to %T12objc_dealloc1XC**
   // CHECK-NEXT: [[X:%[a-zA-Z0-9]+]] = load %T12objc_dealloc1XC*, %T12objc_dealloc1XC** [[XADDR]], align 8
-  // CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T12objc_dealloc1XC*)*)(%T12objc_dealloc1XC* [[X]])
+  // CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T12objc_dealloc1XC*)*)(%T12objc_dealloc1XC* [[X]])
   %3 = begin_borrow %0 : $SwiftGizmo
   %4 = ref_element_addr %3 : $SwiftGizmo, #SwiftGizmo.x      // user: %4
   destroy_addr %4 : $*X                           // id: %4
diff --git a/test/IRGen/objc_generic_class_metadata.sil b/test/IRGen/objc_generic_class_metadata.sil
index 3409af7..2f4a3b3 100644
--- a/test/IRGen/objc_generic_class_metadata.sil
+++ b/test/IRGen/objc_generic_class_metadata.sil
@@ -39,7 +39,7 @@
   apply %z<GenericClass<NSObject>>(%b) : $@convention(thin) <T> (@thick T.Type) -> ()
 
   // CHECK: [[T0:%.*]] = load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$_GenericClass",
-  // CHECK: [[OBJC_CLASS:%.*]] = call %objc_class* @swift_rt_swift_getInitializedObjCClass(%objc_class* [[T0]])
+  // CHECK: [[OBJC_CLASS:%.*]] = call %objc_class* @swift_getInitializedObjCClass(%objc_class* [[T0]])
   // CHECK: call swiftcc void @objc_class_sink(%objc_class* [[OBJC_CLASS]], %swift.type* [[METADATA]])
   %c = metatype $@objc_metatype GenericClass<NSString>.Type
   apply %y<GenericClass<NSString>>(%c) : $@convention(thin) <T: AnyObject> (@objc_metatype T.Type) -> ()
@@ -78,7 +78,7 @@
 
 // CHECK-LABEL: define linkonce_odr hidden %swift.type* @"$SSo12GenericClassCMa"()
 // CHECK:         [[T0:%.*]] = load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$_GenericClass",
-// CHECK:         call %objc_class* @swift_rt_swift_getInitializedObjCClass(%objc_class* [[T0]])
+// CHECK:         call %objc_class* @swift_getInitializedObjCClass(%objc_class* [[T0]])
 
 // CHECK-LABEL: define linkonce_odr hidden %swift.type* @"$SSaySo12GenericClassC_SitGMa"()
 // CHECK:         [[TUPLE:%.*]] = call %swift.type* @"$SSo12GenericClassC_SitMa"()
diff --git a/test/IRGen/objc_types_as_member.sil b/test/IRGen/objc_types_as_member.sil
index 4dae304..af2471c 100644
--- a/test/IRGen/objc_types_as_member.sil
+++ b/test/IRGen/objc_types_as_member.sil
@@ -22,6 +22,6 @@
 }
 
 // CHECK-LABEL: define {{.*}}%swift.type* @"$SSo9OuterTypeCMa"()
-// CHECK:  [[TMP:%.*]] = call %objc_class* @swift_rt_swift_getInitializedObjCClass(
+// CHECK:  [[TMP:%.*]] = call %objc_class* @swift_getInitializedObjCClass(
 // CHECK:  call %swift.type* @swift_getObjCClassMetadata(%objc_class* [[TMP]])
 // CHECK:  ret
diff --git a/test/IRGen/partial_apply.sil b/test/IRGen/partial_apply.sil
index d5d4fcb..151ebf4 100644
--- a/test/IRGen/partial_apply.sil
+++ b/test/IRGen/partial_apply.sil
@@ -104,7 +104,7 @@
 // CHECK-NOT:     release
 // CHECK:         [[RESULT:%.*]] = call swiftcc i64 @indirect_guaranteed_captured_class_param(i64 %0, %T13partial_apply10SwiftClassC** noalias nocapture dereferenceable({{.*}}) [[X_CAST]]
 // CHECK-NOT:     retain
-// CHECK:         call void @swift_rt_swift_release(%swift.refcounted* %1)
+// CHECK:         call void @swift_release(%swift.refcounted* %1)
 // CHECK:         ret i64 [[RESULT]]
 
 sil @partial_apply_indirect_guaranteed_class_param : $@convention(thin) (@in SwiftClass) -> @callee_owned (Int) -> Int {
@@ -153,7 +153,7 @@
 sil public_external @guaranteed_captured_class_pair_param : $@convention(thin) (Int, @guaranteed SwiftClassPair) -> Int
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc { i8*, %swift.refcounted* } @partial_apply_guaranteed_class_pair_param(%T13partial_apply10SwiftClassC*, %T13partial_apply10SwiftClassC*)
-// CHECK:         [[CONTEXT_OBJ:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject
+// CHECK:         [[CONTEXT_OBJ:%.*]] = call noalias %swift.refcounted* @swift_allocObject
 // CHECK:         [[PAIR_ADDR:%.*]] = getelementptr
 // CHECK-NEXT:    [[X_ADDR:%.*]] = getelementptr inbounds %T13partial_apply14SwiftClassPairV, %T13partial_apply14SwiftClassPairV* [[PAIR_ADDR]], i32 0, i32 0
 // CHECK-NEXT:    store %T13partial_apply10SwiftClassC* %0, %T13partial_apply10SwiftClassC** [[X_ADDR]], align
@@ -184,7 +184,7 @@
 sil public_external @indirect_guaranteed_captured_class_pair_param : $@convention(thin) (Int, @in_guaranteed SwiftClassPair) -> Int
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc { i8*, %swift.refcounted* } @partial_apply_indirect_guaranteed_class_pair_param(%T13partial_apply14SwiftClassPairV* noalias nocapture dereferenceable({{.*}}))
-// CHECK:         [[CONTEXT_OBJ:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject
+// CHECK:         [[CONTEXT_OBJ:%.*]] = call noalias %swift.refcounted* @swift_allocObject
 // CHECK-NOT:     {{retain|release}}
 // CHECK:         [[T0:%.*]] = insertvalue {{.*}} [[PARTIAL_APPLY_FORWARDER:@"\$S[A-Za-z0-9_]+TA"]] {{.*}} [[CONTEXT_OBJ]]
 // CHECK:         ret {{.*}} [[T0]]
@@ -207,7 +207,7 @@
 sil public_external @indirect_consumed_captured_class_pair_param : $@convention(thin) (Int, @in SwiftClassPair) -> Int
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc { i8*, %swift.refcounted* } @partial_apply_indirect_consumed_class_pair_param(%T13partial_apply14SwiftClassPairV* noalias nocapture dereferenceable({{.*}}))
-// CHECK:         [[CONTEXT_OBJ:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject
+// CHECK:         [[CONTEXT_OBJ:%.*]] = call noalias %swift.refcounted* @swift_allocObject
 // CHECK-NOT:     {{retain|release}}
 // CHECK:         [[T0:%.*]] = insertvalue {{.*}} [[PARTIAL_APPLY_FORWARDER:@"\$S[A-Za-z0-9_]+TA"]] {{.*}} [[CONTEXT_OBJ]]
 // CHECK:         ret {{.*}} [[T0]]
@@ -267,7 +267,7 @@
 // CHECK-32:      [[TOTAL_ALIGN:%.*]] = or [[WORD]] [[TOTAL_ALIGN_1]], 3
 
 // -- Allocate using the total size and alignment.
-// CHECK:         [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}}, [[WORD]] [[TOTAL_SIZE]], [[WORD]] [[TOTAL_ALIGN]])
+// CHECK:         [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* {{.*}}, [[WORD]] [[TOTAL_SIZE]], [[WORD]] [[TOTAL_ALIGN]])
 // CHECK:         [[BOX_DATA:%.*]] = bitcast %swift.refcounted* [[BOX]]
 // -- metadata
 // CHECK:         getelementptr inbounds {{.*}} [[BOX_DATA]], i32 0, i32 1
@@ -387,7 +387,7 @@
   return %result : $()
 }
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @partial_apply_complex_generic_function(i64, %swift.type* %T, i8** %T.P2, i8** %T.Y.P2)
-// CHECK:      [[T0:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}}, i64 48, i64 7)
+// CHECK:      [[T0:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* {{.*}}, i64 48, i64 7)
 // CHECK-NEXT: [[T1:%.*]] = bitcast %swift.refcounted* [[T0]] to <{ %swift.refcounted, [24 x i8], %TSi }>*
 // CHECK-NEXT: [[T2:%.*]] = getelementptr inbounds <{ %swift.refcounted, [24 x i8], %TSi }>, <{ %swift.refcounted, [24 x i8], %TSi }>* [[T1]], i32 0, i32 1
 // CHECK-NEXT: [[BUFFER:%.*]] = bitcast [24 x i8]* [[T2]] to %swift.type**
diff --git a/test/IRGen/partial_apply_forwarder.sil b/test/IRGen/partial_apply_forwarder.sil
index 0a2982e..043bf64 100644
--- a/test/IRGen/partial_apply_forwarder.sil
+++ b/test/IRGen/partial_apply_forwarder.sil
@@ -80,7 +80,7 @@
 // CHECK: entry:
 // CHECK:   [[BPTYPE:%.*]] = call %swift.type* @"$S23partial_apply_forwarder12BaseProducerVMa"(%swift.type* %"\CF\84_0_1")
 // CHECK:   [[WEAKBOXTYPE:%.*]] = call %swift.type* @"$S23partial_apply_forwarder7WeakBoxCMa"(%swift.type* [[BPTYPE]])
-// CHECK:   [[OBJ:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[WEAKBOXTYPE]]
+// CHECK:   [[OBJ:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[WEAKBOXTYPE]]
 // CHECK:   [[WB:%.*]] = bitcast %swift.refcounted* [[OBJ]] to %T23partial_apply_forwarder7WeakBoxC*
 // CHECK:   [[REF:%.*]] = bitcast %T23partial_apply_forwarder7WeakBoxC* [[WB]] to %swift.refcounted*
 // CHECK:   [[CLOSURE:%.*]] = insertvalue { i8*, %swift.refcounted* } { i8* bitcast (void (%swift.refcounted*)* @"$S7takingQTA" to i8*), %swift.refcounted* undef }, %swift.refcounted* [[REF]], 1
@@ -108,7 +108,7 @@
 }
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc { i8*, %swift.refcounted* } @bind_polymorphic_param_from_context_2(%swift.opaque* noalias nocapture, %swift.type* %"\CF\84_0_1")
-// CHECK:   [[OBJ:%.*]] = call {{.*}} @swift_rt_swift_allocObject
+// CHECK:   [[OBJ:%.*]] = call {{.*}} @swift_allocObject
 // CHECK:   [[WB:%.*]] = bitcast %swift.refcounted* [[OBJ]]
 // CHECK:   [[REF:%.*]] = bitcast {{.*}}* [[WB]] to %swift.refcounted*
 // CHECK:   [[CLOSURE:%.*]] = insertvalue { i8*, %swift.refcounted* } { i8* bitcast (void (%swift.refcounted*)* @"$S15takingQAndEmptyTA" to i8*), %swift.refcounted* undef }, %swift.refcounted* [[REF]], 1
@@ -122,7 +122,7 @@
 }
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc { i8*, %swift.refcounted* } @bind_polymorphic_param_from_context_3(%swift.opaque* noalias nocapture, %swift.type* %"\CF\84_0_1")
-// CHECK:   [[OBJ:%.*]] = call {{.*}} @swift_rt_swift_allocObject
+// CHECK:   [[OBJ:%.*]] = call {{.*}} @swift_allocObject
 // CHECK:   [[WB:%.*]] = bitcast %swift.refcounted* [[OBJ]]
 // CHECK:   [[REF:%.*]] = bitcast {{.*}}* [[WB]] to %swift.refcounted*
 // CHECK:   [[CLOSURE:%.*]] = insertvalue { i8*, %swift.refcounted* } { i8* bitcast (void (%swift.refcounted*)* @"$S15takingEmptyAndQTA" to i8*), %swift.refcounted* undef }, %swift.refcounted* [[REF]], 1
@@ -140,7 +140,7 @@
 // CHECK: entry:
 // CHECK:   [[BPTY:%.*]] = call %swift.type* @"$S23partial_apply_forwarder12BaseProducerVMa"(%swift.type* %"\CF\84_0_1")
 // CHECK:   [[WBTY:%.*]] = call %swift.type* @"$S23partial_apply_forwarder7WeakBoxCMa"(%swift.type* [[BPTY]]
-// CHECK:   call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[WBTY]]
+// CHECK:   call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[WBTY]]
 // CHECK:   ret void
 
 // CHECK-LABEL: define internal swiftcc void @"$S7takingQTA.2"(%T23partial_apply_forwarder7WeakBoxC*, %swift.refcounted* swiftself)
@@ -174,9 +174,9 @@
 // CHECK: entry:
 // CHECK:   [[BPTY:%.*]] = call %swift.type* @"$S23partial_apply_forwarder12BaseProducerVMa"(%swift.type* %"\CF\84_0_1")
 // CHECK:   [[WBTY:%.*]] = call %swift.type* @"$S23partial_apply_forwarder7WeakBoxCMa"(%swift.type* [[BPTY]]
-// CHECK:   [[WBREF:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[WBTY]]
+// CHECK:   [[WBREF:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[WBTY]]
 // CHECK:   [[WB:%.*]] = bitcast %swift.refcounted* [[WBREF]] to %T23partial_apply_forwarder7WeakBoxC*
-// CHECK:   [[CONTEXT0:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject
+// CHECK:   [[CONTEXT0:%.*]] = call noalias %swift.refcounted* @swift_allocObject
 // CHECK:   [[CONTEXT:%.*]] = bitcast %swift.refcounted* [[CONTEXT0]] to <{ %swift.refcounted,{{.*}} %T23partial_apply_forwarder1SV, %T23partial_apply_forwarder7WeakBoxC* }>*
 // CHECK:   [[SADDR:%.*]] = getelementptr inbounds <{ %swift.refcounted,{{.*}} %T23partial_apply_forwarder1SV, %T23partial_apply_forwarder7WeakBoxC* }>, <{ %swift.refcounted,{{.*}} %T23partial_apply_forwarder1SV, %T23partial_apply_forwarder7WeakBoxC* }>* [[CONTEXT]], i32 0, i32 {{(1|2)}}
 // CHECK:   [[XADDR:%.*]] = getelementptr inbounds %T23partial_apply_forwarder1SV, %T23partial_apply_forwarder1SV* [[SADDR]], i32 0, i32 0
@@ -195,11 +195,11 @@
 // CHECK:   [[WBADDR:%.*]] = getelementptr inbounds <{ %swift.refcounted,{{.*}} %T23partial_apply_forwarder1SV, %T23partial_apply_forwarder7WeakBoxC* }>, <{ %swift.refcounted,{{.*}} %T23partial_apply_forwarder1SV, %T23partial_apply_forwarder7WeakBoxC* }>* [[CONTEXT]], i32 0, i32 {{(2|3)}}
 // CHECK:   [[WB:%.*]] = load %T23partial_apply_forwarder7WeakBoxC*, %T23partial_apply_forwarder7WeakBoxC** [[WBADDR]]
 // CHECK:   [[WBREF:%.*]] = bitcast %T23partial_apply_forwarder7WeakBoxC* [[WB]] to %swift.refcounted*
-// CHECK:   call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* returned [[WBREF]])
+// CHECK:   call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[WBREF]])
 // CHECK:   [[TYADDR:%.*]] = getelementptr inbounds %T23partial_apply_forwarder7WeakBoxC, %T23partial_apply_forwarder7WeakBoxC* [[WB]], i32 0, i32 0, i32 0
 // CHECK:   [[TY:%.*]] = load %swift.type*, %swift.type** [[TYADDR]] 
 // CHECK:   %.asUnsubstituted = bitcast %T23partial_apply_forwarder7WeakBoxC* [[WB]] to %T23partial_apply_forwarder7WeakBoxC.1*
-// CHECK:   call void @swift_rt_swift_release(%swift.refcounted* %0)
+// CHECK:   call void @swift_release(%swift.refcounted* %0)
 // CHECK:   [[GENPARAMSADDR:%.*]] = bitcast %swift.type* [[TY]] to %swift.type**
 // CHECK:   [[GENPARAMADDR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[GENPARAMSADDR]], {{(i64 10|i32 13)}}
 // CHECK:   %"BaseProducer<\CF\84_0_1>" = load %swift.type*, %swift.type** [[GENPARAMADDR]]
diff --git a/test/IRGen/partial_apply_objc.sil b/test/IRGen/partial_apply_objc.sil
index fe10ad6..7be814a 100644
--- a/test/IRGen/partial_apply_objc.sil
+++ b/test/IRGen/partial_apply_objc.sil
@@ -51,7 +51,7 @@
 // CHECK-LABEL: define{{( protected)?}} swiftcc { i8*, %swift.refcounted* } @indirect_partial_apply(i8*, %swift.refcounted*, i64) {{.*}} {
 // CHECK: entry:
 // CHECK:   [[T0:%.*]] = bitcast i8* %0 to void (i64, %swift.refcounted*)*
-// CHECK:   [[OBJ:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* getelementptr inbounds (%swift.full_boxmetadata, %swift.full_boxmetadata* @metadata, i32 0, i32 2), i64 40, i64 7)
+// CHECK:   [[OBJ:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* getelementptr inbounds (%swift.full_boxmetadata, %swift.full_boxmetadata* @metadata, i32 0, i32 2), i64 40, i64 7)
 // CHECK:   [[DATA_ADDR:%.*]] = bitcast %swift.refcounted* [[OBJ]] to [[DATA_TYPE:<{ %swift.refcounted, i64, %swift.refcounted\*, i8\* }>]]*
 // CHECK:   [[X_ADDR:%.*]] = getelementptr inbounds [[DATA_TYPE]], [[DATA_TYPE]]* [[DATA_ADDR]], i32 0, i32 1
 // CHECK:   store i64 %2, i64* [[X_ADDR]], align 8
@@ -85,7 +85,7 @@
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc { i8*, %swift.refcounted* } @objc_partial_apply(%T18partial_apply_objc9ObjCClassC*) {{.*}} {
 // CHECK: entry:
-// CHECK:   [[OBJ:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* getelementptr inbounds (%swift.full_boxmetadata, %swift.full_boxmetadata* @metadata.2, i32 0, i32 2), i64 24, i64 7)
+// CHECK:   [[OBJ:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* getelementptr inbounds (%swift.full_boxmetadata, %swift.full_boxmetadata* @metadata.2, i32 0, i32 2), i64 24, i64 7)
 // CHECK:   [[DATA_ADDR:%.*]] = bitcast %swift.refcounted* [[OBJ]] to [[DATA_TYPE:<{ %swift.refcounted, %T18partial_apply_objc9ObjCClassC\* }>]]*
 // CHECK:   [[X_ADDR:%.*]] = getelementptr inbounds [[DATA_TYPE]], [[DATA_TYPE]]* [[DATA_ADDR]], i32 0, i32 1
 // CHECK:   store %T18partial_apply_objc9ObjCClassC* %0, %T18partial_apply_objc9ObjCClassC** [[X_ADDR]], align 8
@@ -116,7 +116,7 @@
 }
 
 // CHECK-LABEL: define{{.*}} { i8*, %swift.refcounted* } @objc_partial_apply_indirect_sil_argument(%T18partial_apply_objc9ObjCClassC*) {{.*}}
-// CHECK:  [[CTX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject
+// CHECK:  [[CTX:%.*]] = call noalias %swift.refcounted* @swift_allocObject
 // CHECK:  [[CTX_ADDR:%.*]] = bitcast %swift.refcounted* [[CTX]] to [[CTXTYPE:<{ %swift.refcounted, %T18partial_apply_objc9ObjCClassC\* }>]]*
 // CHECK:  [[SELF_ADDR:%.*]] = getelementptr inbounds [[CTXTYPE]], [[CTXTYPE]]* [[CTX_ADDR]], i32 0, i32 1
 // CHECK:  store %T18partial_apply_objc9ObjCClassC* %0, %T18partial_apply_objc9ObjCClassC** [[SELF_ADDR]]
@@ -148,7 +148,7 @@
 // CHECK:   [[I8PTRSELF:%.*]] = bitcast %T18partial_apply_objc9ObjCClassC* [[SELF]] to [[OPAQUE4:%.*]]*
 // CHECK:   call [[OPAQUE3:%.*]]* bitcast (void ()* @objc_msgSend to [[OPAQUE3]]* ([[OPAQUE4:%.*]]*, i8*)*)([[OPAQUE4]]* [[I8PTRSELF]], i8* [[CMD]])
 // CHECK-NOT: release
-// CHECK:   call void @swift_rt_swift_release(%swift.refcounted* %0)
+// CHECK:   call void @swift_release(%swift.refcounted* %0)
 // CHECK-NOT: release
 // CHECK:   ret void
 // CHECK: }
@@ -191,7 +191,7 @@
 sil @partially_applyable_to_pure_objc : $@convention(thin) Gizmo -> ()
 
 // CHECK: define{{( protected)?}} swiftcc { i8*, %swift.refcounted* } @partial_apply_pure_objc
-// CHECK:   @swift_rt_swift_allocObject
+// CHECK:   @swift_allocObject
 sil @partial_apply_pure_objc : $@convention(thin) Gizmo -> @callee_owned () -> () {
 entry(%c : $Gizmo):
   %f = function_ref @partially_applyable_to_pure_objc : $@convention(thin) Gizmo -> ()
@@ -227,7 +227,7 @@
 }
 
 // CHECK-LABEL: define {{.*}}@objc_partial_apply_callee_guaranteed
-// CHECK:  [[CONTEXT:%.*]] = call {{.*}}@swift_rt_swift_allocObject
+// CHECK:  [[CONTEXT:%.*]] = call {{.*}}@swift_allocObject
 // CHECK:  store
 // CHECK:  [[CLOSURE:%.*]] = insertvalue {{.*}}@"$STa.20"{{.*}}, {{.*}}[[CONTEXT]], 1
 // CHECK: ret {{.*}}[[CLOSURE]]
@@ -250,7 +250,7 @@
 // CHECK: }
 
 // CHECK-LABEL: define {{.*}}@objc_partial_apply_2_callee_guaranteed
-// CHECK:  [[CONTEXT:%.*]] = call {{.*}}@swift_rt_swift_allocObject
+// CHECK:  [[CONTEXT:%.*]] = call {{.*}}@swift_allocObject
 // CHECK: store
 // CHECK:  [[CLOSURE:%.*]] = insertvalue {{.*}}@"$STa.23"{{.*}}, {{.*}}[[CONTEXT]], 1
 // CHECK: ret {{.*}}[[CLOSURE]]
diff --git a/test/IRGen/protocol_metadata.swift b/test/IRGen/protocol_metadata.swift
index 184db19..106d0ff 100644
--- a/test/IRGen/protocol_metadata.swift
+++ b/test/IRGen/protocol_metadata.swift
@@ -120,12 +120,12 @@
                     abc: A & B & C,
                     abco: A & B & C & O) {
   // CHECK: store %swift.protocol* @"$S17protocol_metadata1AMp"
-  // CHECK: call %swift.type* @swift_rt_swift_getExistentialTypeMetadata(i1 true, %swift.type* null, i64 1, %swift.protocol** {{%.*}})
+  // CHECK: call %swift.type* @swift_getExistentialTypeMetadata(i1 true, %swift.type* null, i64 1, %swift.protocol** {{%.*}})
   reify_metadata(a)
   // CHECK: store %swift.protocol* @"$S17protocol_metadata1AMp"
   // CHECK: store %swift.protocol* @"$S17protocol_metadata1BMp"
   // CHECK: store %swift.protocol* @"$S17protocol_metadata1CMp"
-  // CHECK: call %swift.type* @swift_rt_swift_getExistentialTypeMetadata(i1 false, %swift.type* null, i64 3, %swift.protocol** {{%.*}})
+  // CHECK: call %swift.type* @swift_getExistentialTypeMetadata(i1 false, %swift.type* null, i64 3, %swift.protocol** {{%.*}})
   reify_metadata(abc)
   // CHECK: store %swift.protocol* @"$S17protocol_metadata1AMp"
   // CHECK: store %swift.protocol* @"$S17protocol_metadata1BMp"
@@ -133,7 +133,7 @@
   // CHECK: [[O_REF:%.*]] = load i8*, i8** @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP17protocol_metadata1O_"
   // CHECK: [[O_REF_BITCAST:%.*]] = bitcast i8* [[O_REF]] to %swift.protocol*
   // CHECK: store %swift.protocol* [[O_REF_BITCAST]]
-  // CHECK: call %swift.type* @swift_rt_swift_getExistentialTypeMetadata(i1 false, %swift.type* null, i64 4, %swift.protocol** {{%.*}})
+  // CHECK: call %swift.type* @swift_getExistentialTypeMetadata(i1 false, %swift.type* null, i64 4, %swift.protocol** {{%.*}})
   reify_metadata(abco)
 }
 
diff --git a/test/IRGen/protocol_resilience.sil b/test/IRGen/protocol_resilience.sil
index ab37060..fe4b5dc 100644
--- a/test/IRGen/protocol_resilience.sil
+++ b/test/IRGen/protocol_resilience.sil
@@ -101,7 +101,7 @@
   // implementation
 
   // CHECK-NEXT: [[WTABLE:%.*]] = bitcast i8** %SelfWitnessTable to i8*
-  // CHECK-NEXT: [[CONTEXT:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject({{.*}})
+  // CHECK-NEXT: [[CONTEXT:%.*]] = call noalias %swift.refcounted* @swift_allocObject({{.*}})
   // CHECK-NEXT: [[LAYOUT:%.*]] = bitcast %swift.refcounted* [[CONTEXT]] to <{ %swift.refcounted, [{{4|8}} x i8], i8* }>*
   // CHECK:      [[WTABLE_ADDR:%.*]] = getelementptr inbounds <{ %swift.refcounted, [{{4|8}} x i8], i8* }>, <{ %swift.refcounted, [{{4|8}} x i8], i8* }>* [[LAYOUT]], i32 0, i32 2
   // CHECK-NEXT: store i8* [[WTABLE]], i8** [[WTABLE_ADDR]]
@@ -141,7 +141,7 @@
   // implementation
 
   // CHECK-NEXT: [[WTABLE:%.*]] = bitcast i8** %SelfWitnessTable to i8*
-  // CHECK-NEXT: [[CONTEXT:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject({{.*}})
+  // CHECK-NEXT: [[CONTEXT:%.*]] = call noalias %swift.refcounted* @swift_allocObject({{.*}})
   // CHECK-NEXT: [[LAYOUT:%.*]] = bitcast %swift.refcounted* [[CONTEXT]] to <{ %swift.refcounted, [{{4|8}} x i8], i8* }>*
   // CHECK:      [[WTABLE_ADDR:%.*]] = getelementptr inbounds <{ %swift.refcounted, [{{4|8}} x i8], i8* }>, <{ %swift.refcounted, [{{4|8}} x i8], i8* }>* [[LAYOUT]], i32 0, i32 2
   // CHECK-NEXT: store i8* [[WTABLE]], i8** [[WTABLE_ADDR]]
@@ -221,7 +221,7 @@
 
   // Make sure we can partially apply direct references to default implementations
 
-  // CHECK-NEXT: [[CONTEXT:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject({{.*}})
+  // CHECK-NEXT: [[CONTEXT:%.*]] = call noalias %swift.refcounted* @swift_allocObject({{.*}})
   // CHECK-NEXT: [[LAYOUT:%.*]] = bitcast %swift.refcounted* [[CONTEXT]] to <{ %swift.refcounted, i8* }>*
   // CHECK-NEXT: [[WTABLE:%.*]] = getelementptr inbounds <{ %swift.refcounted, i8* }>, <{ %swift.refcounted, i8* }>* [[LAYOUT]], i32 0, i32 1
   // CHECK-NEXT: store i8* bitcast ([9 x i8*]* @"$S19protocol_resilience16ConformingStructVAA17ResilientProtocolAAWP" to i8*), i8** [[WTABLE]]
@@ -300,7 +300,7 @@
 // CHECK-NEXT:    [[COUNT_PTR:%.*]] = getelementptr inbounds %swift.witness_table_slice, %swift.witness_table_slice* %conditional.tables, i32 0, i32 1
 // CHECK-NEXT:    store [[WORD:i(32|64)]] 0, [[WORD:i(32|64)]]* [[COUNT_PTR]]
 // CHECK-NEXT:    [[INSTANTIATION_ARGS:%.*]] = bitcast %swift.witness_table_slice* %conditional.tables to i8**
-// CHECK-NEXT:    [[WTABLE:%.*]] = call i8** @swift_rt_swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S19protocol_resilience23ResilientConformingTypeV010resilient_A005OtherC8ProtocolAAWG", %swift.type* null, i8** [[INSTANTIATION_ARGS]])
+// CHECK-NEXT:    [[WTABLE:%.*]] = call i8** @swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S19protocol_resilience23ResilientConformingTypeV010resilient_A005OtherC8ProtocolAAWG", %swift.type* null, i8** [[INSTANTIATION_ARGS]])
 // CHECK-NEXT:    ret i8** [[WTABLE]]
 
 
diff --git a/test/IRGen/runtime_calling_conventions.swift b/test/IRGen/runtime_calling_conventions.swift
index 16d3727..e7d0d97 100644
--- a/test/IRGen/runtime_calling_conventions.swift
+++ b/test/IRGen/runtime_calling_conventions.swift
@@ -2,35 +2,17 @@
 // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -parse-as-library -O -emit-ir %s | %FileCheck --check-prefix=OPT-CHECK %s
 
 // Test that runtime functions are invoked using the new calling convention.
-// Test that wrappers are used to invoked them.
-
-// TODO: Once the PreserveRegistersCC calling convention is enabled, check that it is really used.
 
 public class C {
 }
 
 // CHECK-LABEL: define {{(protected )?}}swiftcc void @"$S27runtime_calling_conventions3fooyyAA1CCF"(%T27runtime_calling_conventions1CC*)
 // Check that runtime functions use a proper calling convention.
-// CHECK: call void {{.*}} @swift_rt_swift_release
+// CHECK: call void {{.*}} @swift_release
 
 // OPT-CHECK-LABEL: define {{(protected )?}}swiftcc void @"$S27runtime_calling_conventions3fooyyAA1CCF"(%T27runtime_calling_conventions1CC*)
 // Check that runtime functions use a proper calling convention.
-// OPT-CHECK: tail call void @swift_rt_swift_release
+// OPT-CHECK: tail call void @swift_release
 
 public func foo(_ c: C) {
 }
-
-// Check that wrappers were generated, have a proper calling convention, linkage
-// and linkonce_odr flags.
-
-// CHECK: define linkonce_odr hidden void @swift_rt_swift_release(%swift.refcounted*) #[[ATTR_REF:[0-9]+]]
-// CHECK: load void (%swift.refcounted*)*, void (%swift.refcounted*)** @_swift_release
-// CHECK-NEXT: tail call void %load(%swift.refcounted* %0)
-// CHECK-NEXT: ret void
-// CHECK: attributes #[[ATTR_REF]] = { noinline nounwind }
-
-// OPT-CHECK: define linkonce_odr hidden void @swift_rt_swift_release(%swift.refcounted*) local_unnamed_addr #[[ATTR_REF:[0-9]+]]
-// OPT-CHECK: load void (%swift.refcounted*)*, void (%swift.refcounted*)** @_swift_release
-// OPT-CHECK-NEXT: tail call void %load(%swift.refcounted* %0)
-// OPT-CHECK-NEXT: ret void
-// OPT-CHECK: attributes #[[ATTR_REF]] = { noinline nounwind }
diff --git a/test/IRGen/sil_witness_methods.sil b/test/IRGen/sil_witness_methods.sil
index af78bd1..0e540d2 100644
--- a/test/IRGen/sil_witness_methods.sil
+++ b/test/IRGen/sil_witness_methods.sil
@@ -145,7 +145,7 @@
 }
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc { i8*, %swift.refcounted* } @partial_apply_concrete_witness() {{.*}} {
-// CHECK:         [[CONTEXT:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject({{.*}})
+// CHECK:         [[CONTEXT:%.*]] = call noalias %swift.refcounted* @swift_allocObject({{.*}})
 // CHECK:         [[LAYOUT:%.*]] = bitcast %swift.refcounted* [[CONTEXT]] to <{ %swift.refcounted, i8* }>*
 // CHECK:         [[WTABLE:%.*]] = getelementptr inbounds <{ %swift.refcounted, i8* }>, <{ %swift.refcounted, i8* }>* [[LAYOUT]], i32 0, i32 1
 // CHECK:         store i8* null, i8** [[WTABLE]]
diff --git a/test/IRGen/subclass.swift b/test/IRGen/subclass.swift
index d77e58f..e91d242 100644
--- a/test/IRGen/subclass.swift
+++ b/test/IRGen/subclass.swift
@@ -3,13 +3,13 @@
 // REQUIRES: CPU=x86_64
 // REQUIRES: objc_interop
 
-// CHECK: %swift.refcounted = type {
-// CHECK: [[TYPE:%swift.type]] = type
-// CHECK: [[OBJC_CLASS:%objc_class]] = type {
-// CHECK: [[OPAQUE:%swift.opaque]] = type
-// CHECK: [[A:%T8subclass1AC]] = type <{ [[REF:%swift.refcounted]], %TSi, %TSi }>
-// CHECK: [[INT:%TSi]] = type <{ i64 }>
-// CHECK: [[B:%T8subclass1BC]] = type <{ [[REF]], [[INT]], [[INT]], [[INT]] }>
+// CHECK-DAG: %swift.refcounted = type {
+// CHECK-DAG: [[TYPE:%swift.type]] = type
+// CHECK-DAG: [[OBJC_CLASS:%objc_class]] = type {
+// CHECK-DAG: [[OPAQUE:%swift.opaque]] = type
+// CHECK-DAG: [[A:%T8subclass1AC]] = type <{ [[REF:%swift.refcounted]], %TSi, %TSi }>
+// CHECK-DAG: [[INT:%TSi]] = type <{ i64 }>
+// CHECK-DAG: [[B:%T8subclass1BC]] = type <{ [[REF]], [[INT]], [[INT]], [[INT]] }>
 
 // CHECK: @_DATA__TtC8subclass1A = private constant {{.*\* } }}{
 // CHECK: @"$S8subclass1ACMf" = internal global [[A_METADATA:<{.*i64 }>]] <{
diff --git a/test/IRGen/subclass_existentials.sil b/test/IRGen/subclass_existentials.sil
index 0099c87..7df7c0b 100644
--- a/test/IRGen/subclass_existentials.sil
+++ b/test/IRGen/subclass_existentials.sil
@@ -22,8 +22,8 @@
 // CHECK-native-LABEL: define{{( protected)?}} swiftcc void @checkRefcounting(%T21subclass_existentials1CC*, i8**, %swift.refcounted*, i8**)
 // CHECK-NEXT: entry:
 // CHECK-objc-NEXT:   call void @swift_unknownRelease(%objc_object* %2)
-// CHECK-native-NEXT: call void @swift_rt_swift_release(%swift.refcounted* %2)
-// CHECK-NEXT:   call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T21subclass_existentials1CC*)*)(%T21subclass_existentials1CC* %0)
+// CHECK-native-NEXT: call void @swift_release(%swift.refcounted* %2)
+// CHECK-NEXT:   call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T21subclass_existentials1CC*)*)(%T21subclass_existentials1CC* %0)
 // CHECK-NEXT:   ret void
 
 sil @checkRefcounting : $@convention(thin) (@owned C & P, @owned AnyObject & P) -> () {
@@ -53,7 +53,7 @@
 // CHECK-NEXT:   [[PROTOCOL:%.*]] = getelementptr inbounds %swift.protocol*, %swift.protocol** [[PROTOCOLS]], i32 0
 // CHECK-NEXT:   store %swift.protocol* @"$S21subclass_existentials1PMp", %swift.protocol** [[PROTOCOL]]
 // CHECK-NEXT:   [[SUPERCLASS:%.*]] = call %swift.type* @"$S21subclass_existentials1CCMa"()
-// CHECK-NEXT:   [[METATYPE:%.*]] = call %swift.type* @swift_rt_swift_getExistentialTypeMetadata(i1 false, %swift.type* [[SUPERCLASS]], {{i32|i64}} 1, %swift.protocol** [[PROTOCOLS]])
+// CHECK-NEXT:   [[METATYPE:%.*]] = call %swift.type* @swift_getExistentialTypeMetadata(i1 false, %swift.type* [[SUPERCLASS]], {{i32|i64}} 1, %swift.protocol** [[PROTOCOLS]])
 // CHECK:        ret
 
 sil @checkMetadata : $@convention(thin) () -> () {
@@ -102,7 +102,7 @@
 // CHECK-NEXT:  [[WTABLE:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 1
   %2 = unconditional_checked_cast %0 : $C to $D & R
 
-// CHECK-NEXT:  call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T21subclass_existentials1DC*)*)(%T21subclass_existentials1DC* [[VALUE]])
+// CHECK-NEXT:  call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T21subclass_existentials1DC*)*)(%T21subclass_existentials1DC* [[VALUE]])
   destroy_value %2 : $D & R
 
 // CHECK-NEXT:  [[VALUE:%.*]] = bitcast %T21subclass_existentials1CC* %1 to i8*
@@ -111,7 +111,7 @@
 // CHECK-NEXT:  [[VALUE:%.*]] = bitcast i8* [[RESULT]] to %T21subclass_existentials1DC*
   %3 = unconditional_checked_cast %1 : $C & P to $D
 
-// CHECK-NEXT:  call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T21subclass_existentials1DC*)*)(%T21subclass_existentials1DC* [[VALUE]])
+// CHECK-NEXT:  call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T21subclass_existentials1DC*)*)(%T21subclass_existentials1DC* [[VALUE]])
   destroy_value %3 : $D
 
 // CHECK-NEXT:  ret void
@@ -152,7 +152,7 @@
 // CHECK-NEXT:  [[WTABLE:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 1
   %2 = unconditional_checked_cast %0 : $C to $C & P
 
-// CHECK-NEXT:  call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T21subclass_existentials1CC*)*)(%T21subclass_existentials1CC* [[VALUE]])
+// CHECK-NEXT:  call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T21subclass_existentials1CC*)*)(%T21subclass_existentials1CC* [[VALUE]])
   destroy_value %2 : $C & P
 
 // CHECK-NEXT:  ret void
diff --git a/test/IRGen/tail_alloc.sil b/test/IRGen/tail_alloc.sil
index f333d98..9f1996d 100644
--- a/test/IRGen/tail_alloc.sil
+++ b/test/IRGen/tail_alloc.sil
@@ -35,7 +35,7 @@
 
 // CHECK-LABEL: define{{( protected)?}} {{.*}}* @alloc_on_heap
 // CHECK:      [[M:%[0-9]+]] = call %swift.type* @"$S{{[a-zA-Z0-9_]+}}Ma"()
-// CHECK-NEXT: [[O:%[0-9]+]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[M]], i64 28, i64 7)
+// CHECK-NEXT: [[O:%[0-9]+]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[M]], i64 28, i64 7)
 // CHECK-NEXT: [[O2:%[0-9]+]] = bitcast %swift.refcounted* [[O]] to %[[C:.*TestClass.*]]*
 // CHECK-NEXT:  ret %[[C]]* [[O2]]
 sil @alloc_on_heap : $@convention(thin) () -> @owned TestClass {
@@ -47,7 +47,7 @@
 
 // CHECK-LABEL: define{{( protected)?}} {{.*}}* @alloc_3_on_heap
 // CHECK:      [[M:%[0-9]+]] = call %swift.type* @"$S{{[a-zA-Z0-9_]+}}CMa"()
-// CHECK-NEXT: [[O:%[0-9]+]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[M]], i64 40, i64 7)
+// CHECK-NEXT: [[O:%[0-9]+]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[M]], i64 40, i64 7)
 // CHECK-NEXT: [[O2:%[0-9]+]] = bitcast %swift.refcounted* [[O]] to %[[C:.*TestClass.*]]*
 // CHECK-NEXT:  ret %[[C]]* [[O2]]
 sil @alloc_3_on_heap : $@convention(thin) () -> @owned TestClass {
@@ -63,7 +63,7 @@
 // CHECK:      [[M:%[0-9]+]] = call %swift.type* @"$S{{[a-zA-Z0-9_]+}}Ma"()
 // CHECK-NEXT: [[S:%[0-9]+]] = mul i64 4, %0
 // CHECK-NEXT: [[A:%[0-9]+]] = add i64 20, [[S]]
-// CHECK-NEXT: [[O:%[0-9]+]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[M]], i64 [[A]], i64 7)
+// CHECK-NEXT: [[O:%[0-9]+]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[M]], i64 [[A]], i64 7)
 // CHECK-NEXT: [[O2:%[0-9]+]] = bitcast %swift.refcounted* [[O]] to %[[C:.*TestClass.*]]*
 // CHECK-NEXT:  ret %[[C]]* [[O2]]
 sil @alloc_non_const_count : $@convention(thin) (Builtin.Word) -> @owned TestClass {
@@ -80,7 +80,7 @@
 // CHECK-NEXT: [[S4:%[0-9]+]] = and i64 [[S3]], -4
 // CHECK-NEXT: [[S5:%[0-9]+]] = mul i64 4, %1
 // CHECK-NEXT: [[S6:%[0-9]+]] = add i64 [[S4]], [[S5]]
-// CHECK-NEXT: [[O:%[0-9]+]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* [[M]], i64 [[S6]], i64 7)
+// CHECK-NEXT: [[O:%[0-9]+]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[M]], i64 [[S6]], i64 7)
 // CHECK-NEXT: [[O2:%[0-9]+]] = bitcast %swift.refcounted* [[O]] to %[[C:.*TestClass.*]]*
 // CHECK-NEXT:  ret %[[C]]* [[O2]]
 sil @alloc_2_non_const_count : $@convention(thin) (Builtin.Word, Builtin.Word) -> @owned TestClass {
@@ -95,7 +95,7 @@
 // CHECK-NEXT: [[S3:%[0-9]+]] = and i64 [[S1]], [[S2]]
 // CHECK-NEXT: [[S4:%[0-9]+]] = mul i64 %stride, %0
 // CHECK-NEXT: [[S5:%[0-9]+]] = add i64 [[S3]], [[S4]]
-// CHECK:      call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %{{[0-9]+}}, i64 [[S5]], i64 7)
+// CHECK:      call noalias %swift.refcounted* @swift_allocObject(%swift.type* %{{[0-9]+}}, i64 [[S5]], i64 7)
 // CHECK:      ret
 sil @alloc_generic : $@convention(thin) <T> (Builtin.Word, @thick T.Type) -> @owned TestClass {
 bb0(%0 : $Builtin.Word, %1 : $@thick T.Type):
@@ -113,7 +113,7 @@
 // CHECK:      [[ALIGN_TMP:%[0-9]+]] = add i64 [[SIZE64]], 3
 // CHECK-NEXT: [[ALIGNED:%[0-9]+]] = and i64 [[ALIGN_TMP]], -4
 // CHECK-NEXT: [[TOTAL_SIZE:%[0-9]+]] = add i64 [[ALIGNED]], 12
-// CHECK-NEXT: [[O:%[0-9]+]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* %0, i64 [[TOTAL_SIZE]], i64 {{.*}})
+// CHECK-NEXT: [[O:%[0-9]+]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* %0, i64 [[TOTAL_SIZE]], i64 {{.*}})
 // CHECK-NEXT: [[O2:%[0-9]+]] = bitcast %swift.refcounted* [[O]] to %{{.*TestClassC}}*
 // CHECK-NEXT:  ret %{{.*TestClassC}}* [[O2]]
 sil @alloc_dynamic : $@convention(thin) (@thick TestClass.Type) -> @owned TestClass {
diff --git a/test/IRGen/typed_boxes.sil b/test/IRGen/typed_boxes.sil
index 1099955..36a7883 100644
--- a/test/IRGen/typed_boxes.sil
+++ b/test/IRGen/typed_boxes.sil
@@ -7,13 +7,13 @@
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @pod_box_8_8_a
 sil @pod_box_8_8_a : $@convention(thin) () -> () {
 entry:
-  // CHECK: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[POD_8_8_METADATA:@metadata[0-9.]*]], i32 0, i32 2), [[WORD:i[0-9]+]] [[POD_8_8_SIZE:[0-9]+]], [[WORD]] 7)
+  // CHECK: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* {{.*}} [[POD_8_8_METADATA:@metadata[0-9.]*]], i32 0, i32 2), [[WORD:i[0-9]+]] [[POD_8_8_SIZE:[0-9]+]], [[WORD]] 7)
   %a = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int64>
   // CHECK: [[BOX_RAW:%.*]] = bitcast %swift.refcounted* [[BOX]] to [[POD_8_8_LAYOUT:<\{ %swift.refcounted, \[8 x i8\] \}>]]*
   // CHECK: [[BOX_DATA:%.*]] = getelementptr inbounds [[POD_8_8_LAYOUT]], [[POD_8_8_LAYOUT]]* [[BOX_RAW]], i32 0, i32 1
   // CHECK: [[BOX_DATA_1:%.*]] = bitcast [8 x i8]* [[BOX_DATA]] to i64*
   %b = project_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.Int64>, 0
-  // CHECK: call void @swift_rt_swift_deallocUninitializedObject(%swift.refcounted* [[BOX]], [[WORD]] [[POD_8_8_SIZE]], [[WORD]] 7)
+  // CHECK: call void @swift_deallocUninitializedObject(%swift.refcounted* [[BOX]], [[WORD]] [[POD_8_8_SIZE]], [[WORD]] 7)
   dealloc_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.Int64>
   return undef : $()
 }
@@ -21,13 +21,13 @@
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @pod_box_8_8_b
 sil @pod_box_8_8_b : $@convention(thin) () -> () {
 entry:
-  // CHECK: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[POD_8_8_METADATA]], i32 0, i32 2), [[WORD]] [[POD_8_8_SIZE]], [[WORD]] 7)
+  // CHECK: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* {{.*}} [[POD_8_8_METADATA]], i32 0, i32 2), [[WORD]] [[POD_8_8_SIZE]], [[WORD]] 7)
   %a = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>
   // CHECK: [[BOX_RAW:%.*]] = bitcast %swift.refcounted* [[BOX]] to [[POD_8_8_LAYOUT:<\{ %swift.refcounted, \[8 x i8\] \}>]]*
   // CHECK: [[BOX_DATA:%.*]] = getelementptr inbounds [[POD_8_8_LAYOUT]], [[POD_8_8_LAYOUT]]* [[BOX_RAW]], i32 0, i32 1
   // CHECK: [[BOX_DATA_1:%.*]] = bitcast [8 x i8]* [[BOX_DATA]] to double*
   %b = project_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0
-  // CHECK: call void @swift_rt_swift_deallocUninitializedObject(%swift.refcounted* [[BOX]], [[WORD]] [[POD_8_8_SIZE]], [[WORD]] 7)
+  // CHECK: call void @swift_deallocUninitializedObject(%swift.refcounted* [[BOX]], [[WORD]] [[POD_8_8_SIZE]], [[WORD]] 7)
   dealloc_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>
   return undef : $()
 }
@@ -40,14 +40,14 @@
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @pod_box_32_32
 sil @pod_box_32_32 : $@convention(thin) () -> () {
 entry:
-  // CHECK: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[POD_32_32_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 64, [[WORD]] 31)
+  // CHECK: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* {{.*}} [[POD_32_32_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 64, [[WORD]] 31)
   %a = alloc_box $<τ_0_0> { var τ_0_0 } <OverAligned>
   // CHECK-32: [[BOX_RAW:%.*]] = bitcast %swift.refcounted* [[BOX]] to [[POD_32_32_LAYOUT:<\{ %swift.refcounted, \[24 x i8\], \[32 x i8\] \}>]]*
   // CHECK-64: [[BOX_RAW:%.*]] = bitcast %swift.refcounted* [[BOX]] to [[POD_32_32_LAYOUT:<\{ %swift.refcounted, \[16 x i8\], \[32 x i8\] \}>]]*
   // CHECK: [[BOX_DATA:%.*]] = getelementptr inbounds [[POD_32_32_LAYOUT]], [[POD_32_32_LAYOUT]]* [[BOX_RAW]], i32 0, i32 2
   // CHECK: [[BOX_DATA_1:%.*]] = bitcast [32 x i8]* [[BOX_DATA]] to %T11typed_boxes11OverAlignedV*
   %b = project_box %a : $<τ_0_0> { var τ_0_0 } <OverAligned>, 0
-  // CHECK: call void @swift_rt_swift_deallocUninitializedObject(%swift.refcounted* [[BOX]], [[WORD]] 64, [[WORD]] 31)
+  // CHECK: call void @swift_deallocUninitializedObject(%swift.refcounted* [[BOX]], [[WORD]] 64, [[WORD]] 31)
   dealloc_box %a : $<τ_0_0> { var τ_0_0 } <OverAligned>
   return undef : $()
 }
@@ -61,8 +61,8 @@
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @rc_box_a
 sil @rc_box_a : $@convention(thin) () -> () {
 entry:
-  // CHECK-32: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 12, [[WORD]] 3)
-  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 24, [[WORD]] 7)
+  // CHECK-32: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 12, [[WORD]] 3)
+  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 24, [[WORD]] 7)
   %a = alloc_box $<τ_0_0> { var τ_0_0 } <C>
   // CHECK: bitcast %swift.refcounted** {{%.*}} to %T11typed_boxes1CC**
   %b = project_box %a : $<τ_0_0> { var τ_0_0 } <C>, 0
@@ -74,8 +74,8 @@
 sil @rc_box_b : $@convention(thin) () -> () {
 entry:
   // TODO: Should reuse metadata
-  // CHECK-32: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA]], {{.*}} [[WORD]] 12, [[WORD]] 3)
-  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA]], {{.*}} [[WORD]] 24, [[WORD]] 7)
+  // CHECK-32: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA]], {{.*}} [[WORD]] 12, [[WORD]] 3)
+  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA]], {{.*}} [[WORD]] 24, [[WORD]] 7)
   %a = alloc_box $<τ_0_0> { var τ_0_0 } <D>
   // CHECK: bitcast %swift.refcounted** {{%.*}} to %T11typed_boxes1DC**
   %b = project_box %a : $<τ_0_0> { var τ_0_0 } <D>, 0
@@ -86,8 +86,8 @@
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @unknown_rc_box
 sil @unknown_rc_box : $@convention(thin) () -> () {
 entry:
-  // CHECK-32: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[UNKNOWN_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 12, [[WORD]] 3)
-  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[UNKNOWN_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 24, [[WORD]] 7)
+  // CHECK-32: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* {{.*}} [[UNKNOWN_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 12, [[WORD]] 3)
+  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* {{.*}} [[UNKNOWN_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 24, [[WORD]] 7)
   %a = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>
   %b = project_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0
   dealloc_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>
diff --git a/test/IRGen/typemetadata.sil b/test/IRGen/typemetadata.sil
index 586f9b3..2c125f9 100644
--- a/test/IRGen/typemetadata.sil
+++ b/test/IRGen/typemetadata.sil
@@ -30,7 +30,7 @@
 // CHECK:      [[T0:%.*]] = load %swift.type*, %swift.type**  @"$S12typemetadata1CCML", align 8
 // CHECK-NEXT: [[T1:%.*]] = icmp eq %swift.type* [[T0]], null
 // CHECK-NEXT: br i1 [[T1]]
-// CHECK:      [[T0:%.*]] = call %objc_class* @swift_rt_swift_getInitializedObjCClass({{.*}} @"$S12typemetadata1CCMf", {{.*}})
+// CHECK:      [[T0:%.*]] = call %objc_class* @swift_getInitializedObjCClass({{.*}} @"$S12typemetadata1CCMf", {{.*}})
 // CHECK-NEXT: [[T1:%.*]] = bitcast %objc_class* [[T0]] to %swift.type*
 // CHECK:      store atomic %swift.type* [[T1]], %swift.type** @"$S12typemetadata1CCML" release, align 8
 // CHECK-NEXT: br label
diff --git a/test/IRGen/unowned.sil b/test/IRGen/unowned.sil
index f2ffd02..d58e1e2 100644
--- a/test/IRGen/unowned.sil
+++ b/test/IRGen/unowned.sil
@@ -31,8 +31,8 @@
   return %3 : $()
 }
 // CHECK:    define{{( protected)?}} swiftcc void @test_weak_rr_class([[C]]*) {{.*}} {
-// CHECK:      call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_rt_swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned %0)
-// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_rt_swift_unownedRelease to void ([[C]]*)*)([[C]]* %0)
+// CHECK:      call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned %0)
+// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_unownedRelease to void ([[C]]*)*)([[C]]* %0)
 // CHECK-NEXT: ret void
 
 sil @test_weak_rr_proto : $@convention(thin) (@sil_unowned P) -> () {
@@ -43,8 +43,8 @@
   return %3 : $()
 }
 // CHECK:    define{{( protected)?}} swiftcc void @test_weak_rr_proto(%swift.refcounted*, i8**) {{.*}} {
-// CHECK:      call %swift.refcounted* @swift_rt_swift_unownedRetain(%swift.refcounted* returned %0)
-// CHECK:      call void @swift_rt_swift_unownedRelease(%swift.refcounted* %0)
+// CHECK:      call %swift.refcounted* @swift_unownedRetain(%swift.refcounted* returned %0)
+// CHECK:      call void @swift_unownedRelease(%swift.refcounted* %0)
 // CHECK-NEXT: ret void
 
 // Value witnesses for A:
@@ -57,7 +57,7 @@
 // CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[A]], [[A]]* [[SRC]], i32 0, i32 0
 // CHECK-NEXT: [[T1C:%.*]] = bitcast %swift.unowned* [[T1]] to [[C]]*
 // CHECK-NEXT: [[T2:%.*]] = load [[C]]*, [[C]]** [[T1C]], align 8
-// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_rt_swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[T2]])
+// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[T2]])
 // CHECK-NEXT: [[T0C:%.*]] = bitcast %swift.unowned* [[T0]] to [[C]]*
 // CHECK-NEXT: store [[C]]* [[T2]], [[C]]** [[T0C]], align 8
 // CHECK-NEXT: [[T0:%.*]] = bitcast [[A]]* [[DEST]] to [[OPAQUE]]*
@@ -69,7 +69,7 @@
 // CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[A]], [[A]]* [[T0]], i32 0, i32 0
 // CHECK-NEXT: [[T1C:%.*]] = bitcast %swift.unowned* [[T1]] to [[C]]*
 // CHECK-NEXT: [[T2:%.*]] = load [[C]]*, [[C]]** [[T1C]], align 8
-// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_rt_swift_unownedRelease to void ([[C]]*)*)([[C]]* [[T2]])
+// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_unownedRelease to void ([[C]]*)*)([[C]]* [[T2]])
 // CHECK-NEXT: ret void
 
 //   initializeWithCopy
@@ -80,7 +80,7 @@
 // CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[A]], [[A]]* [[SRC]], i32 0, i32 0
 // CHECK-NEXT: [[T1C:%.*]] = bitcast %swift.unowned* [[T1]] to [[C]]*
 // CHECK-NEXT: [[T2:%.*]] = load [[C]]*, [[C]]** [[T1C]], align 8
-// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_rt_swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[T2]])
+// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[T2]])
 // CHECK-NEXT: [[T0C:%.*]] = bitcast %swift.unowned* [[T0]] to [[C]]*
 // CHECK-NEXT: store [[C]]* [[T2]], [[C]]** [[T0C]], align 8
 // CHECK-NEXT: [[T0:%.*]] = bitcast [[A]]* [[DEST]] to [[OPAQUE]]*
@@ -94,11 +94,11 @@
 // CHECK-NEXT: [[SRC_X:%.*]] = getelementptr inbounds [[A]], [[A]]* [[SRC]], i32 0, i32 0
 // CHECK-NEXT: [[SRC_X_C:%.*]] = bitcast %swift.unowned* [[SRC_X]] to [[C]]*
 // CHECK-NEXT: [[NEW:%.*]] = load [[C]]*, [[C]]** [[SRC_X_C]], align 8
-// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_rt_swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[NEW]])
+// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[NEW]])
 // CHECK-NEXT: [[DEST_X_C:%.*]] = bitcast %swift.unowned* [[DEST_X]] to [[C]]*
 // CHECK-NEXT: [[OLD:%.*]] = load [[C]]*, [[C]]** [[DEST_X_C]], align 8
 // CHECK-NEXT: store [[C]]* [[NEW]], [[C]]** [[DEST_X_C]], align 8
-// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_rt_swift_unownedRelease to void ([[C]]*)*)([[C]]* [[OLD]])
+// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_unownedRelease to void ([[C]]*)*)([[C]]* [[OLD]])
 // CHECK-NEXT: [[T0:%.*]] = bitcast [[A]]* [[DEST]] to [[OPAQUE]]*
 // CHECK-NEXT: ret [[OPAQUE]]* [[T0]]
 
@@ -113,6 +113,6 @@
 // CHECK-NEXT: [[DEST_X_C:%.*]] = bitcast %swift.unowned* [[DEST_X]] to [[C]]*
 // CHECK-NEXT: [[OLD:%.*]] = load [[C]]*, [[C]]** [[DEST_X_C]], align 8
 // CHECK-NEXT: store [[C]]* [[NEW]], [[C]]** [[DEST_X_C]], align 8
-// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_rt_swift_unownedRelease to void ([[C]]*)*)([[C]]* [[OLD]])
+// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_unownedRelease to void ([[C]]*)*)([[C]]* [[OLD]])
 // CHECK-NEXT: [[T0:%.*]] = bitcast [[A]]* [[DEST]] to [[OPAQUE]]*
 // CHECK-NEXT: ret [[OPAQUE]]* [[T0]]
diff --git a/test/IRGen/unowned_objc.sil b/test/IRGen/unowned_objc.sil
index 5f63d15..cb8f039 100644
--- a/test/IRGen/unowned_objc.sil
+++ b/test/IRGen/unowned_objc.sil
@@ -6,11 +6,11 @@
 import Builtin
 
 //   These types end up in a completely different order with interop disabled.
-// CHECK: [[TYPE:%swift.type]] = type
-// CHECK: [[OPAQUE:%swift.opaque]] = type opaque
-// CHECK: [[C:%T12unowned_objc1CC]] = type <{ [[REF:%swift.refcounted]] }>
-// CHECK: [[UNKNOWN:%objc_object]] = type
-// CHECK: [[A:%T12unowned_objc1AV]] = type <{ %swift.unowned }>
+// CHECK-DAG: [[TYPE:%swift.type]] = type
+// CHECK-DAG: [[OPAQUE:%swift.opaque]] = type opaque
+// CHECK-DAG: [[C:%T12unowned_objc1CC]] = type <{ [[REF:%swift.refcounted]] }>
+// CHECK-DAG: [[UNKNOWN:%objc_object]] = type
+// CHECK-DAG: [[A:%T12unowned_objc1AV]] = type <{ %swift.unowned }>
 
 class C {}
 sil_vtable C {}
@@ -37,8 +37,8 @@
   return %3 : $()
 }
 // CHECK:    define{{( protected)?}} swiftcc void @test_weak_rr_class([[C]]*) {{.*}} {
-// CHECK:      call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_rt_swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned %0)
-// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_rt_swift_unownedRelease to void ([[C]]*)*)([[C]]* %0)
+// CHECK:      call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned %0)
+// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_unownedRelease to void ([[C]]*)*)([[C]]* %0)
 // CHECK-NEXT: ret void
 
 // CHECK:    define{{( protected)?}} swiftcc void @test_unknown_unowned_copies([[UNKNOWN]]*, i8**, [[UNKNOWN]]*, i8**)
@@ -134,7 +134,7 @@
 // CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[A]], [[A]]* [[SRC]], i32 0, i32 0
 // CHECK-NEXT: [[T1C:%.*]] = bitcast %swift.unowned* [[T1]] to [[C]]*
 // CHECK-NEXT: [[T2:%.*]] = load [[C]]*, [[C]]** [[T1C]], align 8
-// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_rt_swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[T2]])
+// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[T2]])
 // CHECK-NEXT: [[T0C:%.*]] = bitcast %swift.unowned* [[T0]] to [[C]]*
 // CHECK-NEXT: store [[C]]* [[T2]], [[C]]** [[T0C]], align 8
 // CHECK-NEXT: [[T0:%.*]] = bitcast [[A]]* [[DEST]] to [[OPAQUE]]*
@@ -146,7 +146,7 @@
 // CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[A]], [[A]]* [[T0]], i32 0, i32 0
 // CHECK-NEXT: [[T1C:%.*]] = bitcast %swift.unowned* [[T1]] to [[C]]*
 // CHECK-NEXT: [[T2:%.*]] = load [[C]]*, [[C]]** [[T1C]], align 8
-// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_rt_swift_unownedRelease to void ([[C]]*)*)([[C]]* [[T2]])
+// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_unownedRelease to void ([[C]]*)*)([[C]]* [[T2]])
 // CHECK-NEXT: ret void
 
 //   initializeWithCopy
@@ -157,7 +157,7 @@
 // CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[A]], [[A]]* [[SRC]], i32 0, i32 0
 // CHECK-NEXT: [[T1C:%.*]] = bitcast %swift.unowned* [[T1]] to [[C]]*
 // CHECK-NEXT: [[T2:%.*]] = load [[C]]*, [[C]]** [[T1C]], align 8
-// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_rt_swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[T2]])
+// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[T2]])
 // CHECK-NEXT: [[T0C:%.*]] = bitcast %swift.unowned* [[T0]] to [[C]]*
 // CHECK-NEXT: store [[C]]* [[T2]], [[C]]** [[T0C]], align 8
 // CHECK-NEXT: [[T0:%.*]] = bitcast [[A]]* [[DEST]] to [[OPAQUE]]*
@@ -171,11 +171,11 @@
 // CHECK-NEXT: [[SRC_X:%.*]] = getelementptr inbounds [[A]], [[A]]* [[SRC]], i32 0, i32 0
 // CHECK-NEXT: [[SRC_X_C:%.*]] = bitcast %swift.unowned* [[SRC_X]] to [[C]]*
 // CHECK-NEXT: [[NEW:%.*]] = load [[C]]*, [[C]]** [[SRC_X_C]], align 8
-// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_rt_swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[NEW]])
+// CHECK-NEXT: call [[C]]* bitcast ([[REF]]* ([[REF]]*)* @swift_unownedRetain to [[C]]* ([[C]]*)*)([[C]]* returned [[NEW]])
 // CHECK-NEXT: [[DEST_X_C:%.*]] = bitcast %swift.unowned* [[DEST_X]] to [[C]]*
 // CHECK-NEXT: [[OLD:%.*]] = load [[C]]*, [[C]]** [[DEST_X_C]], align 8
 // CHECK-NEXT: store [[C]]* [[NEW]], [[C]]** [[DEST_X_C]], align 8
-// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_rt_swift_unownedRelease to void ([[C]]*)*)([[C]]* [[OLD]])
+// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_unownedRelease to void ([[C]]*)*)([[C]]* [[OLD]])
 // CHECK-NEXT: [[T0:%.*]] = bitcast [[A]]* [[DEST]] to [[OPAQUE]]*
 // CHECK-NEXT: ret [[OPAQUE]]* [[T0]]
 
@@ -190,6 +190,6 @@
 // CHECK-NEXT: [[DEST_X_C:%.*]] = bitcast %swift.unowned* [[DEST_X]] to [[C]]*
 // CHECK-NEXT: [[OLD:%.*]] = load [[C]]*, [[C]]** [[DEST_X_C]], align 8
 // CHECK-NEXT: store [[C]]* [[NEW]], [[C]]** [[DEST_X_C]], align 8
-// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_rt_swift_unownedRelease to void ([[C]]*)*)([[C]]* [[OLD]])
+// CHECK-NEXT: call void bitcast (void ([[REF]]*)* @swift_unownedRelease to void ([[C]]*)*)([[C]]* [[OLD]])
 // CHECK-NEXT: [[T0:%.*]] = bitcast [[A]]* [[DEST]] to [[OPAQUE]]*
 // CHECK-NEXT: ret [[OPAQUE]]* [[T0]]
diff --git a/test/IRGen/value_buffers.sil b/test/IRGen/value_buffers.sil
index 75950e2..67d1bfb 100644
--- a/test/IRGen/value_buffers.sil
+++ b/test/IRGen/value_buffers.sil
@@ -58,7 +58,7 @@
 }
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @alloc_big([24 x i8]* nocapture dereferenceable({{.*}}), %T13value_buffers9BigStructV* noalias nocapture dereferenceable({{.*}}))
 // CHECK-NEXT: entry:
-// CHECK-NEXT: [[T0:%.*]] = call noalias i8* @swift_rt_swift_slowAlloc(i64 48, i64 7)
+// CHECK-NEXT: [[T0:%.*]] = call noalias i8* @swift_slowAlloc(i64 48, i64 7)
 // CHECK-NEXT: [[T1:%.*]] = bitcast [24 x i8]* %0 to i8**
 // CHECK-NEXT: store i8* [[T0]], i8** [[T1]], align 8
 // CHECK-NEXT: [[ADDR:%.*]] = bitcast i8* [[T0]] to %T13value_buffers9BigStructV*
@@ -93,5 +93,5 @@
 // CHECK-NEXT: entry:
 // CHECK-NEXT: [[T0:%.*]] = bitcast [24 x i8]* %0 to i8**
 // CHECK-NEXT: [[ADDR:%.*]] = load i8*, i8** [[T0]], align 8
-// CHECK-NEXT: call void @swift_rt_swift_slowDealloc(i8* [[ADDR]], i64 48, i64 7)
+// CHECK-NEXT: call void @swift_slowDealloc(i8* [[ADDR]], i64 48, i64 7)
 // CHECK-NEXT: ret void
diff --git a/test/IRGen/weak.sil b/test/IRGen/weak.sil
index 7650f35..6f23e84 100644
--- a/test/IRGen/weak.sil
+++ b/test/IRGen/weak.sil
@@ -4,13 +4,13 @@
 // REQUIRES: CPU=x86_64
 // XFAIL: linux
 
-// CHECK: [[TYPE:%swift.type]] = type
-// CHECK: [[OPAQUE:%swift.opaque]] = type opaque
-// CHECK: [[C:%T4weak1CC]] = type <{ [[REF:%swift.refcounted]] }>
-// CHECK: [[UNKNOWN:%objc_object]] = type opaque
-// CHECK: [[A:%T4weak1AV]] = type <{ [[WEAK:%swift.weak]] }>
-// CHECK: [[WEAK]] = type
-// CHECK: [[B:%T4weak1BV]] = type <{ { [[WEAK]], i8** } }>
+// CHECK-DAG: [[TYPE:%swift.type]] = type
+// CHECK-DAG: [[OPAQUE:%swift.opaque]] = type opaque
+// CHECK-DAG: [[C:%T4weak1CC]] = type <{ [[REF:%swift.refcounted]] }>
+// CHECK-DAG: [[UNKNOWN:%objc_object]] = type opaque
+// CHECK-DAG: [[A:%T4weak1AV]] = type <{ [[WEAK:%swift.weak]] }>
+// CHECK-DAG: [[WEAK]] = type
+// CHECK-DAG: [[B:%T4weak1BV]] = type <{ { [[WEAK]], i8** } }>
 
 sil_stage canonical
 
@@ -49,7 +49,7 @@
 // CHECK-NEXT: %4 = inttoptr
 // CHECK-NEXT: call [[WEAK]]* bitcast ([[WEAK]]* ([[WEAK]]*, [[REF]]*)* @swift_weakAssign to [[WEAK]]* ([[WEAK]]*, [[C]]*)*)([[WEAK]]* returned [[X]], [[C]]* %4)
 // CHECK-NEXT: %6 = inttoptr i64 %3 to %swift.refcounted*
-// CHECK-NEXT: call void @swift_rt_swift_release([[REF]]* %6)
+// CHECK-NEXT: call void @swift_release([[REF]]* %6)
 // CHECK-NEXT: ret void
 
 struct B {
diff --git a/test/IRGen/yield_once_big.sil b/test/IRGen/yield_once_big.sil
index 8f55e67..91f9c33 100644
--- a/test/IRGen/yield_once_big.sil
+++ b/test/IRGen/yield_once_big.sil
@@ -150,14 +150,14 @@
   br cont
 
 cont:
-  // CHECK:         call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R0]])
-  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R1]])
-  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R2]])
-  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R3]])
-  // CHECK:         call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R4]])
-  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R5]])
-  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R6]])
-  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R7]])
+  // CHECK:         call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R0]])
+  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R1]])
+  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R2]])
+  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R3]])
+  // CHECK:         call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R4]])
+  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R5]])
+  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R6]])
+  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T14yield_once_big12SomeSubclassC*)*)(%T14yield_once_big12SomeSubclassC* [[R7]])
   destroy_value %value : $Big<SomeSubclass>
 
   // CHECK-NEXT:    ret void
diff --git a/test/IRGen/yield_once_biggish.sil b/test/IRGen/yield_once_biggish.sil
index dcfefd2..47ba598 100644
--- a/test/IRGen/yield_once_biggish.sil
+++ b/test/IRGen/yield_once_biggish.sil
@@ -150,10 +150,10 @@
   br cont
 
 cont:
-  // CHECK:         call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T18yield_once_biggish12SomeSubclassC*)*)(%T18yield_once_biggish12SomeSubclassC* [[R0]])
-  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T18yield_once_biggish12SomeSubclassC*)*)(%T18yield_once_biggish12SomeSubclassC* [[R1]])
-  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T18yield_once_biggish12SomeSubclassC*)*)(%T18yield_once_biggish12SomeSubclassC* [[R2]])
-  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_rt_swift_release to void (%T18yield_once_biggish12SomeSubclassC*)*)(%T18yield_once_biggish12SomeSubclassC* [[R3]])
+  // CHECK:         call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T18yield_once_biggish12SomeSubclassC*)*)(%T18yield_once_biggish12SomeSubclassC* [[R0]])
+  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T18yield_once_biggish12SomeSubclassC*)*)(%T18yield_once_biggish12SomeSubclassC* [[R1]])
+  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T18yield_once_biggish12SomeSubclassC*)*)(%T18yield_once_biggish12SomeSubclassC* [[R2]])
+  // CHECK-NEXT:    call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T18yield_once_biggish12SomeSubclassC*)*)(%T18yield_once_biggish12SomeSubclassC* [[R3]])
   destroy_value %value : $Biggish<SomeSubclass>
 
   // CHECK-NEXT:    ret void
diff --git a/test/Inputs/conditional_conformance_basic_conformances.swift b/test/Inputs/conditional_conformance_basic_conformances.swift
index 10fb901..79f5d93 100644
--- a/test/Inputs/conditional_conformance_basic_conformances.swift
+++ b/test/Inputs/conditional_conformance_basic_conformances.swift
@@ -69,7 +69,7 @@
 // CHECK-NEXT:    [[COUNT_PTR:%.*]] = getelementptr inbounds %swift.witness_table_slice, %swift.witness_table_slice* %conditional.tables, i32 0, i32 1
 // CHECK-NEXT:    store i64 %2, i64* [[COUNT_PTR]], align 8
 // CHECK-NEXT:    [[CAST_CONDITIONAL_TABLES:%.*]] = bitcast %swift.witness_table_slice* %conditional.tables to i8**
-// CHECK-NEXT:    [[TABLE:%.*]] = call i8** @swift_rt_swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlWG", %swift.type* %0, i8** [[CAST_CONDITIONAL_TABLES]])
+// CHECK-NEXT:    [[TABLE:%.*]] = call i8** @swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlWG", %swift.type* %0, i8** [[CAST_CONDITIONAL_TABLES]])
 // CHECK-NEXT:    ret i8** [[TABLE]]
 // CHECK-NEXT:  }
 
@@ -197,7 +197,7 @@
 // CHECK-NEXT:    [[COUNT_PTR:%.*]] = getelementptr inbounds %swift.witness_table_slice, %swift.witness_table_slice* %conditional.tables, i32 0, i32 1
 // CHECK-NEXT:    store i64 %2, i64* [[COUNT_PTR]], align 8
 // CHECK-NEXT:    [[CAST_CONDITIONAL_TABLES:%.*]] = bitcast %swift.witness_table_slice* %conditional.tables to i8**
-// CHECK-NEXT:    [[TABLE:%.*]] = call i8** @swift_rt_swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlWG", %swift.type* %0, i8** [[CAST_CONDITIONAL_TABLES]])
+// CHECK-NEXT:    [[TABLE:%.*]] = call i8** @swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlWG", %swift.type* %0, i8** [[CAST_CONDITIONAL_TABLES]])
 // CHECK-NEXT:    ret i8** [[TABLE]]
 // CHECK-NEXT:  }
 
diff --git a/test/Inputs/conditional_conformance_subclass.swift b/test/Inputs/conditional_conformance_subclass.swift
index 878f55e..3bbf4af 100644
--- a/test/Inputs/conditional_conformance_subclass.swift
+++ b/test/Inputs/conditional_conformance_subclass.swift
@@ -69,7 +69,7 @@
 // CHECK-NEXT:    [[COUNT_PTR:%.*]] = getelementptr inbounds %swift.witness_table_slice, %swift.witness_table_slice* %conditional.tables, i32 0, i32 1
 // CHECK-NEXT:    store i64 %2, i64* [[COUNT_PTR]], align 8
 // CHECK-NEXT:    [[CAST_CONDITIONAL_TABLES:%.*]] = bitcast %swift.witness_table_slice* %conditional.tables to i8**
-// CHECK-NEXT:    [[TABLE:%.*]] = call i8** @swift_rt_swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S32conditional_conformance_subclass4BaseCyxGAA2P1A2A2P2RzlWG", %swift.type* %0, i8** [[CAST_CONDITIONAL_TABLES]])
+// CHECK-NEXT:    [[TABLE:%.*]] = call i8** @swift_getGenericWitnessTable(%swift.generic_witness_table_cache* @"$S32conditional_conformance_subclass4BaseCyxGAA2P1A2A2P2RzlWG", %swift.type* %0, i8** [[CAST_CONDITIONAL_TABLES]])
 // CHECK-NEXT:    ret i8** [[TABLE]]
 // CHECK-NEXT:  }
 
diff --git a/test/Inputs/conditional_conformance_with_assoc.swift b/test/Inputs/conditional_conformance_with_assoc.swift
index 3d35d1b..b43816a 100644
--- a/test/Inputs/conditional_conformance_with_assoc.swift
+++ b/test/Inputs/conditional_conformance_with_assoc.swift
@@ -180,8 +180,8 @@
 
 // CHECK-LABEL: define{{( protected)?}} swiftcc void @"$S34conditional_conformance_with_assoc09concrete_E0yyF"() #0 {
 // CHECK-NEXT:  entry:
-// CHECK-NEXT:    %0 = call %swift.type* @"$S34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMa"() #10
-// CHECK-NEXT:    %1 = call i8** @"$S34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWl"() #10
+// CHECK-NEXT:    %0 = call %swift.type* @"$S34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMa"()
+// CHECK-NEXT:    %1 = call i8** @"$S34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWl"()
 // CHECK-NEXT:    call swiftcc void @"$S34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(%swift.type* %0, %swift.type* %0, i8** %1)
 // CHECK-NEXT:    ret void
 // CHECK-NEXT: }
@@ -196,7 +196,7 @@
 // CHECK-NEXT:    br i1 [[IS_NULL]], label %cacheIsNull, label %cont
 
 // CHECK:       cacheIsNull:
-// CHECK-NEXT:    [[Double_TYPE:%.*]] = call %swift.type* @"$S34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMa"() #10
+// CHECK-NEXT:    [[Double_TYPE:%.*]] = call %swift.type* @"$S34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMa"()
 // CHECK-NEXT:    [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [3 x i8**], [3 x i8**]* %conditional.requirement.buffer, i32 0, i32 0
 // CHECK-NEXT:    [[C_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0
 // CHECK-NEXT:    store i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @"$S34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", i32 0, i32 0), i8*** [[C_P3_PTR]], align 8
diff --git a/test/Interpreter/enum.swift b/test/Interpreter/enum.swift
index 37cba79..2a44c7d 100644
--- a/test/Interpreter/enum.swift
+++ b/test/Interpreter/enum.swift
@@ -651,3 +651,19 @@
 }
 
 run()
+
+public enum Indirect<T> {
+  indirect case payload((T, other: T))
+  case none
+}
+
+public func testIndirectEnum<T>(_ payload: T) -> Indirect<T> {
+  return Indirect.payload((payload, other: payload))
+}
+
+public func testCase(_ closure: @escaping (Int) -> ()) -> Indirect<(Int) -> ()> {
+  return testIndirectEnum(closure)
+}
+
+// CHECK: payload((Function), other: (Function))
+print(testCase({ _ in }))
diff --git a/test/LLVMPasses/basic.ll b/test/LLVMPasses/basic.ll
index 7946dbb..52ca7be 100644
--- a/test/LLVMPasses/basic.ll
+++ b/test/LLVMPasses/basic.ll
@@ -8,16 +8,16 @@
 %objc_object = type opaque
 %swift.bridge = type opaque
 
-declare void @swift_unknownRetain(%swift.refcounted*)
+declare %swift.refcounted* @swift_unknownRetain(%swift.refcounted* returned)
 declare void @swift_unknownRelease(%swift.refcounted*)
 declare %objc_object* @objc_retain(%objc_object*)
 declare void @objc_release(%objc_object*)
 declare %swift.refcounted* @swift_allocObject(%swift.heapmetadata* , i64, i64) nounwind
 declare void @swift_release(%swift.refcounted* nocapture)
-declare void @swift_retain(%swift.refcounted* ) nounwind
+declare %swift.refcounted* @swift_retain(%swift.refcounted* returned) nounwind
 declare %swift.bridge* @swift_bridgeObjectRetain(%swift.bridge*)
 declare void @swift_bridgeObjectRelease(%swift.bridge*)
-declare void @swift_retainUnowned(%swift.refcounted*)
+declare %swift.refcounted* @swift_retainUnowned(%swift.refcounted* returned)
 
 declare void @user(%swift.refcounted *) nounwind
 declare void @user_objc(%objc_object*) nounwind
@@ -50,9 +50,9 @@
 
 define void @trivial_retain_release(%swift.refcounted* %P, %objc_object* %O, %swift.bridge * %B) {
 entry:
-  tail call void @swift_retain(%swift.refcounted* %P)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %P)
   tail call void @swift_release(%swift.refcounted* %P) nounwind
-  tail call void @swift_unknownRetain(%swift.refcounted* %P)
+  tail call %swift.refcounted* @swift_unknownRetain(%swift.refcounted* %P)
   tail call void @swift_unknownRelease(%swift.refcounted* %P)
   tail call %objc_object* @objc_retain(%objc_object* %O)
   tail call void @objc_release(%objc_object* %O)
@@ -72,15 +72,15 @@
 
 define void @trivial_retain_release_with_rcidentity(%swift.refcounted* %P, %objc_object* %O, %swift.bridge * %B) {
 entry:
-  tail call void @swift_retain(%swift.refcounted* %P)
-  %0 = bitcast %swift.refcounted* %P to %swift.refcounted*
-  tail call void @swift_release(%swift.refcounted* %0) nounwind
-  tail call void @swift_unknownRetain(%swift.refcounted* %P)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %P)
   %1 = bitcast %swift.refcounted* %P to %swift.refcounted*
-  tail call void @swift_unknownRelease(%swift.refcounted* %1)
+  tail call void @swift_release(%swift.refcounted* %1) nounwind
+  tail call %swift.refcounted* @swift_unknownRetain(%swift.refcounted* %P)
+  %3 = bitcast %swift.refcounted* %P to %swift.refcounted*
+  tail call void @swift_unknownRelease(%swift.refcounted* %3)
   tail call %objc_object* @objc_retain(%objc_object* %O)
-  %3 = bitcast %objc_object* %O to %objc_object*
-  tail call void @objc_release(%objc_object* %3)
+  %5 = bitcast %objc_object* %O to %objc_object*
+  tail call void @objc_release(%objc_object* %5)
   call void @user(%swift.refcounted* %P) nounwind
   ret void
 }
@@ -95,7 +95,7 @@
 
 
 define void @retain_motion1(%swift.refcounted* %A) {
-  tail call void @swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   %B = bitcast %swift.refcounted* %A to i32*
   store i32 42, i32* %B
   tail call void @swift_release(%swift.refcounted* %A) nounwind
@@ -122,7 +122,7 @@
 define void @swiftunknown_retain_release_null() {
 entry:
   tail call void @swift_unknownRelease(%swift.refcounted* null)
-  tail call void @swift_unknownRetain(%swift.refcounted* null) nounwind
+  tail call %swift.refcounted* @swift_unknownRetain(%swift.refcounted* null) nounwind
   ret void
 }
 
@@ -144,7 +144,7 @@
 ; CHECK: swift_fixLifetime
 ; CHECK: swift_release
 define void @swift_fixLifetimeTest(%swift.refcounted* %A) {
-  tail call void @swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A) nounwind
   call void @__swift_fixLifetime(%swift.refcounted* %A)
   tail call void @swift_release(%swift.refcounted* %A) nounwind
@@ -157,8 +157,8 @@
 ; CHECK-NOT: swift_release
 ; CHECK: ret
 define void @move_retain_across_unknown_retain(%swift.refcounted* %A, %swift.refcounted* %B) {
-  tail call void @swift_retain(%swift.refcounted* %A)
-  tail call void @swift_unknownRetain(%swift.refcounted* %B)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_unknownRetain(%swift.refcounted* %B)
   tail call void @swift_release(%swift.refcounted* %A) nounwind
   ret void
 }
@@ -169,7 +169,7 @@
 ; CHECK-NOT: swift_release
 ; CHECK: ret
 define void @move_retain_across_objc_retain(%swift.refcounted* %A, %objc_object* %B) {
-  tail call void @swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   tail call %objc_object* @objc_retain(%objc_object* %B)
   tail call void @swift_release(%swift.refcounted* %A) nounwind
   ret void
@@ -180,7 +180,7 @@
 ; CHECK-NOT: swift_release
 ; CHECK: ret
 define i32 @move_retain_across_load(%swift.refcounted* %A, i32* %ptr) {
-  tail call void @swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   %val = load i32, i32* %ptr
   tail call void @swift_release(%swift.refcounted* %A) nounwind
   ret i32 %val
@@ -188,13 +188,13 @@
 
 ; CHECK-LABEL: @move_retain_but_not_release_across_objc_fix_lifetime
 ; CHECK: call void @__swift_fixLifetime
-; CHECK-NEXT: tail call void @swift_retain
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain
 ; CHECK-NEXT: call void @user
 ; CHECK-NEXT: call void @__swift_fixLifetime
 ; CHECK-NEXT: call void @swift_release
 ; CHECK-NEXT: ret
 define void @move_retain_but_not_release_across_objc_fix_lifetime(%swift.refcounted* %A) {
-  tail call void @swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @__swift_fixLifetime(%swift.refcounted* %A) nounwind
   call void @user(%swift.refcounted* %A) nounwind
   call void @__swift_fixLifetime(%swift.refcounted* %A) nounwind
@@ -210,7 +210,7 @@
 ; CHECK-NEXT: call void @swift_checkUnowned
 ; CHECK-NEXT: ret
 define void @optimize_retain_unowned(%swift.refcounted* %A) {
-  tail call void @swift_retainUnowned(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retainUnowned(%swift.refcounted* %A)
   %value = bitcast %swift.refcounted* %A to i64*
 
   ; loads from the %A and speculatively executable instructions
@@ -223,14 +223,14 @@
 }
 
 ; CHECK-LABEL: @dont_optimize_retain_unowned
-; CHECK-NEXT: call void @swift_retainUnowned
+; CHECK-NEXT: call %swift.refcounted* @swift_retainUnowned
 ; CHECK-NEXT: bitcast
 ; CHECK-NEXT: load
 ; CHECK-NEXT: load
 ; CHECK-NEXT: call void @swift_release
 ; CHECK-NEXT: ret
 define void @dont_optimize_retain_unowned(%swift.refcounted* %A) {
-  tail call void @swift_retainUnowned(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retainUnowned(%swift.refcounted* %A)
   %value = bitcast %swift.refcounted* %A to i64**
 
   %L1 = load i64*, i64** %value, align 8
@@ -242,12 +242,12 @@
 }
 
 ; CHECK-LABEL: @dont_optimize_retain_unowned2
-; CHECK-NEXT: call void @swift_retainUnowned
+; CHECK-NEXT: call %swift.refcounted* @swift_retainUnowned
 ; CHECK-NEXT: store
 ; CHECK-NEXT: call void @swift_release
 ; CHECK-NEXT: ret
 define void @dont_optimize_retain_unowned2(%swift.refcounted* %A, i32* %B) {
-  tail call void @swift_retainUnowned(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retainUnowned(%swift.refcounted* %A)
 
   ; store to an unknown address
   store i32 42, i32* %B
@@ -257,12 +257,12 @@
 }
 
 ; CHECK-LABEL: @dont_optimize_retain_unowned3
-; CHECK-NEXT: call void @swift_retainUnowned
+; CHECK-NEXT: call %swift.refcounted* @swift_retainUnowned
 ; CHECK-NEXT: call void @unknown_func
 ; CHECK-NEXT: call void @swift_release
 ; CHECK-NEXT: ret
 define void @dont_optimize_retain_unowned3(%swift.refcounted* %A) {
-  tail call void @swift_retainUnowned(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retainUnowned(%swift.refcounted* %A)
 
   ; call of an unknown function
   call void @unknown_func()
@@ -272,15 +272,15 @@
 }
 
 ; CHECK-LABEL: @dont_optimize_retain_unowned4
-; CHECK-NEXT: call void @swift_retainUnowned
-; CHECK-NEXT: call void @swift_retain
+; CHECK-NEXT: call %swift.refcounted* @swift_retainUnowned
+; CHECK-NEXT: call %swift.refcounted* @swift_retain
 ; CHECK-NEXT: call void @swift_release
 ; CHECK-NEXT: ret
 define void @dont_optimize_retain_unowned4(%swift.refcounted* %A, %swift.refcounted* %B) {
-  tail call void @swift_retainUnowned(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retainUnowned(%swift.refcounted* %A)
 
   ; retain of an unknown reference (%B could be equal to %A)
-  tail call void @swift_retain(%swift.refcounted* %B)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %B)
 
   tail call void @swift_release(%swift.refcounted* %A)
   ret void
@@ -295,7 +295,7 @@
 ; CHECK-NEXT: load
 ; CHECK-NEXT: ret
 define void @remove_redundant_check_unowned(%swift.refcounted* %A, %swift.refcounted* %B, i64* %C) {
-  tail call void @swift_retainUnowned(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retainUnowned(%swift.refcounted* %A)
   %addr = bitcast %swift.refcounted* %A to i64*
   %L1 = load i64, i64* %addr, align 8
   tail call void @swift_release(%swift.refcounted* %A)
@@ -304,7 +304,7 @@
   %L2 = load i64, i64* %C, align 8
   store i64 42, i64* %C
 
-  tail call void @swift_retainUnowned(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retainUnowned(%swift.refcounted* %A)
   %L3 = load i64, i64* %addr, align 8
   tail call void @swift_release(%swift.refcounted* %A)
   ret void
@@ -319,7 +319,7 @@
 ; CHECK-NEXT: call void @swift_checkUnowned
 ; CHECK-NEXT: ret
 define void @dont_remove_redundant_check_unowned(%swift.refcounted* %A, %swift.refcounted* %B, i64* %C) {
-  tail call void @swift_retainUnowned(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retainUnowned(%swift.refcounted* %A)
   %addr = bitcast %swift.refcounted* %A to i64*
   %L1 = load i64, i64* %addr, align 8
   tail call void @swift_release(%swift.refcounted* %A)
@@ -327,7 +327,7 @@
   ; Could do a release of %A
   call void @unknown_func()
 
-  tail call void @swift_retainUnowned(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retainUnowned(%swift.refcounted* %A)
   %L3 = load i64, i64* %addr, align 8
   tail call void @swift_release(%swift.refcounted* %A)
   ret void
@@ -339,9 +339,9 @@
 ; CHECK-NEXT: swift_retain
 ; CHECK-NEXT: ret
 define void @unknown_retain_promotion(%swift.refcounted* %A) {
-  tail call void @swift_unknownRetain(%swift.refcounted* %A)
-  tail call void @swift_unknownRetain(%swift.refcounted* %A)
-  tail call void @swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_unknownRetain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_unknownRetain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   ret void
 }
 
@@ -362,10 +362,10 @@
 ; CHECK-NOT: swift_retain
 ; CHECK: ret
 define void @unknown_retain_nopromotion(%swift.refcounted* %A) {
-  tail call void @swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   br label %bb1
 bb1:
-  tail call void @swift_unknownRetain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_unknownRetain(%swift.refcounted* %A)
   ret void
 }
 
diff --git a/test/LLVMPasses/contract.ll b/test/LLVMPasses/contract.ll
index 1e86a4f..3d643f2 100644
--- a/test/LLVMPasses/contract.ll
+++ b/test/LLVMPasses/contract.ll
@@ -7,11 +7,11 @@
 %swift.heapmetadata = type { i64 (%swift.refcounted*)*, i64 (%swift.refcounted*)* }
 %swift.bridge = type opaque
 
-declare %swift.refcounted* @swift_rt_swift_allocObject(%swift.heapmetadata* , i64, i64) nounwind
+declare %swift.refcounted* @swift_allocObject(%swift.heapmetadata* , i64, i64) nounwind
 declare %swift.bridge* @swift_bridgeObjectRetain(%swift.bridge*)
 declare void @swift_bridgeObjectRelease(%swift.bridge* )
-declare void @swift_rt_swift_release(%swift.refcounted* nocapture)
-declare %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* ) nounwind
+declare void @swift_release(%swift.refcounted* nocapture)
+declare %swift.refcounted* @swift_retain(%swift.refcounted* ) nounwind
 declare void @swift_unknownRelease(%swift.refcounted* nocapture)
 declare %swift.refcounted* @swift_unknownRetain(%swift.refcounted* ) nounwind
 declare void @__swift_fixLifetime(%swift.refcounted*)
@@ -42,37 +42,37 @@
 ; CHECK: entry:
 ; CHECK-NEXT: br i1 undef
 ; CHECK: bb1:
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain_n(%swift.refcounted* %A, i32 2)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain_n(%swift.refcounted* %A, i32 2)
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
 ; CHECK-NEXT: br label %bb3
 ; CHECK: bb2:
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
 ; CHECK-NEXT: br label %bb3
 ; CHECK: bb3:
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
 ; CHECK-NEXT: ret %swift.refcounted* %A
 define %swift.refcounted* @swift_contractRetainN(%swift.refcounted* %A) {
 entry:
   br i1 undef, label %bb1, label %bb2
 
 bb1:
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @noread_user(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @noread_user(%swift.refcounted* %A)
   br label %bb3
 
 bb2:
   call void @noread_user(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @noread_user(%swift.refcounted* %A)
   br label %bb3
 
 bb3:
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   ret %swift.refcounted* %A
 }
 
@@ -80,31 +80,31 @@
 ; CHECK: entry:
 ; CHECK-NEXT: br i1 undef
 ; CHECK: bb1:
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain_n(%swift.refcounted* %A, i32 2)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain_n(%swift.refcounted* %A, i32 2)
 ; CHECK-NEXT: %1 = bitcast %swift.refcounted* %A to %swift.refcounted*
 ; CHECK-NEXT: br label %bb3
 ; CHECK: bb2:
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
 ; CHECK-NEXT: br label %bb3
 ; CHECK: bb3:
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
 ; CHECK-NEXT: ret %swift.refcounted* %A
 define %swift.refcounted* @swift_contractRetainNWithRCIdentity(%swift.refcounted* %A) {
 entry:
   br i1 undef, label %bb1, label %bb2
 
 bb1:
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   %1 = bitcast %swift.refcounted* %A to %swift.refcounted*
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %1)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %1)
   br label %bb3
 
 bb2:
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   br label %bb3
 
 bb3:
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   ret %swift.refcounted* %A
 }
 
@@ -113,36 +113,36 @@
 ; CHECK-NEXT: br i1 undef
 ; CHECK: bb1:
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
-; CHECK-NEXT: tail call void @swift_rt_swift_release_n(%swift.refcounted* %A, i32 2)
+; CHECK-NEXT: tail call void @swift_release_n(%swift.refcounted* %A, i32 2)
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
 ; CHECK-NEXT: br label %bb3
 ; CHECK: bb2:
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
-; CHECK-NEXT: tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+; CHECK-NEXT: tail call void @swift_release(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
 ; CHECK-NEXT: br label %bb3
 ; CHECK: bb3:
-; CHECK-NEXT: tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+; CHECK-NEXT: tail call void @swift_release(%swift.refcounted* %A)
 ; CHECK-NEXT: ret %swift.refcounted* %A
 define %swift.refcounted* @swift_contractReleaseN(%swift.refcounted* %A) {
 entry:
   br i1 undef, label %bb1, label %bb2
 
 bb1:
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @noread_user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @noread_user(%swift.refcounted* %A)
   br label %bb3
 
 bb2:
   call void @noread_user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @noread_user(%swift.refcounted* %A)
   br label %bb3
 
 bb3:
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   ret %swift.refcounted* %A
 }
 
@@ -151,30 +151,30 @@
 ; CHECK-NEXT: br i1 undef
 ; CHECK: bb1:
 ; CHECK-NEXT: %0 = bitcast %swift.refcounted* %A to %swift.refcounted*
-; CHECK-NEXT: tail call void @swift_rt_swift_release_n(%swift.refcounted* %A, i32 2)
+; CHECK-NEXT: tail call void @swift_release_n(%swift.refcounted* %A, i32 2)
 ; CHECK-NEXT: br label %bb3
 ; CHECK: bb2:
-; CHECK-NEXT: tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+; CHECK-NEXT: tail call void @swift_release(%swift.refcounted* %A)
 ; CHECK-NEXT: br label %bb3
 ; CHECK: bb3:
-; CHECK-NEXT: tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+; CHECK-NEXT: tail call void @swift_release(%swift.refcounted* %A)
 ; CHECK-NEXT: ret %swift.refcounted* %A
 define %swift.refcounted* @swift_contractReleaseNWithRCIdentity(%swift.refcounted* %A) {
 entry:
   br i1 undef, label %bb1, label %bb2
 
 bb1:
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   %0 = bitcast %swift.refcounted* %A to %swift.refcounted*
-  tail call void @swift_rt_swift_release(%swift.refcounted* %0)
+  tail call void @swift_release(%swift.refcounted* %0)
   br label %bb3
 
 bb2:
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   br label %bb3
 
 bb3:
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   ret %swift.refcounted* %A
 }
 
@@ -183,112 +183,112 @@
 ; read the reference count of the object.
 
 ; CHECK-LABEL: define{{( protected)?}} %swift.refcounted* @swift_contractRetainNWithUnknown(%swift.refcounted* %A) {
-; CHECK-NOT: call %swift.refcounted* @swift_rt_swift_retain_n
+; CHECK-NOT: call %swift.refcounted* @swift_retain_n
 define %swift.refcounted* @swift_contractRetainNWithUnknown(%swift.refcounted* %A) {
 entry:
   br i1 undef, label %bb1, label %bb2
 
 bb1:
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
   br label %bb3
 
 bb2:
   call void @user(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
   br label %bb3
 
 bb3:
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   ret %swift.refcounted* %A
 }
 
 ; CHECK-LABEL: define{{( protected)?}} %swift.refcounted* @swift_contractReleaseNWithUnknown(%swift.refcounted* %A) {
-; CHECK-NOT: call void @swift_rt_swift_release_n
+; CHECK-NOT: call void @swift_release_n
 define %swift.refcounted* @swift_contractReleaseNWithUnknown(%swift.refcounted* %A) {
 entry:
   br i1 undef, label %bb1, label %bb2
 
 bb1:
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
   br label %bb3
 
 bb2:
   call void @user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
   br label %bb3
 
 bb3:
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   ret %swift.refcounted* %A
 }
 
 ; But do make sure that we can form retainN, releaseN in between such uses
 ; CHECK-LABEL: define{{( protected)?}} %swift.refcounted* @swift_contractRetainNInterleavedWithUnknown(%swift.refcounted* %A) {
 ; CHECK: bb1:
-; CHECK: tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+; CHECK: tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @user(%swift.refcounted* %A)
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain_n(%swift.refcounted* %A, i32 3)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain_n(%swift.refcounted* %A, i32 3)
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @user(%swift.refcounted* %A)
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain_n(%swift.refcounted* %A, i32 2)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain_n(%swift.refcounted* %A, i32 2)
 ; CHECK-NEXT: call void @user(%swift.refcounted* %A)
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
 ; CHECK-NEXT: br label %bb3
 
 ; CHECK: bb2:
 ; CHECK-NEXT: call void @user(%swift.refcounted* %A)
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @user(%swift.refcounted* %A)
 ; CHECK-NEXT: br label %bb3
 
 ; CHECK: bb3:
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
 ; CHECK-NEXT: ret %swift.refcounted* %A
 define %swift.refcounted* @swift_contractRetainNInterleavedWithUnknown(%swift.refcounted* %A) {
 entry:
   br i1 undef, label %bb1, label %bb2
 
 bb1:
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @noread_user(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @noread_user(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   br label %bb3
 
 bb2:
   call void @user(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
   br label %bb3
 
 bb3:
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   ret %swift.refcounted* %A
 }
 
 ; CHECK-LABEL: define{{( protected)?}} %swift.refcounted* @swift_contractReleaseNInterleavedWithUnknown(%swift.refcounted* %A) {
 ; CHECK: bb1:
-; CHECK-NEXT: @swift_rt_swift_release(
+; CHECK-NEXT: @swift_release(
 ; CHECK-NEXT: @user
 ; CHECK-NEXT: @noread_user
-; CHECK-NEXT: @swift_rt_swift_release_n
+; CHECK-NEXT: @swift_release_n
 ; CHECK-NEXT: @user
 ; CHECK-NEXT: br label %bb3
 define %swift.refcounted* @swift_contractReleaseNInterleavedWithUnknown(%swift.refcounted* %A) {
@@ -296,78 +296,78 @@
   br i1 undef, label %bb1, label %bb2
 
 bb1:
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @noread_user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
   br label %bb3
 
 bb2:
   call void @user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
   br label %bb3
 
 bb3:
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   ret %swift.refcounted* %A
 }
 
 ; CHECK-LABEL: define{{( protected)?}} %swift.refcounted* @swift_contractRetainReleaseNInterleavedWithUnknown(%swift.refcounted* %A) {
 ; CHECK: bb1:
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @user(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
-; CHECK-NEXT: tail call void @swift_rt_swift_release_n(%swift.refcounted* %A, i32 2)
+; CHECK-NEXT: tail call void @swift_release_n(%swift.refcounted* %A, i32 2)
 ; CHECK-NEXT: call void @user(%swift.refcounted* %A)
-; CHECK-NEXT: tail call %swift.refcounted* @swift_rt_swift_retain_n(%swift.refcounted* %A, i32 2)
-; CHECK-NEXT: tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+; CHECK-NEXT: tail call %swift.refcounted* @swift_retain_n(%swift.refcounted* %A, i32 2)
+; CHECK-NEXT: tail call void @swift_release(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @user(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @noread_user(%swift.refcounted* %A)
-; CHECK-NEXT: tail call void @swift_rt_swift_release_n(%swift.refcounted* %A, i32 2)
+; CHECK-NEXT: tail call void @swift_release_n(%swift.refcounted* %A, i32 2)
 ; CHECK-NEXT: call void @user(%swift.refcounted* %A)
 ; CHECK-NEXT: br label %bb3
 ; CHECK: bb2:
 ; CHECK-NEXT: call void @user(%swift.refcounted* %A)
-; CHECK-NEXT: call void @swift_rt_swift_release(%swift.refcounted* %A)
+; CHECK-NEXT: call void @swift_release(%swift.refcounted* %A)
 ; CHECK-NEXT: call void @user(%swift.refcounted* %A)
 ; CHECK-NEXT: br label %bb3
 
 ; CHECK: bb3:
-; CHECK-NEXT: tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+; CHECK-NEXT: tail call void @swift_release(%swift.refcounted* %A)
 ; CHECK-NEXT: ret %swift.refcounted* %A
 define %swift.refcounted* @swift_contractRetainReleaseNInterleavedWithUnknown(%swift.refcounted* %A) {
 entry:
   br i1 undef, label %bb1, label %bb2
 
 bb1:
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @noread_user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
-  tail call %swift.refcounted* @swift_rt_swift_retain(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
+  tail call %swift.refcounted* @swift_retain(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @noread_user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
 
   br label %bb3
 
 bb2:
   call void @user(%swift.refcounted* %A)
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   call void @user(%swift.refcounted* %A)
   br label %bb3
 
 bb3:
-  tail call void @swift_rt_swift_release(%swift.refcounted* %A)
+  tail call void @swift_release(%swift.refcounted* %A)
   ret %swift.refcounted* %A
 }
 
diff --git a/test/SIL/Parser/indirect_enum.sil b/test/SIL/Parser/indirect_enum.sil
index f550c84..f83ed00 100644
--- a/test/SIL/Parser/indirect_enum.sil
+++ b/test/SIL/Parser/indirect_enum.sil
@@ -27,7 +27,7 @@
   %b = project_box %a : $<τ_0_0> { var τ_0_0 } <T>, 0
 
   %c = unchecked_enum_data %e : $TreeA<T>, #TreeA.Branch!enumelt.1
-  %d = project_box %c : $<τ_0_0> { var τ_0_0 } <(left: TreeA<T>, right: TreeA<T>)>, 0
+  %d = project_box %c : $<τ_0_0> { var (left: TreeA<τ_0_0>, right: TreeA<τ_0_0>) } <T>, 0
 
   return undef : $()
 }
@@ -38,7 +38,7 @@
   destroy_addr %a : $*T
 
   %c = unchecked_take_enum_data_addr %e : $*TreeB<T>, #TreeB.Branch!enumelt.1
-  %d = load [take] %c : $*<τ_0_0> { var τ_0_0 } <(left: TreeB<T>, right: TreeB<T>)>
+  %d = load [take] %c : $*<τ_0_0> { var (left: TreeB<τ_0_0>, right: TreeB<τ_0_0>) } <T>
 
   return undef : $()
 }
@@ -49,7 +49,7 @@
   store %a to [trivial] undef : $*Int
 
   %c = unchecked_enum_data %e : $TreeInt, #TreeInt.Branch!enumelt.1
-  %d = project_box %c : $<τ_0_0> { var τ_0_0 } <(left: TreeInt, right: TreeInt)>, 0
+  %d = project_box %c : ${ var (left: TreeInt, right: TreeInt) }, 0
 
   return undef : $()
 }
diff --git a/test/SILGen/enum.swift b/test/SILGen/enum.swift
index 0134f45..af87a52 100644
--- a/test/SILGen/enum.swift
+++ b/test/SILGen/enum.swift
@@ -190,3 +190,14 @@
 func Foo_cases() {
   _ = Foo.A
 }
+
+enum Indirect<T> {
+  indirect case payload((T, other: T))
+  case none
+}
+// CHECK-LABEL: sil{{.*}} @{{.*}}makeIndirectEnum{{.*}} : $@convention(thin) <T> (@in T) -> @owned Indirect<T>
+// CHECK: [[BOX:%.*]] = alloc_box $<τ_0_0> { var (τ_0_0, other: τ_0_0) } <T>
+// CHECK: enum $Indirect<T>, #Indirect.payload!enumelt.1, [[BOX]] : $<τ_0_0> { var (τ_0_0, other: τ_0_0) } <T>
+func makeIndirectEnum<T>(_ payload: T) -> Indirect<T> {
+  return Indirect.payload((payload, other: payload))
+}
diff --git a/test/SILGen/indirect_enum.swift b/test/SILGen/indirect_enum.swift
index 0f5d9a0..bae2be1 100644
--- a/test/SILGen/indirect_enum.swift
+++ b/test/SILGen/indirect_enum.swift
@@ -23,7 +23,7 @@
   let _ = TreeA<T>.Leaf(t)
 
 // CHECK-NEXT:    [[METATYPE:%.*]] = metatype $@thin TreeA<T>.Type
-// CHECK-NEXT:    [[BOX:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <(left: TreeA<T>, right: TreeA<T>)>
+// CHECK-NEXT:    [[BOX:%.*]] = alloc_box $<τ_0_0> { var (left: TreeA<τ_0_0>, right: TreeA<τ_0_0>) } <T>
 // CHECK-NEXT:    [[PB:%.*]] = project_box [[BOX]]
 // CHECK-NEXT:    [[LEFT:%.*]] = tuple_element_addr [[PB]] : $*(left: TreeA<T>, right: TreeA<T>), 0
 // CHECK-NEXT:    [[RIGHT:%.*]] = tuple_element_addr [[PB]] : $*(left: TreeA<T>, right: TreeA<T>), 1
@@ -50,7 +50,7 @@
 func TreeA_reabstract(_ f: @escaping (Int) -> Int) {
 // CHECK: bb0([[ARG:%.*]] : $@callee_guaranteed (Int) -> Int):
 // CHECK:         [[METATYPE:%.*]] = metatype $@thin TreeA<(Int) -> Int>.Type
-// CHECK-NEXT:    [[BOX:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <@callee_guaranteed (@in Int) -> @out Int>
+// CHECK-NEXT:    [[BOX:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <(Int) -> Int>
 // CHECK-NEXT:    [[PB:%.*]] = project_box [[BOX]]
 // CHECK-NEXT:    [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
 // CHECK-NEXT:    [[ARG_COPY:%.*]] = copy_value [[BORROWED_ARG]]
@@ -92,7 +92,7 @@
   let _ = TreeB<T>.Leaf(t)
 
 // CHECK-NEXT:    [[METATYPE:%.*]] = metatype $@thin TreeB<T>.Type
-// CHECK-NEXT:    [[BOX:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <(left: TreeB<T>, right: TreeB<T>)>
+// CHECK-NEXT:    [[BOX:%.*]] = alloc_box $<τ_0_0> { var (left: TreeB<τ_0_0>, right: TreeB<τ_0_0>) } <T>
 // CHECK-NEXT:    [[PB:%.*]] = project_box [[BOX]]
 // CHECK-NEXT:    [[LEFT:%.*]] = tuple_element_addr [[PB]]
 // CHECK-NEXT:    [[RIGHT:%.*]] = tuple_element_addr [[PB]]
@@ -127,7 +127,7 @@
   let _ = TreeInt.Leaf(t)
 
 // CHECK-NEXT:    [[METATYPE:%.*]] = metatype $@thin TreeInt.Type
-// CHECK-NEXT:    [[BOX:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <(left: TreeInt, right: TreeInt)>
+// CHECK-NEXT:    [[BOX:%.*]] = alloc_box ${ var (left: TreeInt, right: TreeInt) }
 // CHECK-NEXT:    [[PB:%.*]] = project_box [[BOX]]
 // CHECK-NEXT:    [[LEFT:%.*]] = tuple_element_addr [[PB]]
 // CHECK-NEXT:    [[RIGHT:%.*]] = tuple_element_addr [[PB]]
@@ -194,7 +194,7 @@
   case .Leaf(let x):
     b(x)
 
-  // CHECK:     [[BRANCH_CASE]]([[NODE_BOX:%.*]] : $<τ_0_0> { var τ_0_0 } <(left: TreeA<T>, right: TreeA<T>)>):
+  // CHECK:     [[BRANCH_CASE]]([[NODE_BOX:%.*]] : $<τ_0_0> { var (left: TreeA<τ_0_0>, right: TreeA<τ_0_0>) } <T>):
   // CHECK:       [[TUPLE_ADDR:%.*]] = project_box [[NODE_BOX]]
   // CHECK:       [[TUPLE:%.*]] = load_borrow [[TUPLE_ADDR]]
   // CHECK:       [[LEFT:%.*]] = tuple_extract [[TUPLE]] {{.*}}, 0
@@ -370,7 +370,7 @@
     // CHECK: [[NO]]([[ORIGINAL_VALUE:%.*]] : $TreeA<T>):
     // CHECK:   destroy_value [[ORIGINAL_VALUE]]
     // CHECK:   end_borrow [[BORROWED_ARG_3]] from [[ARG]]
-    // CHECK: [[YES]]([[BOX:%.*]] : $<τ_0_0> { var τ_0_0 } <(left: TreeA<T>, right: TreeA<T>)>):
+    // CHECK: [[YES]]([[BOX:%.*]] : $<τ_0_0> { var (left: TreeA<τ_0_0>, right: TreeA<τ_0_0>) } <T>):
     // CHECK:   [[VALUE_ADDR:%.*]] = project_box [[BOX]]
     // CHECK:   [[TUPLE:%.*]] = load [take] [[VALUE_ADDR]]
     // CHECK:   [[TUPLE_COPY:%.*]] = copy_value [[TUPLE]]
@@ -425,7 +425,7 @@
     // CHECK: [[NO]]([[ORIGINAL_VALUE:%.*]] : $TreeA<T>):
     // CHECK:   destroy_value [[ORIGINAL_VALUE]]
     // CHECK:   end_borrow [[BORROWED_ARG]] from [[ARG]]
-    // CHECK: [[YES]]([[BOX:%.*]] : $<τ_0_0> { var τ_0_0 } <(left: TreeA<T>, right: TreeA<T>)>):
+    // CHECK: [[YES]]([[BOX:%.*]] : $<τ_0_0> { var (left: TreeA<τ_0_0>, right: TreeA<τ_0_0>) } <T>):
     // CHECK:   [[VALUE_ADDR:%.*]] = project_box [[BOX]]
     // CHECK:   [[TUPLE:%.*]] = load [take] [[VALUE_ADDR]]
     // CHECK:   [[TUPLE_COPY:%.*]] = copy_value [[TUPLE]]
@@ -540,7 +540,7 @@
   // CHECK:   [[ARG_COPY:%.*]] = copy_value [[BORROWED_ARG]]
   // CHECK:   switch_enum [[ARG_COPY]] : $TrivialButIndirect, case #TrivialButIndirect.Direct!enumelt.1:  [[YES:bb[0-9]+]], case #TrivialButIndirect.Indirect!enumelt.1: [[NO:bb[0-9]+]]
   //
-  // CHECK: [[NO]]([[PAYLOAD:%.*]] : $<τ_0_0> { var τ_0_0 } <Int>):
+  // CHECK: [[NO]]([[PAYLOAD:%.*]] : ${ var Int }):
   // CHECK:   destroy_value [[PAYLOAD]]
   // CHECK:   end_borrow [[BORROWED_ARG]] from [[ARG]]
   guard case .Direct(let foo) = x else { return }
@@ -555,7 +555,7 @@
   // CHECK-NOT: destroy_value
   // CHECK:   end_borrow [[BORROWED_ARG]] from [[ARG]]
 
-  // CHECK: [[YES]]([[BOX:%.*]] : $<τ_0_0> { var τ_0_0 } <Int>):
+  // CHECK: [[YES]]([[BOX:%.*]] : ${ var Int }):
   // CHECK:   destroy_value [[BOX]]
 
   guard case .Indirect(let bar) = x else { return }
diff --git a/test/SILOptimizer/predictable_memopt.sil b/test/SILOptimizer/predictable_memopt.sil
index 75ffb68..5972ecb 100644
--- a/test/SILOptimizer/predictable_memopt.sil
+++ b/test/SILOptimizer/predictable_memopt.sil
@@ -436,14 +436,14 @@
 sil @indirect_enum_box : $@convention(thin) (Int) -> IndirectCase {
 // CHECK: bb0([[X:%.*]] : $Int):
 entry(%x : $Int):
-  // CHECK: [[BOX:%.*]] = alloc_box $<τ_0_0> { var τ_0_0 } <Int>
-  %b = alloc_box $<τ_0_0> { var τ_0_0 } <Int>
+  // CHECK: [[BOX:%.*]] = alloc_box ${ var Int }
+  %b = alloc_box ${ var Int }
   // CHECK: [[PB:%.*]] = project_box [[BOX]]
-  %ba = project_box %b : $<τ_0_0> { var τ_0_0 } <Int>, 0
+  %ba = project_box %b : ${ var Int }, 0
   // CHECK: store [[X]] to [[PB]]
   store %x to %ba : $*Int
-  // CHECK: [[E:%.*]] = enum $IndirectCase, #IndirectCase.X!enumelt.1, [[BOX]] : $<τ_0_0> { var τ_0_0 } <Int>
-  %e = enum $IndirectCase, #IndirectCase.X!enumelt.1, %b : $<τ_0_0> { var τ_0_0 } <Int>
+  // CHECK: [[E:%.*]] = enum $IndirectCase, #IndirectCase.X!enumelt.1, [[BOX]] : ${ var Int }
+  %e = enum $IndirectCase, #IndirectCase.X!enumelt.1, %b : ${ var Int }
   // CHECK: return [[E]]
   return %e : $IndirectCase
 }
@@ -837,4 +837,4 @@
 bb2:
   destroy_addr %1 : $*Builtin.NativeObject
   unreachable
-}
\ No newline at end of file
+}
diff --git a/test/lit.site.cfg.in b/test/lit.site.cfg.in
index fb351a1..b8b05ea 100644
--- a/test/lit.site.cfg.in
+++ b/test/lit.site.cfg.in
@@ -74,6 +74,9 @@
 if "@SWIFT_HAVE_WORKING_STD_REGEX@" == "FALSE":
     config.available_features.add('broken_std_regex')
 
+if "@SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS@" == "TRUE":
+    config.available_features.add('runtime_function_counters')
+
 if "@CMAKE_GENERATOR@" == "Xcode":
     xcode_bin_dir = os.path.join(config.llvm_obj_root, "@LLVM_BUILD_TYPE@",
                                  'bin')
diff --git a/test/stdlib/BridgedObjectDebuggerSupport.swift b/test/stdlib/BridgedObjectDebuggerSupport.swift
new file mode 100644
index 0000000..a1950f5
--- /dev/null
+++ b/test/stdlib/BridgedObjectDebuggerSupport.swift
@@ -0,0 +1,98 @@
+// RUN: %target-run-simple-swift
+// REQUIRES: executable_test, objc_interop
+
+import Foundation
+import StdlibUnittest
+
+let StringForPrintObjectTests = TestSuite("StringForPrintObject")
+
+// Wrap stringForPrintObject for convenience. Note that the debugger uses
+// something slightly different to pretty-print (see: debugVal()).
+func printObj<T>(_ x: T) -> String {
+  return _DebuggerSupport.stringForPrintObject(x)
+}
+
+// Check if @x has a reference type.
+func hasReferenceType<T>(_ x: T) -> Bool {
+  return _canBeClass(T.self) == 1
+}
+
+// The debugger uses unsafeBitCast to take an arbitrary address and cast it to
+// AnyObject. Mimic that operation here.
+func debugVal<T>(_ x: inout T) -> String {
+  if !hasReferenceType(x) {
+    return printObj(x)
+  }
+  return withUnsafePointer(to: &x) {
+    return _DebuggerSupport.stringForPrintObject(Swift.unsafeBitCast($0.pointee, to: AnyObject.self))
+  }
+}
+
+StringForPrintObjectTests.test("Basic") {
+  var a = "Hello World" as NSString
+  let a_printed = printObj(a)
+  let a_debug = debugVal(&a)
+  expectEqual("Hello World", String(reflecting: a))
+  expectEqual("Hello World\n", a_printed)
+  expectEqual(a_printed, a_debug)
+}
+
+StringForPrintObjectTests.test("NSStringFromStringLiteral") {
+  var a = Foundation.NSString(stringLiteral: "Hello World")
+  let a_printed = printObj(a)
+  let a_debug = debugVal(&a)
+  expectEqual("Hello World", String(reflecting: a))
+  expectEqual("Hello World\n", a_printed)
+  expectEqual(a_printed, a_debug)
+}
+
+StringForPrintObjectTests.test("NSStringFromUnsafeBuffer") {
+  let buf = UnsafeMutablePointer<Int8>.allocate(capacity: 8)
+  buf[0] = 65
+  buf[1] = 0
+  var a = Foundation.NSString(utf8String: buf)!
+  let a_printed = printObj(a)
+  let a_debug = debugVal(&a)
+  expectEqual("A", String(reflecting: a))
+  expectEqual("A\n", a_printed)
+  expectEqual(a_printed, a_debug)
+  buf.deallocate()
+}
+
+StringForPrintObjectTests.test("ArrayOfStrings") {
+  var a = ["Hello World" as NSString]
+  let a_printed = printObj(a)
+  let a_debug = debugVal(&a)
+  expectEqual("[Hello World]", String(reflecting: a))
+  expectEqual("▿ 1 element\n  - 0 : Hello World\n", a_printed)
+  expectEqual(a_printed, a_debug)
+}
+
+struct StructWithOneMember {
+  var a = "Hello World" as NSString
+}
+
+StringForPrintObjectTests.test("StructWithOneMember") {
+  var a = StructWithOneMember()
+  let a_printed = printObj(StructWithOneMember())
+  let a_debug = debugVal(&a)
+  expectEqual("main.StructWithOneMember(a: Hello World)", String(reflecting: a))
+  expectEqual("▿ StructWithOneMember\n  - a : Hello World\n", a_printed)
+  expectEqual(a_printed, a_debug)
+}
+
+struct StructWithTwoMembers {
+  var a = 1
+  var b = "Hello World" as NSString
+}
+
+StringForPrintObjectTests.test("StructWithTwoMembers") {
+  var a = StructWithTwoMembers()
+  let a_printed = printObj(StructWithTwoMembers())
+  let a_debug = debugVal(&a)
+  expectEqual("main.StructWithTwoMembers(a: 1, b: Hello World)", String(reflecting: a))
+  expectEqual("▿ StructWithTwoMembers\n  - a : 1\n  - b : Hello World\n", a_printed)
+  expectEqual(a_printed, a_debug)
+}
+
+runAllTests()
diff --git a/test/stdlib/test_runtime_function_counters.swift b/test/stdlib/test_runtime_function_counters.swift
index c6a202f..4d17e45 100644
--- a/test/stdlib/test_runtime_function_counters.swift
+++ b/test/stdlib/test_runtime_function_counters.swift
@@ -1,7 +1,7 @@
 // RUN: %empty-directory(%t)
 // RUN: %target-build-swift %s -o %t/test_runtime_function_counters
 // RUN: %target-run %t/test_runtime_function_counters 2>&1 | %FileCheck %s
-// REQUIRES: swift_stdlib_asserts
+// REQUIRES: runtime_function_counters
 // REQUIRES: executable_test
 
 /// Test functionality related to the runtime function counters.
diff --git a/test/stdlib/test_runtime_function_counters_with_disabled_assertions.swift b/test/stdlib/test_runtime_function_counters_with_disabled_assertions.swift
deleted file mode 100644
index 2fdd58b..0000000
--- a/test/stdlib/test_runtime_function_counters_with_disabled_assertions.swift
+++ /dev/null
@@ -1,273 +0,0 @@
-// RUN: %empty-directory(%t)
-// RUN: %target-build-swift %s -o %t/test_runtime_function_counters
-// RUN: %target-run %t/test_runtime_function_counters 2>&1 | %FileCheck %s
-// REQUIRES: executable_test
-
-/// Test functionality related to the runtime function counters.
-
-class C {
-  var next: C? = nil
-  func test(_ c: C) {
-  }
-}
-
-struct MyStruct {
-  var ref1: AnyObject? = C()
-  var ref2: AnyObject = C()
-  var str: String = ""
-}
-
-public final class List<T> {
-  var value: T
-  var next: List<T>?
-
-  init(_ value: T) {
-    self.value = value
-    self.next = nil
-  }
-
-  init(_ value: T, _ tail: List<T>) {
-    self.value = value
-    self.next = tail
-  }
-}
-
-public func length<T>(_ l: List<T>) -> Int {
-  var ll: List<T>? = l
-  var len = 0
-  while ll != nil {
-    len = len + 1
-    ll = ll?.next
-  }
-  return len
-}
-
-/// CHECK-LABEL: TEST: Collect references inside objects
-
-// Constant strings don't really have a reference, but BridgeObject
-// still counts as one.
-//
-// FIXME(TODO: JIRA): On 32-bit, we use AnyObject? instead of BridgeObject. If
-// we get back onto a real reference (or if 64-bit gets off of a real
-// reference), then drop adjust the optionality of the following check.
-//
-/// CHECK: Constant string: [{{([0-9a-fA-Fx]+)?}}]
-
-/// An array has one reference
-/// CHECK: Array<Int>: [{{[0-9a-fA-Fx]+}}]
-
-/// MyStruct has two references plus a String with a third
-//
-// FIXME(TODO: JIRA): On 32-bit, we use AnyObject? instead of BridgeObject. If
-// we get back onto a real reference (or if 64-bit gets off of a real
-// reference), then drop adjust the optionality of the following check.
-//
-/// CHECK: MyStruct: [{{[0-9a-fA-Fx]+}}, {{[0-9a-fA-Fx]+}}{{(, [0-9a-fA-Fx]+)?}}]
-
-/// Dictionary has one reference
-/// CHECK: Dictionary<Int, Int>: [{{[0-9a-fA-Fx]+}}]
-/// Set has one reference
-/// CHECK: Set<Int>: [{{[0-9a-fA-Fx]+}}]
-/// Test collection of references inside different types of objects.
-@inline(never)
-func testCollectReferencesInsideObject() {
-  print("TEST: Collect references inside objects")
-  let s = "MyString"
-  let aint = [1,2,3,4]
-  let dint = [1:1, 2:2]
-  let sint: Set<Int> = [1,2,3,4]
-
-  print("Constant string: \(_collectReferencesInsideObject(s))")
-  print("Array<Int>: \(_collectReferencesInsideObject(aint))")
-  print("MyStruct: \(_collectReferencesInsideObject(MyStruct()))")
-  print("Dictionary<Int, Int>: \(_collectReferencesInsideObject(dint))")
-  print("Set<Int>: \(_collectReferencesInsideObject(sint))")
-
-  var mystring = "MyString"
-  mystring.append("End")
-  testString(mystring)
-  testDict(dint)
-  testObjectCycle()
-}
-
-
-/// CHECK-LABEL: TEST: APIs from _RuntimeFunctionCounters
-/// CHECK: Number of runtime function pointers:
-/// Test some APIs from _RuntimeFunctionCounters
-func testRuntimeCounters() {
-  print("TEST: APIs from _RuntimeFunctionCounters")
-  let numRuntimeFunctionPointer =
-    _RuntimeFunctionCounters.getNumRuntimeFunctionCounters()
-
-  print("Number of runtime function pointers: \(numRuntimeFunctionPointer)")
-
-  let names = _RuntimeFunctionCounters.getRuntimeFunctionNames()
-  let offsets = _RuntimeFunctionCounters.getRuntimeFunctionCountersOffsets()
-
-  for i in 0..<numRuntimeFunctionPointer {
-    print("Runtime function \(i) : \(names[i]) at offset: \(offsets[i])")
-  }
-
-  var d: [Int : Int] = [:]
-  let globalCounters1 = _GlobalRuntimeFunctionCountersState()
-
-  for i in 0..<50 {
-    let k = i
-    let v = i*i
-    d[k] = v
-  }
-
-  let globalCounters2 = _GlobalRuntimeFunctionCountersState()
-
-  globalCounters1.dumpDiff(globalCounters2, skipUnchanged: true)
-}
-
-/// Test finding references inside a String object.
-@inline(never)
-func testString(_ s: String) {
-  print("TEST: Collect references for strings")
-  let refs = _collectReferencesInsideObject(s)
-  print("References are: \(refs)")
-  let objectCounters1 = _ObjectRuntimeFunctionCountersState(refs[0])
-  let _ = [String](repeating: s, count: 4)
-  let objectCounters2 = _ObjectRuntimeFunctionCountersState(refs[0])
-  objectCounters1.dumpDiff(objectCounters2, skipUnchanged: true)
-}
-
-/// Test finding references inside a Dictionary object.
-@inline(never)
-func testDict(_ _dint: [Int : Int]) {
-  print("TEST: Collect references for dictionaries")
-  var dint = _dint
-  dint[3] = 3
-  let refs = _collectReferencesInsideObject(dint)
-  print("References are: \(refs)")
-  let objectCounters1 = _ObjectRuntimeFunctionCountersState(refs[0])
-  dint[222] = 222
-  dint[2222] = 2222
-  let objectCounters2 = _ObjectRuntimeFunctionCountersState(refs[0])
-  objectCounters1.dumpDiff(objectCounters2, skipUnchanged: true)
-}
-
-/// Test finding references inside an object graph with a cycle.
-/// It should not result in a stack overflow.
-@inline(never)
-func testObjectCycle() {
-  print("TEST: Collect references on object graph with cycles")
-  print("testObjectCycle")
-  let c1 = C()
-  let c2 = C()
-  c1.next = c1
-  c2.next = c1
-  let refs = _collectReferencesInsideObject(c1)
-  print("References are: \(refs)")
-  let objectCounters1 = _ObjectRuntimeFunctionCountersState(refs[0])
-  c1.next = nil
-  c2.next = nil
-  let objectCounters2 = _ObjectRuntimeFunctionCountersState(refs[0])
-  objectCounters1.dumpDiff(objectCounters2, skipUnchanged: true)
-}
-
-/// Test runtime function counters for a List object.
-@inline(never)
-func testLists() {
-  print("TEST: Runtime function counters for Lists")
-  print("testLists")
-  let globalCounters1 = _GlobalRuntimeFunctionCountersState()
-  var l: List<Int>? = List(1, List(2, List(3, List(4, List(5)))))
-  let refs = _collectReferencesInsideObject(l!)
-  let globalCounters11 = _GlobalRuntimeFunctionCountersState()
-  let _ = _collectReferencesInsideObject(l!)
-  let globalCounters111 = _GlobalRuntimeFunctionCountersState()
-
-  print("Global counters diff for 11")
-  globalCounters1.dumpDiff(globalCounters11, skipUnchanged: true)
-  print("Global counters diff for 111")
-  globalCounters1.dumpDiff(globalCounters111, skipUnchanged: true)
-
-  let len = length(l!)
-  let globalCounters2 = _GlobalRuntimeFunctionCountersState()
-  print("Length of the list is \(len)")
-  print("Global counters diff after constructing a list and computing its length")
-  globalCounters1.dumpDiff(globalCounters2, skipUnchanged: true)
-  let objectCounters1 = _ObjectRuntimeFunctionCountersState(refs[0])
-  l = nil
-  let objectCounters2 = _ObjectRuntimeFunctionCountersState(refs[0])
-  print("List head counters after list becomes unreferenced")
-  objectCounters1.dumpDiff(objectCounters2, skipUnchanged: true)
-}
-
-/// Test the _measureRuntimeFunctionCountersDiffs API.
-@inline(never)
-func testMeasureRuntimeFunctionCountersDiffs() {
-  print("TEST: Measure runtime function counters diff")
-  let l: List<Int>? = List(1, List(2, List(3, List(4, List(5)))))
-  let refs = _collectReferencesInsideObject(l!)
-  var len = 0
-  let (globalCounters, objectsCountersDiffs) =
-    _measureRuntimeFunctionCountersDiffs(objects: [refs[0]]) {
-    len = length(l!)
-  }
-  print("List length is: \(len)")
-  print("Global counters changes")
-  globalCounters.dump(skipUnchanged: true)
-  print("Objects counters changes")
-  for (i, objectCounters) in objectsCountersDiffs.enumerated() {
-    print("Object counters diff for \(refs[i])")
-    objectCounters.dump(skipUnchanged: true)
-  }
-}
-
-/// This is a handler that is invoked on each runtime functions counters update.
-@inline(never)
-func updatesHandler(object: UnsafeRawPointer, functionId: Int64) {
-  let savedMode = _RuntimeFunctionCounters.disableRuntimeFunctionCountersUpdates()
-  print("Start handler")
-  let functionName = _RuntimeFunctionCounters.runtimeFunctionNames[Int(functionId)]
-  print("Function \(functionName) was invoked on object \(object)")
-  print("End handler")
-  _RuntimeFunctionCounters.enableRuntimeFunctionCountersUpdates(mode: savedMode)
-}
-
-/// Check that it is possible to set your own runtime functions counters
-/// updates handler and this handler is invoked at runtime.
-/// CHECK-LABEL: TEST: Provide runtime function counters update handler
-/// Test that you can provide custom handlers for runtime functions counters
-/// updates.
-var globalC: C? = nil
-@inline(never)
-func testFunctionRuntimeCountersUpdateHandler() {
-  print("TEST: Provide runtime function counters update handler")
-  let l: List<Int>? = List(1, List(2, List(3, List(4, List(5)))))
-  let oldHandler =
-    _RuntimeFunctionCounters.setGlobalRuntimeFunctionCountersUpdateHandler(
-      handler: updatesHandler)
-  globalC = C()
-  globalC = nil
-  let len = length(l!)
-  _ = _RuntimeFunctionCounters.setGlobalRuntimeFunctionCountersUpdateHandler(
-    handler: oldHandler)
-  print("Restored old handler")
-  print(len)
-}
-
-/// Enable runtime function counters stats collection.
-_RuntimeFunctionCounters.enableRuntimeFunctionCountersUpdates()
-
-/// Test collection of references inside different types of objects.
-testCollectReferencesInsideObject()
-
-/// Test some APIs from _RuntimeFunctionCounters.
-testRuntimeCounters()
-
-/// Test dumping of counters for all objects.
-_RuntimeFunctionCounters.dumpObjectsRuntimeFunctionPointers()
-
-/// Test runtime function counters for a List object.
-testLists()
-
-/// Test the _measureRuntimeFunctionCountersDiffs API.
-testMeasureRuntimeFunctionCountersDiffs()
-
-/// Test that you can provide custom handlers for runtime functions counters updates.
-testFunctionRuntimeCountersUpdateHandler()
diff --git a/tools/swift-demangle/swift-demangle.cpp b/tools/swift-demangle/swift-demangle.cpp
index e324425..8fdbd85 100644
--- a/tools/swift-demangle/swift-demangle.cpp
+++ b/tools/swift-demangle/swift-demangle.cpp
@@ -49,6 +49,10 @@
            llvm::cl::desc("Remangle test mode (show the remangled string)"));
 
 static llvm::cl::opt<bool>
+RemangleRtMode("remangle-objc-rt",
+           llvm::cl::desc("Remangle to the ObjC runtime name mangling scheme"));
+
+static llvm::cl::opt<bool>
 RemangleNew("remangle-new",
            llvm::cl::desc("Remangle the symbol with new mangling scheme"));
 
@@ -121,6 +125,12 @@
     if (hadLeadingUnderscore) llvm::outs() << '_';
     llvm::outs() << remangled;
     return;
+  } else if (RemangleRtMode) {
+    std::string remangled = name;
+    if (pointer) {
+      remangled = swift::Demangle::mangleNodeOld(pointer);
+    }
+    llvm::outs() << remangled;
   }
   if (!TreeOnly) {
     if (RemangleNew) {
diff --git a/utils/build-script-impl b/utils/build-script-impl
index 44723df..bcb9e55 100755
--- a/utils/build-script-impl
+++ b/utils/build-script-impl
@@ -2118,6 +2118,11 @@
                     )
                 fi
 
+                if [ "${SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS}" == "" ] ; then
+                    SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS="${SWIFT_STDLIB_ENABLE_ASSERTIONS}"
+                fi
+                        
+
                 cmake_options=(
                     "${cmake_options[@]}"
                     -DCMAKE_C_FLAGS="$(swift_c_flags ${host})"
@@ -2131,6 +2136,7 @@
                     -DSWIFT_STDLIB_ASSERTIONS:BOOL=$(true_false "${SWIFT_STDLIB_ENABLE_ASSERTIONS}")
                     -DSWIFT_STDLIB_ENABLE_RESILIENCE:BOOL=$(true_false "${SWIFT_STDLIB_ENABLE_RESILIENCE}")
                     -DSWIFT_STDLIB_USE_NONATOMIC_RC:BOOL=$(true_false "${SWIFT_STDLIB_USE_NONATOMIC_RC}")
+                    -DSWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS:BOOL=$(true_false "${SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS}")
                     -DSWIFT_NATIVE_LLVM_TOOLS_PATH:STRING="${native_llvm_tools_path}"
                     -DSWIFT_NATIVE_CLANG_TOOLS_PATH:STRING="${native_clang_tools_path}"
                     -DSWIFT_NATIVE_SWIFT_TOOLS_PATH:STRING="${native_swift_tools_path}"
diff --git a/validation-test/execution_crashers/Inputs/arc_36509461.h b/validation-test/execution/Inputs/arc_36509461.h
similarity index 100%
rename from validation-test/execution_crashers/Inputs/arc_36509461.h
rename to validation-test/execution/Inputs/arc_36509461.h
diff --git a/validation-test/execution_crashers/Inputs/arc_36509461.m b/validation-test/execution/Inputs/arc_36509461.m
similarity index 100%
rename from validation-test/execution_crashers/Inputs/arc_36509461.m
rename to validation-test/execution/Inputs/arc_36509461.m
diff --git a/validation-test/execution_crashers/Inputs/custom-modules/foo.h b/validation-test/execution/Inputs/custom-modules/foo.h
similarity index 100%
rename from validation-test/execution_crashers/Inputs/custom-modules/foo.h
rename to validation-test/execution/Inputs/custom-modules/foo.h
diff --git a/validation-test/execution_crashers/Inputs/custom-modules/module.modulemap b/validation-test/execution/Inputs/custom-modules/module.modulemap
similarity index 100%
rename from validation-test/execution_crashers/Inputs/custom-modules/module.modulemap
rename to validation-test/execution/Inputs/custom-modules/module.modulemap
diff --git a/validation-test/execution_crashers/Inputs/dsohandle-first.swift b/validation-test/execution/Inputs/dsohandle-first.swift
similarity index 100%
rename from validation-test/execution_crashers/Inputs/dsohandle-first.swift
rename to validation-test/execution/Inputs/dsohandle-first.swift
diff --git a/validation-test/execution_crashers/Inputs/dsohandle-second.swift b/validation-test/execution/Inputs/dsohandle-second.swift
similarity index 100%
rename from validation-test/execution_crashers/Inputs/dsohandle-second.swift
rename to validation-test/execution/Inputs/dsohandle-second.swift
diff --git a/validation-test/execution_crashers/arc_36509461.swift b/validation-test/execution/arc_36509461.swift
similarity index 97%
rename from validation-test/execution_crashers/arc_36509461.swift
rename to validation-test/execution/arc_36509461.swift
index b80fca7..56f4603 100644
--- a/validation-test/execution_crashers/arc_36509461.swift
+++ b/validation-test/execution/arc_36509461.swift
@@ -7,7 +7,7 @@
 // REQUIRES: executable_test
 // REQUIRES: asan_runtime
 // REQUIRES: objc_interop
-// UNSUPPORTED: CPU=i386
+// REQUIRES: OS=macosx
 
 import Foundation
 
diff --git a/validation-test/execution_crashers/crashers_fixed/rdar33767511.swift b/validation-test/execution/crashers_fixed/rdar33767511.swift
similarity index 100%
rename from validation-test/execution_crashers/crashers_fixed/rdar33767511.swift
rename to validation-test/execution/crashers_fixed/rdar33767511.swift
diff --git a/validation-test/execution_crashers/dsohandle-multi-module.swift b/validation-test/execution/dsohandle-multi-module.swift
similarity index 100%
rename from validation-test/execution_crashers/dsohandle-multi-module.swift
rename to validation-test/execution/dsohandle-multi-module.swift
diff --git a/validation-test/execution_crashers/interpret-with-dependencies-linux.swift b/validation-test/execution/interpret-with-dependencies-linux.swift
similarity index 100%
rename from validation-test/execution_crashers/interpret-with-dependencies-linux.swift
rename to validation-test/execution/interpret-with-dependencies-linux.swift
diff --git a/validation-test/execution_crashers/interpret-with-dependencies.swift b/validation-test/execution/interpret-with-dependencies.swift
similarity index 100%
rename from validation-test/execution_crashers/interpret-with-dependencies.swift
rename to validation-test/execution/interpret-with-dependencies.swift
diff --git a/validation-test/execution_crashers/testability.swift b/validation-test/execution/testability.swift
similarity index 100%
rename from validation-test/execution_crashers/testability.swift
rename to validation-test/execution/testability.swift
diff --git a/validation-test/stdlib/MicroStdlib/Inputs/RuntimeStubs.c b/validation-test/stdlib/MicroStdlib/Inputs/RuntimeStubs.c
index 637b10e..eaa1120 100644
--- a/validation-test/stdlib/MicroStdlib/Inputs/RuntimeStubs.c
+++ b/validation-test/stdlib/MicroStdlib/Inputs/RuntimeStubs.c
@@ -1,12 +1,12 @@
 int $SBi32_N;
 int $SBi64_N;
 int $SBi8_N;
-void _swift_getEnumCaseSinglePayload(void) {}
-void _swift_getGenericMetadata(void) {}
-void _swift_slowAlloc(void) {}
-void _swift_slowDealloc(void) {}
-void _swift_storeEnumTagSinglePayload(void) {}
+void swift_getEnumCaseSinglePayload(void) {}
+void swift_getGenericMetadata(void) {}
+void swift_slowAlloc(void) {}
+void swift_slowDealloc(void) {}
+void swift_storeEnumTagSinglePayload(void) {}
 void swift_allocateGenericValueMetadata(void) {}
 void swift_initEnumMetadataSinglePayload(void) {}
-void _swift_retain(){}
+void swift_retain(){}
 void swift_allocBox(){}