From 58ad356780b87737cf05b67d0174cd60635aecf7 Mon Sep 17 00:00:00 2001 From: Mayank <> Date: Fri, 26 May 2023 22:08:25 +0530 Subject: [PATCH 01/38] Refactored the `Stack.swift` file to make it more readable. Instead of using `if` in case of checking if `index < end` in `next` function of Stack. We can use `guard` statement to make it more readable and concise. --- .../Optimizer/DataStructures/Stack.swift | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/SwiftCompilerSources/Sources/Optimizer/DataStructures/Stack.swift b/SwiftCompilerSources/Sources/Optimizer/DataStructures/Stack.swift index 723e2d9759d4f..5db9f4d49396a 100644 --- a/SwiftCompilerSources/Sources/Optimizer/DataStructures/Stack.swift +++ b/SwiftCompilerSources/Sources/Optimizer/DataStructures/Stack.swift @@ -47,17 +47,17 @@ struct Stack : CollectionLikeSequence { mutating func next() -> Element? { let end = (slab.data == lastSlab.data ? endIndex : slabCapacity) - if index < end { - let elem = Stack.bind(slab)[index] - index += 1 - - if index >= end && slab.data != lastSlab.data { - slab = slab.getNext() - index = 0 - } - return elem + + guard index < end else { return nil } + + let elem = Stack.bind(slab)[index] + index += 1 + + if index >= end && slab.data != lastSlab.data { + slab = slab.getNext() + index = 0 } - return nil + return elem } } From 41f46ec08501e33c9147ffa8dad2d2888bcf3d4e Mon Sep 17 00:00:00 2001 From: Alastair Houghton Date: Fri, 16 Jun 2023 13:30:36 +0100 Subject: [PATCH 02/38] [Threading][TSan] Fix TSan errors from lazy init on Linux. Move the TSan functionality from Concurrency into Threading. Use it in the Linux `ulock` implementation so that TSan knows about `ulock` and will tolerate the newer `swift_once` implementation that uses it. rdar://110665213 --- include/swift/Threading/Impl/Linux/ulock.h | 29 ++++-- include/swift/Threading/TSan.h | 95 +++++++++++++++++++ lib/Threading/CMakeLists.txt | 3 +- lib/Threading/Linux.cpp | 3 +- lib/Threading/TSan.cpp | 49 ++++++++++ stdlib/public/Concurrency/CMakeLists.txt | 1 - stdlib/public/Concurrency/TaskPrivate.h | 22 +++-- stdlib/public/Concurrency/ThreadSanitizer.cpp | 50 ---------- stdlib/public/Threading/CMakeLists.txt | 1 + test/Sanitizers/tsan/once.swift | 50 ++++++++++ 10 files changed, 231 insertions(+), 72 deletions(-) create mode 100644 include/swift/Threading/TSan.h create mode 100644 lib/Threading/TSan.cpp delete mode 100644 stdlib/public/Concurrency/ThreadSanitizer.cpp create mode 100644 test/Sanitizers/tsan/once.swift diff --git a/include/swift/Threading/Impl/Linux/ulock.h b/include/swift/Threading/Impl/Linux/ulock.h index a9020965ec5d4..1616b1e7a678a 100644 --- a/include/swift/Threading/Impl/Linux/ulock.h +++ b/include/swift/Threading/Impl/Linux/ulock.h @@ -34,6 +34,8 @@ #include #include +#include "swift/Threading/TSan.h" + namespace swift { namespace threading_impl { namespace linux { @@ -59,32 +61,39 @@ inline void ulock_lock(ulock_t *lock) { const ulock_t tid = ulock_get_tid(); do { ulock_t zero = 0; - if (ulock_fastpath(__atomic_compare_exchange_n( - lock, &zero, tid, true, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED))) - return; - + if (ulock_fastpath(__atomic_compare_exchange_n(lock, &zero, tid, + true, __ATOMIC_ACQUIRE, + __ATOMIC_RELAXED))) + break; } while (ulock_futex(lock, FUTEX_LOCK_PI) != 0); + + tsan::acquire(lock); } inline bool ulock_trylock(ulock_t *lock) { ulock_t zero = 0; if (ulock_fastpath(__atomic_compare_exchange_n(lock, &zero, ulock_get_tid(), true, __ATOMIC_ACQUIRE, - __ATOMIC_RELAXED))) + __ATOMIC_RELAXED)) + || ulock_futex(lock, FUTEX_TRYLOCK_PI) == 0) { + tsan::acquire(lock); return true; + } - return ulock_futex(lock, FUTEX_TRYLOCK_PI) == 0; + return false; } inline void ulock_unlock(ulock_t *lock) { const ulock_t tid = ulock_get_tid(); do { ulock_t expected = tid; - if (ulock_fastpath(__atomic_compare_exchange_n( - lock, &expected, 0, true, __ATOMIC_RELEASE, __ATOMIC_RELAXED))) - return; - + if (ulock_fastpath(__atomic_compare_exchange_n(lock, &expected, 0, + true, __ATOMIC_RELEASE, + __ATOMIC_RELAXED))) + break; } while (ulock_futex(lock, FUTEX_UNLOCK_PI) != 0); + + tsan::release(lock); } } // namespace linux diff --git a/include/swift/Threading/TSan.h b/include/swift/Threading/TSan.h new file mode 100644 index 0000000000000..7bf8db8120da0 --- /dev/null +++ b/include/swift/Threading/TSan.h @@ -0,0 +1,95 @@ +//===--- TSan.h - TSan support functions ---------------------- -*- C++ -*-===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2023 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 +// +//===----------------------------------------------------------------------===// +// +// Helper functions for code that needs to integrate with the thread +// sanitizer. In particular, TSan can't see inside the runtime libraries, +// so we occasionally need to give it a hint that we're doing synchronization +// in order to avoid false positives. +// +//===----------------------------------------------------------------------===// + +#ifndef SWIFT_THREADING_TSAN_H +#define SWIFT_THREADING_TSAN_H + +namespace swift { + +#if defined(_WIN32) || defined(__wasi__) || !__has_include() +namespace tsan { + +inline bool enabled() { return false; } +template T *acquire(T *ptr) { return ptr; } +template T *release(T *ptr) { return ptr; } +template T *consume(T *ptr) { return ptr; } + +} // namespace tsan +#else + +namespace threading_impl { + +extern bool tsan_enabled; +extern void (*tsan_acquire)(const void *ptr); +extern void (*tsan_release)(const void *ptr); + +} // namespace threading_impl + +namespace tsan { + +/// Returns true if TSan is enabled +inline bool enabled() { + return threading_impl::tsan_enabled; +} + +/// Indicate to TSan that an acquiring load has occurred on the current +/// thread. If some other thread does a releasing store with the same +/// pointer, we are indicating to TSan that all writes that happened +/// before that store will be visible to the current thread after the +/// `acquire()`. +template +T *acquire(T *ptr) { + if (threading_impl::tsan_acquire) { + threading_impl::tsan_acquire(ptr); + } + return ptr; +} + +/// Indicate to TSan that a releasing store has occurred on the current +/// thread. If some other thread does an acquiring load with the same +/// pointer, we are indicating to TSan that that thread will be able to +/// see all writes that happened before the `release()`. +template +T *release(T *ptr) { + if (threading_impl::tsan_release) { + threading_impl::tsan_release(ptr); + } + return ptr; +} + +/// Indicate to TSan that a consuming load has occurred on the current +/// thread. If some other thread does a releasing store with the same +/// pointer, we are indicating to TSan that all writes that happened +/// before that store will be visible *to those operations that carry a +/// dependency on the loaded value*. +/// +/// TSan doesn't currently know about consume, so we lie and say it's an +/// acquire instead. +template +T *consume(T *ptr) { + return acquire(ptr); +} + +} // namespace tsan + +#endif + +} // namespace swift + +#endif diff --git a/lib/Threading/CMakeLists.txt b/lib/Threading/CMakeLists.txt index 029a52b68e1e3..9b0828945af56 100644 --- a/lib/Threading/CMakeLists.txt +++ b/lib/Threading/CMakeLists.txt @@ -10,4 +10,5 @@ add_swift_host_library(swiftThreading STATIC Linux.cpp Pthreads.cpp Win32.cpp - Errors.cpp) + Errors.cpp + TSan.cpp) diff --git a/lib/Threading/Linux.cpp b/lib/Threading/Linux.cpp index 811f470ba0832..008231be7157a 100644 --- a/lib/Threading/Linux.cpp +++ b/lib/Threading/Linux.cpp @@ -18,6 +18,7 @@ #include "swift/Threading/Impl.h" #include "swift/Threading/Errors.h" +#include "swift/Threading/TSan.h" namespace { @@ -61,7 +62,7 @@ void swift::threading_impl::once_slow(once_t &predicate, void (*fn)(void *), #endif if (predicate.flag.load(std::memory_order_acquire) == 0) { fn(context); - predicate.flag.store(-1, std::memory_order_release); + predicate.flag.store(tsan::enabled() ? 1 : -1, std::memory_order_release); } #if defined(__LP64__) || defined(_LP64) linux::ulock_unlock(&predicate.lock); diff --git a/lib/Threading/TSan.cpp b/lib/Threading/TSan.cpp new file mode 100644 index 0000000000000..ad713b674d6e3 --- /dev/null +++ b/lib/Threading/TSan.cpp @@ -0,0 +1,49 @@ +//===--- TSan.h - TSan support functions ----------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2023 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 +// +//===----------------------------------------------------------------------===// +// +// Helper functions for code that needs to integrate with the thread +// sanitizer. In particular, TSan can't see inside the runtime libraries, +// so we occasionally need to give it a hint that we're doing synchronization +// in order to avoid false positives. +// +//===----------------------------------------------------------------------===// + +#include "swift/Threading/TSan.h" +#include "swift/shims/Visibility.h" + +namespace swift { +namespace threading_impl { + +bool tsan_enabled = false; +void (*tsan_acquire)(const void *) = nullptr; +void (*tsan_release)(const void *) = nullptr; + +#if __has_include() +#include + +// The TSan library code will call this function when it starts up +extern "C" SWIFT_ATTRIBUTE_FOR_EXPORTS +void __tsan_on_initialize() { + tsan_enabled = true; + tsan_acquire = (void (*)(const void *))dlsym(RTLD_DEFAULT, "__tsan_acquire"); + tsan_release = (void (*)(const void *))dlsym(RTLD_DEFAULT, "__tsan_release"); + + // Always call through to the next image + void (*next_init)(void); + next_init = (void (*)(void))dlsym(RTLD_NEXT, "__tsan_on_initialize"); + if (next_init) + next_init(); +} +#endif + +} // namespace threading_impl +} // namespace swift diff --git a/stdlib/public/Concurrency/CMakeLists.txt b/stdlib/public/Concurrency/CMakeLists.txt index 7060ece89d636..0ac762e1cff1d 100644 --- a/stdlib/public/Concurrency/CMakeLists.txt +++ b/stdlib/public/Concurrency/CMakeLists.txt @@ -120,7 +120,6 @@ add_swift_target_library(swift_Concurrency ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} I TaskLocal.cpp TaskLocal.swift TaskSleep.swift - ThreadSanitizer.cpp ThreadingError.cpp TracingSignpost.cpp AsyncStreamBuffer.swift diff --git a/stdlib/public/Concurrency/TaskPrivate.h b/stdlib/public/Concurrency/TaskPrivate.h index 450fa2a7111d6..8ed5e45110fbc 100644 --- a/stdlib/public/Concurrency/TaskPrivate.h +++ b/stdlib/public/Concurrency/TaskPrivate.h @@ -29,6 +29,7 @@ #include "swift/Runtime/Exclusivity.h" #include "swift/Runtime/HeapObject.h" #include "swift/Threading/Thread.h" +#include "swift/Threading/TSan.h" #include #include @@ -99,15 +100,18 @@ void _swift_taskGroup_cancelAllChildren(TaskGroup *group); /// should generally use a higher-level function. void _swift_taskGroup_detachChild(TaskGroup *group, AsyncTask *child); -/// release() establishes a happens-before relation with a preceding acquire() -/// on the same address. -void _swift_tsan_acquire(void *addr); -void _swift_tsan_release(void *addr); -/// Technically, this consume relies on implicit HW address dependency ordering -/// and is paired with a corresponding release. Since TSAN doesn't know how to -/// reason about this, we tell TSAN it's an acquire instead. See also -/// SWIFT_MEMORY_ORDER_CONSUME definition. -#define _swift_tsan_consume _swift_tsan_acquire +/// Tell TSAN about an acquiring load +inline void _swift_tsan_acquire(void *addr) { + swift::tsan::acquire(addr); +} +/// Tell TSAN about a releasing store +inline void _swift_tsan_release(void *addr) { + swift::tsan::release(addr); +} +/// Tell TSAN about a consuming load +inline void _swift_tsan_consume(void *addr) { + swift::tsan::consume(addr); +} /// Special values used with DispatchQueueIndex to indicate the global and main /// executors. diff --git a/stdlib/public/Concurrency/ThreadSanitizer.cpp b/stdlib/public/Concurrency/ThreadSanitizer.cpp deleted file mode 100644 index c9d1d5027732b..0000000000000 --- a/stdlib/public/Concurrency/ThreadSanitizer.cpp +++ /dev/null @@ -1,50 +0,0 @@ -//===--- ThreadSanitizer.cpp - Thread Sanitizer support -------------------===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2021 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 -// -//===----------------------------------------------------------------------===// -// -// Thread Sanitizer support for the Swift Task runtime. -// -//===----------------------------------------------------------------------===// - -#include "TaskPrivate.h" - -// Thread Sanitizer is not supported on Windows or WASI. -#if defined(_WIN32) || defined(__wasi__) || !__has_include() -void swift::_swift_tsan_acquire(void *addr) {} -void swift::_swift_tsan_release(void *addr) {} -#else -#include - -namespace { -using TSanFunc = void(void *); -TSanFunc *tsan_acquire, *tsan_release; -} // anonymous namespace - -void swift::_swift_tsan_acquire(void *addr) { - if (tsan_acquire) { - tsan_acquire(addr); - SWIFT_TASK_DEBUG_LOG("tsan_acquire on %p", addr); - } -} - -void swift::_swift_tsan_release(void *addr) { - if (tsan_release) { - tsan_release(addr); - SWIFT_TASK_DEBUG_LOG("tsan_release on %p", addr); - } -} - -SWIFT_EXPORT_FROM(swift_Concurrency) SWIFT_CC(c) -void __tsan_on_initialize() { - tsan_acquire = (TSanFunc *)dlsym(RTLD_DEFAULT, "__tsan_acquire"); - tsan_release = (TSanFunc *)dlsym(RTLD_DEFAULT, "__tsan_release"); -} -#endif diff --git a/stdlib/public/Threading/CMakeLists.txt b/stdlib/public/Threading/CMakeLists.txt index 007289ed3fac7..ae9d8b4e8f4d9 100644 --- a/stdlib/public/Threading/CMakeLists.txt +++ b/stdlib/public/Threading/CMakeLists.txt @@ -9,4 +9,5 @@ add_swift_target_library(swiftThreading OBJECT_LIBRARY "${SWIFT_SOURCE_DIR}/lib/Threading/Linux.cpp" "${SWIFT_SOURCE_DIR}/lib/Threading/Pthreads.cpp" "${SWIFT_SOURCE_DIR}/lib/Threading/Win32.cpp" + "${SWIFT_SOURCE_DIR}/lib/Threading/TSan.cpp" INSTALL_IN_COMPONENT never_install) diff --git a/test/Sanitizers/tsan/once.swift b/test/Sanitizers/tsan/once.swift new file mode 100644 index 0000000000000..bb54500daadb2 --- /dev/null +++ b/test/Sanitizers/tsan/once.swift @@ -0,0 +1,50 @@ +// RUN: %target-swiftc_driver %s -Xfrontend -parse-as-library -g -sanitize=thread %import-libdispatch -o %t_tsan-binary +// RUN: %target-codesign %t_tsan-binary +// RUN: env %env-TSAN_OPTIONS=abort_on_error=0 %target-run %t_tsan-binary 2>&1 | %FileCheck %s --implicit-check-not='ThreadSanitizer' +// REQUIRES: executable_test +// REQUIRES: tsan_runtime + +// rdar://101876380 +// UNSUPPORTED: OS=ios + +// FIXME: This should be covered by "tsan_runtime"; older versions of Apple OSs +// don't support TSan. +// UNSUPPORTED: remote_run + +// Test that we do not report a race on initialization; Swift doesn't initialize +// globals at start-up, but rather uses swift_once(). This is thread safe, but +// on some platforms TSan wasn't seeing the synchronization, so would report +// a false positive. + +import Dispatch + +var count = 0 +let foo = { + count += 1 + return count +}() + +@main +struct Main { + static func main() { + let q = DispatchQueue(label: "q", attributes: .concurrent) + let finished = DispatchSemaphore(value: 0) + let count = 100 + + for _ in 0.. Date: Mon, 19 Jun 2023 11:14:34 +0100 Subject: [PATCH 03/38] [Threading][TSan] Update after review comments. * Use the longer name ThreadSanitizer rather than TSan for the new files. * Don't implement `tsan::consume` at all for now. * Do the `tsan::release` for `ulock_unlock()` at the head of the function, not at the tail. * Add a comment to test/Sanitizers/tsan/once.swift to explain the test a little more clearly. rdar://110665213 --- include/swift/Threading/Impl/Linux/ulock.h | 6 +++--- .../Threading/{TSan.h => ThreadSanitizer.h} | 20 +++---------------- lib/Threading/CMakeLists.txt | 2 +- lib/Threading/Linux.cpp | 2 +- .../{TSan.cpp => ThreadSanitizer.cpp} | 4 ++-- stdlib/public/Concurrency/TaskPrivate.h | 15 +++++++++----- stdlib/public/Threading/CMakeLists.txt | 2 +- test/Sanitizers/tsan/once.swift | 7 ++++++- 8 files changed, 27 insertions(+), 31 deletions(-) rename include/swift/Threading/{TSan.h => ThreadSanitizer.h} (77%) rename lib/Threading/{TSan.cpp => ThreadSanitizer.cpp} (93%) diff --git a/include/swift/Threading/Impl/Linux/ulock.h b/include/swift/Threading/Impl/Linux/ulock.h index 1616b1e7a678a..af04e74aa08ef 100644 --- a/include/swift/Threading/Impl/Linux/ulock.h +++ b/include/swift/Threading/Impl/Linux/ulock.h @@ -34,7 +34,7 @@ #include #include -#include "swift/Threading/TSan.h" +#include "swift/Threading/ThreadSanitizer.h" namespace swift { namespace threading_impl { @@ -84,6 +84,8 @@ inline bool ulock_trylock(ulock_t *lock) { } inline void ulock_unlock(ulock_t *lock) { + tsan::release(lock); + const ulock_t tid = ulock_get_tid(); do { ulock_t expected = tid; @@ -92,8 +94,6 @@ inline void ulock_unlock(ulock_t *lock) { __ATOMIC_RELAXED))) break; } while (ulock_futex(lock, FUTEX_UNLOCK_PI) != 0); - - tsan::release(lock); } } // namespace linux diff --git a/include/swift/Threading/TSan.h b/include/swift/Threading/ThreadSanitizer.h similarity index 77% rename from include/swift/Threading/TSan.h rename to include/swift/Threading/ThreadSanitizer.h index 7bf8db8120da0..19923c3689cee 100644 --- a/include/swift/Threading/TSan.h +++ b/include/swift/Threading/ThreadSanitizer.h @@ -1,4 +1,4 @@ -//===--- TSan.h - TSan support functions ---------------------- -*- C++ -*-===// +//===--- ThreadSanitizer.h - Thread Sanitizer support --------- -*- C++ -*-===// // // This source file is part of the Swift.org open source project // @@ -17,8 +17,8 @@ // //===----------------------------------------------------------------------===// -#ifndef SWIFT_THREADING_TSAN_H -#define SWIFT_THREADING_TSAN_H +#ifndef SWIFT_THREADING_THREAD_SANITIZER_H +#define SWIFT_THREADING_THREAD_SANITIZER_H namespace swift { @@ -28,7 +28,6 @@ namespace tsan { inline bool enabled() { return false; } template T *acquire(T *ptr) { return ptr; } template T *release(T *ptr) { return ptr; } -template T *consume(T *ptr) { return ptr; } } // namespace tsan #else @@ -73,19 +72,6 @@ T *release(T *ptr) { return ptr; } -/// Indicate to TSan that a consuming load has occurred on the current -/// thread. If some other thread does a releasing store with the same -/// pointer, we are indicating to TSan that all writes that happened -/// before that store will be visible *to those operations that carry a -/// dependency on the loaded value*. -/// -/// TSan doesn't currently know about consume, so we lie and say it's an -/// acquire instead. -template -T *consume(T *ptr) { - return acquire(ptr); -} - } // namespace tsan #endif diff --git a/lib/Threading/CMakeLists.txt b/lib/Threading/CMakeLists.txt index 9b0828945af56..4e0e6aed05e3b 100644 --- a/lib/Threading/CMakeLists.txt +++ b/lib/Threading/CMakeLists.txt @@ -11,4 +11,4 @@ add_swift_host_library(swiftThreading STATIC Pthreads.cpp Win32.cpp Errors.cpp - TSan.cpp) + ThreadSanitizer.cpp) diff --git a/lib/Threading/Linux.cpp b/lib/Threading/Linux.cpp index 008231be7157a..93963a7c30ad2 100644 --- a/lib/Threading/Linux.cpp +++ b/lib/Threading/Linux.cpp @@ -18,7 +18,7 @@ #include "swift/Threading/Impl.h" #include "swift/Threading/Errors.h" -#include "swift/Threading/TSan.h" +#include "swift/Threading/ThreadSanitizer.h" namespace { diff --git a/lib/Threading/TSan.cpp b/lib/Threading/ThreadSanitizer.cpp similarity index 93% rename from lib/Threading/TSan.cpp rename to lib/Threading/ThreadSanitizer.cpp index ad713b674d6e3..bee0b8529c52d 100644 --- a/lib/Threading/TSan.cpp +++ b/lib/Threading/ThreadSanitizer.cpp @@ -1,4 +1,4 @@ -//===--- TSan.h - TSan support functions ----------------------------------===// +//===--- ThreadSanitizer.cpp - Thread Sanitizer support -------------------===// // // This source file is part of the Swift.org open source project // @@ -17,7 +17,7 @@ // //===----------------------------------------------------------------------===// -#include "swift/Threading/TSan.h" +#include "swift/Threading/ThreadSanitizer.h" #include "swift/shims/Visibility.h" namespace swift { diff --git a/stdlib/public/Concurrency/TaskPrivate.h b/stdlib/public/Concurrency/TaskPrivate.h index 8ed5e45110fbc..414bf3dc75c11 100644 --- a/stdlib/public/Concurrency/TaskPrivate.h +++ b/stdlib/public/Concurrency/TaskPrivate.h @@ -29,7 +29,7 @@ #include "swift/Runtime/Exclusivity.h" #include "swift/Runtime/HeapObject.h" #include "swift/Threading/Thread.h" -#include "swift/Threading/TSan.h" +#include "swift/Threading/ThreadSanitizer.h" #include #include @@ -100,17 +100,22 @@ void _swift_taskGroup_cancelAllChildren(TaskGroup *group); /// should generally use a higher-level function. void _swift_taskGroup_detachChild(TaskGroup *group, AsyncTask *child); -/// Tell TSAN about an acquiring load +/// Tell TSan about an acquiring load inline void _swift_tsan_acquire(void *addr) { swift::tsan::acquire(addr); } -/// Tell TSAN about a releasing store +/// Tell TSan about a releasing store inline void _swift_tsan_release(void *addr) { swift::tsan::release(addr); } -/// Tell TSAN about a consuming load +/// Tell TSan about a consuming load inline void _swift_tsan_consume(void *addr) { - swift::tsan::consume(addr); + // TSan doesn't support consume, so pretend it's an acquire. + // + // Note that that means that TSan won't generate errors for non-dependent + // reads, so this isn't entirely safe if you're relying solely on TSan to + // spot bugs. + swift::tsan::acquire(addr); } /// Special values used with DispatchQueueIndex to indicate the global and main diff --git a/stdlib/public/Threading/CMakeLists.txt b/stdlib/public/Threading/CMakeLists.txt index ae9d8b4e8f4d9..961c643b756ee 100644 --- a/stdlib/public/Threading/CMakeLists.txt +++ b/stdlib/public/Threading/CMakeLists.txt @@ -9,5 +9,5 @@ add_swift_target_library(swiftThreading OBJECT_LIBRARY "${SWIFT_SOURCE_DIR}/lib/Threading/Linux.cpp" "${SWIFT_SOURCE_DIR}/lib/Threading/Pthreads.cpp" "${SWIFT_SOURCE_DIR}/lib/Threading/Win32.cpp" - "${SWIFT_SOURCE_DIR}/lib/Threading/TSan.cpp" + "${SWIFT_SOURCE_DIR}/lib/Threading/ThreadSanitizer.cpp" INSTALL_IN_COMPONENT never_install) diff --git a/test/Sanitizers/tsan/once.swift b/test/Sanitizers/tsan/once.swift index bb54500daadb2..f3bcc562403f5 100644 --- a/test/Sanitizers/tsan/once.swift +++ b/test/Sanitizers/tsan/once.swift @@ -12,13 +12,18 @@ // UNSUPPORTED: remote_run // Test that we do not report a race on initialization; Swift doesn't initialize -// globals at start-up, but rather uses swift_once(). This is thread safe, but +// globals at start-up, but rather uses `swift_once()`. This is thread safe, but // on some platforms TSan wasn't seeing the synchronization, so would report // a false positive. import Dispatch var count = 0 + +// This initialization will be done via a call to `swift_once()`. Prior to +// the fix for rdar://110665213, the addition to `count` would trigger a +// TSan message on Linux because the sanitizer couldn't see the lock we're +// using to make `swift_once()` thread safe. let foo = { count += 1 return count From 8ed8a284782add334120e63f2007a0760f366964 Mon Sep 17 00:00:00 2001 From: Alastair Houghton Date: Mon, 19 Jun 2023 15:20:17 +0100 Subject: [PATCH 04/38] [Threading][TSan] Move ThreadSanitizer.cpp into the main runtime. On Darwin, `RTLD_NEXT` doesn't do what we need it to here, with the result that if `libswiftCore`'s TSan initializer gets found first, then `libswift_Concurrency` won't have its initializer called at all, in spite of us using `RTLD_NEXT` to find the next definition. Fix this by centralising the initializer in `libswiftCore` instead. rdar://110665213 --- include/swift/Threading/ThreadSanitizer.h | 18 +++++++------ lib/Threading/CMakeLists.txt | 3 +-- stdlib/public/Threading/CMakeLists.txt | 1 - stdlib/public/runtime/CMakeLists.txt | 1 + .../public/runtime}/ThreadSanitizer.cpp | 25 ++++++++++++------- 5 files changed, 28 insertions(+), 20 deletions(-) rename {lib/Threading => stdlib/public/runtime}/ThreadSanitizer.cpp (63%) diff --git a/include/swift/Threading/ThreadSanitizer.h b/include/swift/Threading/ThreadSanitizer.h index 19923c3689cee..c97ab2c4241cf 100644 --- a/include/swift/Threading/ThreadSanitizer.h +++ b/include/swift/Threading/ThreadSanitizer.h @@ -20,6 +20,8 @@ #ifndef SWIFT_THREADING_THREAD_SANITIZER_H #define SWIFT_THREADING_THREAD_SANITIZER_H +#include "swift/shims/Visibility.h" + namespace swift { #if defined(_WIN32) || defined(__wasi__) || !__has_include() @@ -34,9 +36,9 @@ template T *release(T *ptr) { return ptr; } namespace threading_impl { -extern bool tsan_enabled; -extern void (*tsan_acquire)(const void *ptr); -extern void (*tsan_release)(const void *ptr); +SWIFT_RUNTIME_EXPORT bool _swift_tsan_enabled; +SWIFT_RUNTIME_EXPORT void (*_swift_tsan_acquire)(const void *ptr); +SWIFT_RUNTIME_EXPORT void (*_swift_tsan_release)(const void *ptr); } // namespace threading_impl @@ -44,7 +46,7 @@ namespace tsan { /// Returns true if TSan is enabled inline bool enabled() { - return threading_impl::tsan_enabled; + return threading_impl::_swift_tsan_enabled; } /// Indicate to TSan that an acquiring load has occurred on the current @@ -54,8 +56,8 @@ inline bool enabled() { /// `acquire()`. template T *acquire(T *ptr) { - if (threading_impl::tsan_acquire) { - threading_impl::tsan_acquire(ptr); + if (threading_impl::_swift_tsan_acquire) { + threading_impl::_swift_tsan_acquire(ptr); } return ptr; } @@ -66,8 +68,8 @@ T *acquire(T *ptr) { /// see all writes that happened before the `release()`. template T *release(T *ptr) { - if (threading_impl::tsan_release) { - threading_impl::tsan_release(ptr); + if (threading_impl::_swift_tsan_release) { + threading_impl::_swift_tsan_release(ptr); } return ptr; } diff --git a/lib/Threading/CMakeLists.txt b/lib/Threading/CMakeLists.txt index 4e0e6aed05e3b..029a52b68e1e3 100644 --- a/lib/Threading/CMakeLists.txt +++ b/lib/Threading/CMakeLists.txt @@ -10,5 +10,4 @@ add_swift_host_library(swiftThreading STATIC Linux.cpp Pthreads.cpp Win32.cpp - Errors.cpp - ThreadSanitizer.cpp) + Errors.cpp) diff --git a/stdlib/public/Threading/CMakeLists.txt b/stdlib/public/Threading/CMakeLists.txt index 961c643b756ee..007289ed3fac7 100644 --- a/stdlib/public/Threading/CMakeLists.txt +++ b/stdlib/public/Threading/CMakeLists.txt @@ -9,5 +9,4 @@ add_swift_target_library(swiftThreading OBJECT_LIBRARY "${SWIFT_SOURCE_DIR}/lib/Threading/Linux.cpp" "${SWIFT_SOURCE_DIR}/lib/Threading/Pthreads.cpp" "${SWIFT_SOURCE_DIR}/lib/Threading/Win32.cpp" - "${SWIFT_SOURCE_DIR}/lib/Threading/ThreadSanitizer.cpp" INSTALL_IN_COMPONENT never_install) diff --git a/stdlib/public/runtime/CMakeLists.txt b/stdlib/public/runtime/CMakeLists.txt index 18320c6d7689f..05fa2f65b9aa4 100644 --- a/stdlib/public/runtime/CMakeLists.txt +++ b/stdlib/public/runtime/CMakeLists.txt @@ -76,6 +76,7 @@ set(swift_runtime_sources SwiftDtoa.cpp SwiftTLSContext.cpp ThreadingError.cpp + ThreadSanitizer.cpp Tracing.cpp AccessibleFunction.cpp Win32.cpp) diff --git a/lib/Threading/ThreadSanitizer.cpp b/stdlib/public/runtime/ThreadSanitizer.cpp similarity index 63% rename from lib/Threading/ThreadSanitizer.cpp rename to stdlib/public/runtime/ThreadSanitizer.cpp index bee0b8529c52d..75b282f3e46f7 100644 --- a/lib/Threading/ThreadSanitizer.cpp +++ b/stdlib/public/runtime/ThreadSanitizer.cpp @@ -20,28 +20,35 @@ #include "swift/Threading/ThreadSanitizer.h" #include "swift/shims/Visibility.h" +#include + namespace swift { namespace threading_impl { -bool tsan_enabled = false; -void (*tsan_acquire)(const void *) = nullptr; -void (*tsan_release)(const void *) = nullptr; +SWIFT_RUNTIME_EXPORT bool _swift_tsan_enabled = false; +SWIFT_RUNTIME_EXPORT void (*_swift_tsan_acquire)(const void *) = nullptr; +SWIFT_RUNTIME_EXPORT void (*_swift_tsan_release)(const void *) = nullptr; #if __has_include() #include // The TSan library code will call this function when it starts up -extern "C" SWIFT_ATTRIBUTE_FOR_EXPORTS +SWIFT_RUNTIME_EXPORT void __tsan_on_initialize() { - tsan_enabled = true; - tsan_acquire = (void (*)(const void *))dlsym(RTLD_DEFAULT, "__tsan_acquire"); - tsan_release = (void (*)(const void *))dlsym(RTLD_DEFAULT, "__tsan_release"); + _swift_tsan_enabled = true; + _swift_tsan_acquire = (void (*)(const void *))dlsym(RTLD_DEFAULT, + "__tsan_acquire"); + _swift_tsan_release = (void (*)(const void *))dlsym(RTLD_DEFAULT, + "__tsan_release"); - // Always call through to the next image + // Always call through to the next image; this won't work on macOS, but it's + // important on Linux to allow others to hook into the thread sanitizer if + // they wish. void (*next_init)(void); next_init = (void (*)(void))dlsym(RTLD_NEXT, "__tsan_on_initialize"); - if (next_init) + if (next_init) { next_init(); + } } #endif From bad716f2cd4998153e6e7bf64eeee34f2b1207f3 Mon Sep 17 00:00:00 2001 From: Alastair Houghton Date: Mon, 19 Jun 2023 17:00:39 +0100 Subject: [PATCH 05/38] [Threading][TSan] Rearrange things again. We need ThreadSanitizer.cpp in libswiftCore for the runtime case, but we also need it in libswiftThreading for non-runtime cases. rdar://1106655213 --- lib/Threading/CMakeLists.txt | 3 ++- .../runtime => lib/Threading}/ThreadSanitizer.cpp | 11 +++++++---- stdlib/public/Threading/CMakeLists.txt | 1 + stdlib/public/runtime/CMakeLists.txt | 8 +++++++- 4 files changed, 17 insertions(+), 6 deletions(-) rename {stdlib/public/runtime => lib/Threading}/ThreadSanitizer.cpp (86%) diff --git a/lib/Threading/CMakeLists.txt b/lib/Threading/CMakeLists.txt index 029a52b68e1e3..4e0e6aed05e3b 100644 --- a/lib/Threading/CMakeLists.txt +++ b/lib/Threading/CMakeLists.txt @@ -10,4 +10,5 @@ add_swift_host_library(swiftThreading STATIC Linux.cpp Pthreads.cpp Win32.cpp - Errors.cpp) + Errors.cpp + ThreadSanitizer.cpp) diff --git a/stdlib/public/runtime/ThreadSanitizer.cpp b/lib/Threading/ThreadSanitizer.cpp similarity index 86% rename from stdlib/public/runtime/ThreadSanitizer.cpp rename to lib/Threading/ThreadSanitizer.cpp index 75b282f3e46f7..127cc4df1a964 100644 --- a/stdlib/public/runtime/ThreadSanitizer.cpp +++ b/lib/Threading/ThreadSanitizer.cpp @@ -25,15 +25,18 @@ namespace swift { namespace threading_impl { -SWIFT_RUNTIME_EXPORT bool _swift_tsan_enabled = false; -SWIFT_RUNTIME_EXPORT void (*_swift_tsan_acquire)(const void *) = nullptr; -SWIFT_RUNTIME_EXPORT void (*_swift_tsan_release)(const void *) = nullptr; +extern "C" SWIFT_ATTRIBUTE_FOR_EXPORTS +bool _swift_tsan_enabled = false; +extern "C" SWIFT_ATTRIBUTE_FOR_EXPORTS +void (*_swift_tsan_acquire)(const void *) = nullptr; +extern "C" SWIFT_ATTRIBUTE_FOR_EXPORTS +void (*_swift_tsan_release)(const void *) = nullptr; #if __has_include() #include // The TSan library code will call this function when it starts up -SWIFT_RUNTIME_EXPORT +extern "C" SWIFT_ATTRIBUTE_FOR_EXPORTS void __tsan_on_initialize() { _swift_tsan_enabled = true; _swift_tsan_acquire = (void (*)(const void *))dlsym(RTLD_DEFAULT, diff --git a/stdlib/public/Threading/CMakeLists.txt b/stdlib/public/Threading/CMakeLists.txt index 007289ed3fac7..96ea52d1d8f7e 100644 --- a/stdlib/public/Threading/CMakeLists.txt +++ b/stdlib/public/Threading/CMakeLists.txt @@ -4,6 +4,7 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/modules") include(AddSwiftStdlib) +# This should *not* include ThreadSanitizer.cpp, as that is part of libswiftCore add_swift_target_library(swiftThreading OBJECT_LIBRARY "${SWIFT_SOURCE_DIR}/lib/Threading/C11.cpp" "${SWIFT_SOURCE_DIR}/lib/Threading/Linux.cpp" diff --git a/stdlib/public/runtime/CMakeLists.txt b/stdlib/public/runtime/CMakeLists.txt index 05fa2f65b9aa4..44c16efa7986c 100644 --- a/stdlib/public/runtime/CMakeLists.txt +++ b/stdlib/public/runtime/CMakeLists.txt @@ -76,11 +76,16 @@ set(swift_runtime_sources SwiftDtoa.cpp SwiftTLSContext.cpp ThreadingError.cpp - ThreadSanitizer.cpp Tracing.cpp AccessibleFunction.cpp Win32.cpp) +# We pull this in separately here because other dylibs will need it, but only +# will have the __tsan_on_initialize called, and on Darwin, RTLD_NEXT can't be +# used to call subsequence dylibs' copies of that. +set(swift_runtime_threading_sources + ${SWIFT_SOURCE_DIR}/lib/Threading/ThreadSanitizer.cpp) + set(swift_runtime_backtracing_sources Backtrace.cpp CrashHandlerMacOS.cpp @@ -133,6 +138,7 @@ add_swift_target_library(swiftRuntime OBJECT_LIBRARY ${swift_runtime_sources} ${swift_runtime_objc_sources} ${swift_runtime_leaks_sources} + ${swift_runtime_threading_sources} C_COMPILE_FLAGS ${swift_runtime_library_compile_flags} LINK_FLAGS ${swift_runtime_linker_flags} From 3f0018df97cd52812f98c4b62e46269589136e03 Mon Sep 17 00:00:00 2001 From: Alastair Houghton Date: Mon, 19 Jun 2023 17:24:35 +0100 Subject: [PATCH 06/38] [Threading][TSan] Fix linkage issue. We need to pick up the `_swift_tsan_xxx` symbols from libswiftCore in most cases, but sometimes we're statically linked and in that case we want to use a local copy. rdar://1106655213 --- cmake/modules/AddSwiftUnittests.cmake | 3 ++- include/swift/Threading/ThreadSanitizer.h | 15 ++++++++++++--- lib/Threading/ThreadSanitizer.cpp | 9 +++------ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/cmake/modules/AddSwiftUnittests.cmake b/cmake/modules/AddSwiftUnittests.cmake index b0ed92b913f8f..e7a98367337e9 100644 --- a/cmake/modules/AddSwiftUnittests.cmake +++ b/cmake/modules/AddSwiftUnittests.cmake @@ -58,7 +58,8 @@ function(add_swift_unittest test_dirname) string(TOUPPER "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_THREADING_PACKAGE}" _threading_package) target_compile_definitions("${test_dirname}" PRIVATE - "SWIFT_THREADING_${_threading_package}") + "SWIFT_THREADING_${_threading_package}" + "SWIFT_THREADING_STATIC") if(NOT SWIFT_COMPILER_IS_MSVC_LIKE) if(SWIFT_USE_LINKER) diff --git a/include/swift/Threading/ThreadSanitizer.h b/include/swift/Threading/ThreadSanitizer.h index c97ab2c4241cf..c07103d862052 100644 --- a/include/swift/Threading/ThreadSanitizer.h +++ b/include/swift/Threading/ThreadSanitizer.h @@ -34,11 +34,20 @@ template T *release(T *ptr) { return ptr; } } // namespace tsan #else +// If we're static linking to libswiftThreading.a, these symbols can come +// from there. If, on the other hand, we're dynamically linked, we want +// to get them from libswiftCore.dylib instead. +#if SWIFT_THREADING_STATIC +#define SWIFT_THREADING_EXPORT extern "C" +#else +#define SWIFT_THREADING_EXPORT SWIFT_RUNTIME_EXPORT +#endif + namespace threading_impl { -SWIFT_RUNTIME_EXPORT bool _swift_tsan_enabled; -SWIFT_RUNTIME_EXPORT void (*_swift_tsan_acquire)(const void *ptr); -SWIFT_RUNTIME_EXPORT void (*_swift_tsan_release)(const void *ptr); +SWIFT_THREADING_EXPORT bool _swift_tsan_enabled; +SWIFT_THREADING_EXPORT void (*_swift_tsan_acquire)(const void *ptr); +SWIFT_THREADING_EXPORT void (*_swift_tsan_release)(const void *ptr); } // namespace threading_impl diff --git a/lib/Threading/ThreadSanitizer.cpp b/lib/Threading/ThreadSanitizer.cpp index 127cc4df1a964..99213d0976abb 100644 --- a/lib/Threading/ThreadSanitizer.cpp +++ b/lib/Threading/ThreadSanitizer.cpp @@ -25,12 +25,9 @@ namespace swift { namespace threading_impl { -extern "C" SWIFT_ATTRIBUTE_FOR_EXPORTS -bool _swift_tsan_enabled = false; -extern "C" SWIFT_ATTRIBUTE_FOR_EXPORTS -void (*_swift_tsan_acquire)(const void *) = nullptr; -extern "C" SWIFT_ATTRIBUTE_FOR_EXPORTS -void (*_swift_tsan_release)(const void *) = nullptr; +SWIFT_THREADING_EXPORT bool _swift_tsan_enabled = false; +SWIFT_THREADING_EXPORT void (*_swift_tsan_acquire)(const void *) = nullptr; +SWIFT_THREADING_EXPORT void (*_swift_tsan_release)(const void *) = nullptr; #if __has_include() #include From 18b359ffcf8b8dc36d774d19e1f1fa208c2c4082 Mon Sep 17 00:00:00 2001 From: Alastair Houghton Date: Tue, 20 Jun 2023 09:12:29 +0100 Subject: [PATCH 07/38] [Threading][TSan] Fix builds where TSan isn't supported. On builds where TSan isn't supported, don't include any code in ThreadSanitizer.cpp. rdar://110665213 --- include/swift/Threading/ThreadSanitizer.h | 5 +++++ lib/Threading/ThreadSanitizer.cpp | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/include/swift/Threading/ThreadSanitizer.h b/include/swift/Threading/ThreadSanitizer.h index c07103d862052..e7f95dec29ddc 100644 --- a/include/swift/Threading/ThreadSanitizer.h +++ b/include/swift/Threading/ThreadSanitizer.h @@ -25,6 +25,9 @@ namespace swift { #if defined(_WIN32) || defined(__wasi__) || !__has_include() + +#define SWIFT_THREADING_TSAN_SUPPORT 0 + namespace tsan { inline bool enabled() { return false; } @@ -34,6 +37,8 @@ template T *release(T *ptr) { return ptr; } } // namespace tsan #else +#define SWIFT_THREADING_TSAN_SUPPORT 1 + // If we're static linking to libswiftThreading.a, these symbols can come // from there. If, on the other hand, we're dynamically linked, we want // to get them from libswiftCore.dylib instead. diff --git a/lib/Threading/ThreadSanitizer.cpp b/lib/Threading/ThreadSanitizer.cpp index 99213d0976abb..a103c161dce91 100644 --- a/lib/Threading/ThreadSanitizer.cpp +++ b/lib/Threading/ThreadSanitizer.cpp @@ -18,6 +18,9 @@ //===----------------------------------------------------------------------===// #include "swift/Threading/ThreadSanitizer.h" + +#if SWIFT_THREADING_TSAN_SUPPORT + #include "swift/shims/Visibility.h" #include @@ -50,7 +53,9 @@ void __tsan_on_initialize() { next_init(); } } -#endif +#endif // __has_include() } // namespace threading_impl } // namespace swift + +#endif // SWIFT_THREADING_TSAN_SUPPORT From e1e933cecac10094b90a7e69394a0c2aac67395b Mon Sep 17 00:00:00 2001 From: Pavel Yaskevich Date: Tue, 20 Jun 2023 21:36:20 -0700 Subject: [PATCH 08/38] [ConstraintLocator] NFC: Add a way to check whether builder is pointing directly to some expression --- include/swift/Sema/ConstraintLocator.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/swift/Sema/ConstraintLocator.h b/include/swift/Sema/ConstraintLocator.h index 981b70188ebfc..1e714b69e74e7 100644 --- a/include/swift/Sema/ConstraintLocator.h +++ b/include/swift/Sema/ConstraintLocator.h @@ -1271,6 +1271,15 @@ class ConstraintLocatorBuilder { return ConstraintLocatorBuilder(this, newElt, newFlags); } + /// Determine whether this locator builder points directly to a + /// given expression. + template + bool directlyAt() const { + if (auto *expr = getAnchor().dyn_cast()) + return isa(expr) && hasEmptyPath(); + return false; + } + /// Determine whether this builder has an empty path. bool hasEmptyPath() const { return !element; From 5e30445495ac7b7db15404bd88d0b2e98c579972 Mon Sep 17 00:00:00 2001 From: Pavel Yaskevich Date: Tue, 20 Jun 2023 21:37:59 -0700 Subject: [PATCH 09/38] [CSSimplify] Add special handling if specialized type comes from `TypeExpr` Add a special case for `TypeExpr` due to i.e. context specialization, in such cases there is nothing for the solver to "open" so we need to form opened type map manually. Resolves: rdar://111059036 --- lib/Sema/CSSimplify.cpp | 32 ++++++++++++++++++++++++++++++++ test/decl/ext/specialize.swift | 12 ++++++++++++ 2 files changed, 44 insertions(+) diff --git a/lib/Sema/CSSimplify.cpp b/lib/Sema/CSSimplify.cpp index abcd92f351384..7dee0522042b9 100644 --- a/lib/Sema/CSSimplify.cpp +++ b/lib/Sema/CSSimplify.cpp @@ -13544,6 +13544,38 @@ ConstraintSystem::simplifyExplicitGenericArgumentsConstraint( auto *genericParam = typeVar->getImpl().getGenericParameter(); openedTypes.push_back({genericParam, typeVar}); } + } else if (locator.directlyAt()) { + auto *BGT = type1->getAs(); + if (!BGT) + return SolutionKind::Error; + + decl = BGT->getDecl(); + + auto genericParams = BGT->getDecl()->getInnermostGenericParamTypes(); + if (genericParams.size() != BGT->getGenericArgs().size()) + return SolutionKind::Error; + + for (unsigned i = 0, n = genericParams.size(); i != n; ++i) { + auto argType = BGT->getGenericArgs()[i]; + if (auto *typeVar = argType->getAs()) { + openedTypes.push_back({genericParams[i], typeVar}); + } else { + // If we have a concrete substitution then we need to create + // a new type variable to be able to add it to the list as-if + // it is opened generic parameter type. + auto *GP = genericParams[i]; + + unsigned options = TVO_CanBindToNoEscape; + if (GP->isParameterPack()) + options |= TVO_CanBindToPack; + + auto *argVar = createTypeVariable( + getConstraintLocator(locator, LocatorPathElt::GenericArgument(i)), + options); + addConstraint(ConstraintKind::Bind, argVar, argType, locator); + openedTypes.push_back({GP, argVar}); + } + } } else { // If the overload hasn't been resolved, we can't simplify this constraint. auto overloadLocator = getCalleeLocator(getConstraintLocator(locator)); diff --git a/test/decl/ext/specialize.swift b/test/decl/ext/specialize.swift index 2312e8c2d245e..72bef5ee947d7 100644 --- a/test/decl/ext/specialize.swift +++ b/test/decl/ext/specialize.swift @@ -74,3 +74,15 @@ func testNestedExtensions() { Tree.Branch.Nest.Egg.twite() } + +// rdar://111059036 - failed to produce a diagnostic in specialized extension +struct Test { + struct Key {} +} + +class State { +} + +extension Test.Key { + static let state = Self() +} From 3b5ebaa46c2cfb3e52e2e6da64479e98056dcb9b Mon Sep 17 00:00:00 2001 From: Arnold Schwaighofer Date: Wed, 31 May 2023 12:58:22 -0700 Subject: [PATCH 10/38] Fix some tests in IRGen folder --- test/IRGen/TestABIInaccessible.swift | 11 +- test/IRGen/UseObjCMethod.swift | 5 +- test/IRGen/abitypes.swift | 517 +++++++++--------- test/IRGen/access_markers.sil | 73 ++- ...access_type_metadata_by_mangled_name.swift | 18 +- test/IRGen/actor_class.swift | 26 +- test/IRGen/actor_class_objc.swift | 17 +- test/IRGen/alignment.sil | 19 +- test/IRGen/alloc.sil | 19 +- test/IRGen/argument_attrs.sil | 27 +- test/IRGen/async.swift | 7 +- test/IRGen/async/builtin_executor.sil | 15 +- test/IRGen/async/builtins.sil | 102 ++-- test/IRGen/async/class_resilience.swift | 23 +- test/IRGen/async/default_actor.swift | 5 +- test/IRGen/async/partial_apply.sil | 7 +- test/IRGen/async/protocol_resilience.swift | 21 +- .../async/run-call-dynamic-void_to_void.swift | 5 +- ...l-resilient-classinstance-void-to-void.sil | 5 +- .../run-call-struct_five_bools-to-void.sil | 5 +- .../run-call-void-throws-to-int-throwing.sil | 5 +- ...ing_call-async-nothrow_call-sync-throw.sil | 5 +- ...hrows-to-int-throwing_call-async-throw.sil | 5 +- ...ing_call-sync-nothrow_call-async-throw.sil | 5 +- ...throws-to-int-throwing_call-sync-throw.sil | 5 +- test/IRGen/async/run-call-void-to-int64.swift | 5 +- .../async/run-thintothick-int64-to-void.sil | 5 +- test/IRGen/async/unreachable.swift | 7 +- test/IRGen/async_dynamic_replacement.swift | 7 +- test/IRGen/autolink-coff-x86.swift | 8 +- test/IRGen/autolink_elf.swift | 5 +- test/IRGen/autorelease.sil | 57 +- test/IRGen/big_types_corner_cases.swift | 75 ++- .../big_types_corner_cases_as_library.swift | 8 +- test/IRGen/big_types_corner_cases_tiny.swift | 5 +- test/IRGen/builtin_isConcrete.sil | 5 +- test/IRGen/c_function_pointer.sil | 7 +- test/IRGen/class_constraint.sil | 7 +- test/IRGen/class_resilience.swift | 262 ++++----- .../class_update_callback_with_stub.swift | 23 +- .../concrete_inherits_generic_base.swift | 27 +- ...ormances_class_with_defaulted_method.swift | 5 +- test/IRGen/conformance_resilience.swift | 17 +- test/IRGen/dependent_reabstraction.swift | 5 +- ...ialize-clang-importer-witness-tables.swift | 5 +- test/IRGen/disable-instantiation-cache.swift | 12 +- test/IRGen/dllimport.swift | 30 +- test/IRGen/dynamic_replaceable.sil | 30 +- test/IRGen/dynamic_self_cast.swift | 51 +- test/IRGen/enum_derived.swift | 16 +- test/IRGen/enum_singleton.swift | 24 +- test/IRGen/error_self_conformance.sil | 10 +- test/IRGen/expressions.swift | 7 +- test/IRGen/fixed_layout_class.swift | 74 ++- test/IRGen/fixed_size_buffer_peepholes.sil | 19 +- test/IRGen/frozen_protocols.swift | 12 +- test/IRGen/function_param_convention.sil | 5 +- test/IRGen/function_types.sil | 37 +- test/IRGen/generic_classes.sil | 154 +++--- test/IRGen/generic_requirement_objc.sil | 5 +- test/IRGen/global_actor_function_types.sil | 7 +- ...global_actor_function_types_backdeploy.sil | 10 +- test/IRGen/globals.swift | 11 +- test/IRGen/has_symbol_async.swift | 11 +- test/IRGen/has_symbol_clang.swift | 5 +- test/IRGen/has_symbol_objc.swift | 5 +- test/IRGen/indirect_argument.sil | 45 +- test/IRGen/inout_noalias.sil | 5 +- test/IRGen/integer_literal.sil | 67 ++- test/IRGen/keypath_witness_overrides.swift | 5 +- test/IRGen/keypaths_objc.sil | 13 +- test/IRGen/lazy-root-conformance.swift | 7 +- test/IRGen/marker_protocol.swift | 7 +- test/IRGen/meta_meta_type.swift | 13 +- test/IRGen/metadata.swift | 5 +- test/IRGen/metadata_dominance.swift | 24 +- ...ed_mode_class_with_unimportable_fields.sil | 24 +- test/IRGen/move_value.sil | 5 +- test/IRGen/moveonly_deinit.sil | 9 +- test/IRGen/moveonly_deinits.swift | 116 ++-- test/IRGen/multi_file_resilience.swift | 28 +- test/IRGen/multi_module_resilience.swift | 47 +- test/IRGen/noreturn.swift | 5 +- test/IRGen/objc_async_metadata.swift | 7 +- test/IRGen/objc_block.sil | 16 +- test/IRGen/objc_casts.sil | 61 +-- test/IRGen/objc_direct.swift | 33 +- test/IRGen/objc_enum_multi_file.swift | 10 +- test/IRGen/objc_errors.sil | 6 +- test/IRGen/objc_generic_class_convention.sil | 7 +- .../objc_generic_protocol_conformance.swift | 5 +- test/IRGen/objc_globals.swift | 28 +- test/IRGen/objc_properties_jit.swift | 23 +- test/IRGen/objc_protocol_vars.sil | 9 +- test/IRGen/objc_protocols.swift | 107 ++-- test/IRGen/objc_subscripts.swift | 63 ++- test/IRGen/objc_typeof.swift | 19 +- test/IRGen/objc_types_as_member.sil | 7 +- test/IRGen/opaque_result_type.swift | 9 +- ...opaque_result_type_metadata_peephole.swift | 30 +- .../opaque_result_type_substitution.swift | 11 +- test/IRGen/open_boxed_existential.sil | 9 +- test/IRGen/original-defined-attr.swift | 8 +- test/IRGen/outlined_copy_addr.swift | 11 +- test/IRGen/preserve_exclusivity.swift | 11 +- ...cestor_nongeneric-external-resilient.swift | 5 +- ...ric-fileprivate-2nd_ancestor_generic.swift | 5 +- ...adata-payload_size-no_trailing_flags.swift | 25 +- ...xtradata-payload_size-trailing_flags.swift | 25 +- .../struct-inmodule-0argument.swift | 5 +- ...ruct-outmodule-resilient-othermodule.swift | 7 +- ...truct-outmodule-resilient-samemodule.swift | 7 +- ...gument-1distinct_use-struct-inmodule.swift | 7 +- ...-struct-outmodule-frozen-othermodule.swift | 7 +- ...e-struct-outmodule-frozen-samemodule.swift | 7 +- ...nct_use-struct-outmodule-othermodule.swift | 7 +- ...ruct-outmodule-resilient-othermodule.swift | 7 +- ...truct-outmodule-resilient-samemodule.swift | 7 +- test/IRGen/protocol_resilience.sil | 126 ++--- .../protocol_resilience_descriptors.swift | 14 +- test/IRGen/protocol_synthesized.swift | 5 +- test/IRGen/protocol_with_superclass.sil | 141 ++--- .../protocol_with_superclass_where_clause.sil | 141 ++--- test/IRGen/related_entity.sil | 15 +- test/IRGen/run_variadic_generics.sil | 44 +- test/IRGen/runtime-records-are-used.swift | 5 +- test/IRGen/runtime_attributes.swift | 101 ++-- test/IRGen/runtime_attributes_on_actors.swift | 23 +- ...ime_attributes_on_distributed_actors.swift | 19 +- test/IRGen/runtime_calling_conventions.swift | 10 +- test/IRGen/same_type_constraints.swift | 8 +- test/IRGen/select_enum.sil | 17 +- .../signature_conformances_multifile.swift | 15 +- ...nature_conformances_multifile_future.swift | 27 +- ...witness_tables_external_witnesstable.swift | 5 +- ...witness_tables_inherited_conformance.swift | 7 +- test/IRGen/static-vtable-stubs.swift | 18 +- test/IRGen/subclass_existentials.sil | 122 ++--- test/IRGen/super.sil | 52 +- test/IRGen/superclass_constraint.swift | 11 +- test/IRGen/swift_native_objc_runtime_base.sil | 7 +- test/IRGen/synthesized_conformance.swift | 27 +- test/IRGen/temporary_allocation/codegen.swift | 21 +- .../codegen_very_large_allocation.swift | 15 +- test/IRGen/trivial-property-descriptors.swift | 5 +- test/IRGen/tsan_coroutines.swift | 5 +- test/IRGen/tsan_instrumentation.sil | 5 +- test/IRGen/type_layout.swift | 102 ++-- test/IRGen/type_layout_objc.swift | 53 +- .../IRGen/type_layout_reference_storage.swift | 148 +++-- .../typelayout_based_value_operation.sil | 28 +- test/IRGen/unexploded-calls.swift | 22 +- test/IRGen/unmanaged_objc_throw_func.swift | 62 +-- test/IRGen/variadic_generic_fulfillments.sil | 36 +- test/IRGen/variadic_generic_functions.swift | 11 +- test/IRGen/variadic_generic_outlining.sil | 16 +- test/IRGen/variadic_generic_types.swift | 9 +- test/IRGen/variadic_generics.sil | 49 +- test/IRGen/variadic_vanishing_tuple.swift | 21 +- ...rtual-function-elimination-ir-thunks.swift | 12 +- .../virtual-function-elimination-ir.swift | 14 +- test/IRGen/weak_import_availability.swift | 30 +- test/IRGen/weak_import_native.swift | 7 +- test/IRGen/weaklinked_import.swift | 7 +- test/IRGen/windows-linking.swift | 18 +- ...tness-method-elimination-ir-relative.swift | 17 +- ...witness-method-elimination-ir-thunks.swift | 8 +- test/IRGen/witness_method_phi.sil | 13 +- test/IRGen/witness_table_multifile.swift | 13 +- test/IRGen/zombies.swift | 5 +- 170 files changed, 2127 insertions(+), 2653 deletions(-) diff --git a/test/IRGen/TestABIInaccessible.swift b/test/IRGen/TestABIInaccessible.swift index 7a316d40d83cc..29aea912c115b 100644 --- a/test/IRGen/TestABIInaccessible.swift +++ b/test/IRGen/TestABIInaccessible.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-type-layout -module-name main -I %t -emit-ir -primary-file %s %S/Inputs/ABIInaccessible.swift | %FileCheck %s -// RUN: %target-swift-frontend -disable-type-layout -module-name main -I %t -emit-ir -primary-file %s %S/Inputs/ABIInaccessible.swift +// RUN: %target-swift-frontend -disable-type-layout -module-name main -I %t -emit-ir -primary-file %s %S/Inputs/ABIInaccessible.swift | %FileCheck %s public struct AnotherType { init(_ t: T) { @@ -9,12 +8,12 @@ public struct AnotherType { } // Don't pass the metadata of Private to AnotherType's outlined destroy. -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s4main4copyyAA11AnotherTypeVyxGAElF"(%swift.opaque* noalias nocapture sret({{.*}}) %0, %T4main11AnotherTypeV* noalias nocapture %1, %swift.type* %T) -// CHECK: [[MD:%.*]] = call swiftcc %swift.metadata_response @"$s4main11AnotherTypeVMa"(i{{.*}} 0, %swift.type* %T) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s4main4copyyAA11AnotherTypeVyxGAElF"(ptr noalias nocapture sret({{.*}}) %0, ptr noalias nocapture %1, ptr %T) +// CHECK: [[MD:%.*]] = call swiftcc %swift.metadata_response @"$s4main11AnotherTypeVMa"(i{{.*}} 0, ptr %T) // CHECK: [[MD1:%.*]] = extractvalue %swift.metadata_response [[MD]], 0 -// CHECK: [[MD2:%.*]] = call swiftcc %swift.metadata_response @"$s4main6PublicVMa"(i{{.*}} 0, %swift.type* %T) +// CHECK: [[MD2:%.*]] = call swiftcc %swift.metadata_response @"$s4main6PublicVMa"(i{{.*}} 0, ptr %T) // CHECK: [[MD3:%.*]] = extractvalue %swift.metadata_response [[MD2]], 0 -// CHECK: call %T4main11AnotherTypeV* @"$s4main11AnotherTypeVyxGlWOc"(%T4main11AnotherTypeV* %1, %T4main11AnotherTypeV* {{.*}}, %swift.type* %T, %swift.type* [[MD3]], %swift.type* [[MD1]]) +// CHECK: call ptr @"$s4main11AnotherTypeVyxGlWOc"(ptr %1, ptr {{.*}}, ptr %T, ptr [[MD3]], ptr [[MD1]]) public func copy(_ a: AnotherType) -> AnotherType { let copy = a return copy diff --git a/test/IRGen/UseObjCMethod.swift b/test/IRGen/UseObjCMethod.swift index 46ee5703c0df6..6d2bc9455c226 100644 --- a/test/IRGen/UseObjCMethod.swift +++ b/test/IRGen/UseObjCMethod.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -import-objc-header %S/Inputs/StaticInline.h %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -import-objc-header %S/Inputs/StaticInline.h %s -emit-ir +// RUN: %target-swift-frontend -import-objc-header %S/Inputs/StaticInline.h %s -emit-ir | %FileCheck %s // REQUIRES: objc_interop import Foundation @@ -24,5 +23,5 @@ testDemo() // Make sure the clang importer puts the selectors and co into the llvm.compiler used variable. -// CHECK: @llvm.compiler.used = appending global [{{.*}} x i8*] [{{.*}} @"OBJC_CLASSLIST_REFERENCES_$_"{{.*}}@OBJC_METH_VAR_NAME_{{.*}}@OBJC_SELECTOR_REFERENCES_{{.*}}@OBJC_METH_VAR_NAME_.{{.*}}@OBJC_SELECTOR_REFERENCES_.{{.*}}] +// CHECK: @llvm.compiler.used = appending global [{{.*}} x ptr] [{{.*}} @"OBJC_CLASSLIST_REFERENCES_$_"{{.*}}@OBJC_METH_VAR_NAME_{{.*}}@OBJC_SELECTOR_REFERENCES_{{.*}}@OBJC_METH_VAR_NAME_.{{.*}}@OBJC_SELECTOR_REFERENCES_.{{.*}}] diff --git a/test/IRGen/abitypes.swift b/test/IRGen/abitypes.swift index 10dd3ecc144bc..75f60a38b5d3c 100644 --- a/test/IRGen/abitypes.swift +++ b/test/IRGen/abitypes.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers -I %S/Inputs/abi %s -emit-ir -enable-objc-interop | %FileCheck -check-prefix=%target-cpu-%target-os-abi %s -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/abi %s -emit-ir -enable-objc-interop +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/abi %s -emit-ir -enable-objc-interop | %FileCheck -check-prefix=%target-cpu-%target-os-abi %s // FIXME: rdar://problem/19648117 Needs splitting objc parts out // XFAIL: OS=linux-gnu, OS=windows-msvc, OS=openbsd, OS=linux-android, OS=linux-androideabi @@ -23,116 +22,106 @@ import Foundation // arm64-macosx: [[ARM64_MYRECT:%.*]] = type { float, float, float, float } class Foo { - // x86_64-macosx: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // x86_64-macosx: define internal { <2 x float>, <2 x float> } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1) {{[#0-9]*}} { - // x86_64-ios: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // x86_64-ios: define internal { <2 x float>, <2 x float> } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1) {{[#0-9]*}} { - // i386-ios: define hidden swiftcc void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%TSo6MyRectV* noalias nocapture sret({{.*}}) %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // i386-ios: define internal void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(%TSo6MyRectV* noalias nocapture sret({{.*}}) %0, i8* %1, i8* %2) {{[#0-9]*}} { - // armv7-ios: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // armv7-ios: define internal void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(%TSo6MyRectV* noalias nocapture sret({{.*}}) %0, i8* %1, i8* %2) {{[#0-9]*}} { - // armv7s-ios: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // armv7s-ios: define internal void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(%TSo6MyRectV* noalias nocapture sret({{.*}}) %0, i8* %1, i8* %2) {{[#0-9]*}} { - // arm64-ios: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // arm64-ios: define internal [[ARM64_MYRECT]] @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1) {{[#0-9]*}} { - // x86_64-tvos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // x86_64-tvos: define internal { <2 x float>, <2 x float> } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1) {{[#0-9]*}} { - // arm64-tvos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // arm64-tvos: define internal [[ARM64_MYRECT]] @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1) {{[#0-9]*}} { - // i386-watchos: define hidden swiftcc void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%TSo6MyRectV* noalias nocapture sret({{.*}}) %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // i386-watchos: define internal void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(%TSo6MyRectV* noalias nocapture sret({{.*}}) %0, i8* %1, i8* %2) {{[#0-9]*}} { - // armv7k-watchos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // armv7k-watchos: define internal [[ARMV7K_MYRECT]] @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1) {{[#0-9]*}} { - // armv64_32-watchos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // armv64_32-watchos: define internal [[ARMV7K_MYRECT]] @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1) {{[#0-9]*}} { - // arm64-watchos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // arm64-watchos: define internal [[ARM64_MYRECT]] @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1) {{[#0-9]*}} { - // x86_64-watchos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // x86_64-watchos: define internal { <2 x float>, <2 x float> } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1) {{[#0-9]*}} { + // x86_64-macosx: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // x86_64-macosx: define internal { <2 x float>, <2 x float> } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1) {{[#0-9]*}} { + // x86_64-ios: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // x86_64-ios: define internal { <2 x float>, <2 x float> } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1) {{[#0-9]*}} { + // i386-ios: define hidden swiftcc void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr noalias nocapture sret({{.*}}) %0, ptr swiftself %1) {{.*}} { + // i386-ios: define internal void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr noalias nocapture sret({{.*}}) %0, ptr %1, ptr %2) {{[#0-9]*}} { + // armv7-ios: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // armv7-ios: define internal void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr noalias nocapture sret({{.*}}) %0, ptr %1, ptr %2) {{[#0-9]*}} { + // armv7s-ios: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // armv7s-ios: define internal void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr noalias nocapture sret({{.*}}) %0, ptr %1, ptr %2) {{[#0-9]*}} { + // arm64-ios: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // arm64-ios: define internal [[ARM64_MYRECT]] @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1) {{[#0-9]*}} { + // x86_64-tvos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // x86_64-tvos: define internal { <2 x float>, <2 x float> } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1) {{[#0-9]*}} { + // arm64-tvos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // arm64-tvos: define internal [[ARM64_MYRECT]] @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1) {{[#0-9]*}} { + // i386-watchos: define hidden swiftcc void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr noalias nocapture sret({{.*}}) %0, ptr swiftself %1) {{.*}} { + // i386-watchos: define internal void @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr noalias nocapture sret({{.*}}) %0, ptr %1, ptr %2) {{[#0-9]*}} { + // armv7k-watchos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // armv7k-watchos: define internal [[ARMV7K_MYRECT]] @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1) {{[#0-9]*}} { + // armv64_32-watchos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // armv64_32-watchos: define internal [[ARMV7K_MYRECT]] @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1) {{[#0-9]*}} { + // arm64-watchos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // arm64-watchos: define internal [[ARM64_MYRECT]] @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1) {{[#0-9]*}} { + // x86_64-watchos: define hidden swiftcc { float, float, float, float } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // x86_64-watchos: define internal { <2 x float>, <2 x float> } @"$s8abitypes3FooC3bar{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1) {{[#0-9]*}} { @objc dynamic func bar() -> MyRect { return MyRect(x: 1, y: 2, width: 3, height: 4) } - // x86_64-macosx: define hidden swiftcc double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}F"(double %0, double %1, double %2, double %3, %T8abitypes3FooC* swiftself %4) {{.*}} { - // x86_64-macosx: define internal double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, %TSo6CGRectV* byval({{.*}}) align 8 %2) {{[#0-9]*}} { - // armv7-ios: define hidden swiftcc double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, %T8abitypes3FooC* swiftself %4) {{.*}} { - // armv7-ios: define internal double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, [4 x i32] %2) {{[#0-9]*}} { - // armv7s-ios: define hidden swiftcc double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, %T8abitypes3FooC* swiftself %4) {{.*}} { - // armv7s-ios: define internal double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, [4 x i32] %2) {{[#0-9]*}} { - // armv7k-watchos: define hidden swiftcc double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, %T8abitypes3FooC* swiftself %4) {{.*}} { - // armv7k-watchos: define internal double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, [4 x float] %2) {{[#0-9]*}} { + // x86_64-macosx: define hidden swiftcc double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}F"(double %0, double %1, double %2, double %3, ptr swiftself %4) {{.*}} { + // x86_64-macosx: define internal double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, ptr byval({{.*}}) align 8 %2) {{[#0-9]*}} { + // armv7-ios: define hidden swiftcc double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { + // armv7-ios: define internal double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, [4 x i32] %2) {{[#0-9]*}} { + // armv7s-ios: define hidden swiftcc double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { + // armv7s-ios: define internal double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, [4 x i32] %2) {{[#0-9]*}} { + // armv7k-watchos: define hidden swiftcc double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { + // armv7k-watchos: define internal double @"$s8abitypes3FooC14getXFromNSRect{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, [4 x float] %2) {{[#0-9]*}} { @objc dynamic func getXFromNSRect(_ r: NSRect) -> Double { return Double(r.origin.x) } - // x86_64-macosx: define hidden swiftcc float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, %T8abitypes3FooC* swiftself %4) {{.*}} { - // x86_64-macosx: define internal float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, <2 x float> %2, <2 x float> %3) {{[#0-9]*}} { - // armv7-ios: define hidden swiftcc float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, %T8abitypes3FooC* swiftself %4) {{.*}} { - // armv7-ios: define internal float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, [4 x i32] %2) {{[#0-9]*}} { - // armv7s-ios: define hidden swiftcc float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, %T8abitypes3FooC* swiftself %4) {{.*}} { - // armv7s-ios: define internal float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, [4 x i32] %2) {{[#0-9]*}} { - // armv7k-watchos: define hidden swiftcc float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, %T8abitypes3FooC* swiftself %4) {{.*}} { - // armv7k-watchos: define internal float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, [4 x float] %2) {{[#0-9]*}} { - // arm64_32-watchos: define hidden swiftcc float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, %T8abitypes3FooC* swiftself %4) {{.*}} { - // arm64_32-watchos: define internal float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, [4 x float] %2) {{[#0-9]*}} { + // x86_64-macosx: define hidden swiftcc float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { + // x86_64-macosx: define internal float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, <2 x float> %2, <2 x float> %3) {{[#0-9]*}} { + // armv7-ios: define hidden swiftcc float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { + // armv7-ios: define internal float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, [4 x i32] %2) {{[#0-9]*}} { + // armv7s-ios: define hidden swiftcc float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { + // armv7s-ios: define internal float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, [4 x i32] %2) {{[#0-9]*}} { + // armv7k-watchos: define hidden swiftcc float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { + // armv7k-watchos: define internal float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, [4 x float] %2) {{[#0-9]*}} { + // arm64_32-watchos: define hidden swiftcc float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { + // arm64_32-watchos: define internal float @"$s8abitypes3FooC12getXFromRect{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, [4 x float] %2) {{[#0-9]*}} { @objc dynamic func getXFromRect(_ r: MyRect) -> Float { return r.x } // Call from Swift entrypoint with exploded Rect to @objc entrypoint // with unexploded ABI-coerced type. - // x86_64-macosx: define hidden swiftcc float @"$s8abitypes3FooC17getXFromRectSwift{{.*}}"(float %0, float %1, float %2, float %3, [[SELF:%.*]]* swiftself %4) {{.*}} { + // x86_64-macosx: define hidden swiftcc float @"$s8abitypes3FooC17getXFromRectSwift{{.*}}"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { // x86_64-macosx: [[COERCED:%.*]] = alloca [[MYRECT:%.*MyRect.*]], align 8 - // x86_64-macosx: [[SEL:%.*]] = load i8*, i8** @"\01L_selector(getXFromRect:)", align 8 - // x86_64-macosx: [[CAST:%.*]] = bitcast [[MYRECT]]* [[COERCED]] to { <2 x float>, <2 x float> }* - // x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { <2 x float>, <2 x float> }, { <2 x float>, <2 x float> }* [[CAST]], i32 0, i32 0 - // x86_64-macosx: [[FIRST_HALF:%.*]] = load <2 x float>, <2 x float>* [[T0]] - // x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { <2 x float>, <2 x float> }, { <2 x float>, <2 x float> }* [[CAST]], i32 0, i32 1 - // x86_64-macosx: [[SECOND_HALF:%.*]] = load <2 x float>, <2 x float>* [[T0]] - // x86_64-macosx: [[SELFCAST:%.*]] = bitcast [[SELF]]* %4 to i8* - // x86_64-macosx: [[RESULT:%.*]] = call float bitcast (void ()* @objc_msgSend to float (i8*, i8*, <2 x float>, <2 x float>)*)(i8* [[SELFCAST]], i8* [[SEL]], <2 x float> [[FIRST_HALF]], <2 x float> [[SECOND_HALF]]) - // armv7-ios: define hidden swiftcc float @"$s8abitypes3FooC17getXFromRectSwift{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, [[SELF:%.*]]* swiftself %4) {{.*}} { + // x86_64-macosx: [[SEL:%.*]] = load ptr, ptr @"\01L_selector(getXFromRect:)", align 8 + // x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { <2 x float>, <2 x float> }, ptr [[COERCED]], i32 0, i32 0 + // x86_64-macosx: [[FIRST_HALF:%.*]] = load <2 x float>, ptr [[T0]] + // x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { <2 x float>, <2 x float> }, ptr [[COERCED]], i32 0, i32 1 + // x86_64-macosx: [[SECOND_HALF:%.*]] = load <2 x float>, ptr [[T0]] + // x86_64-macosx: [[RESULT:%.*]] = call float @objc_msgSend(ptr %4, ptr [[SEL]], <2 x float> [[FIRST_HALF]], <2 x float> [[SECOND_HALF]]) + // armv7-ios: define hidden swiftcc float @"$s8abitypes3FooC17getXFromRectSwift{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { // armv7-ios: [[DEBUGVAR:%.*]] = alloca [[MYRECT:%.*MyRect.*]], align 4 // armv7-ios: [[COERCED:%.*]] = alloca [[MYRECT:%.*MyRect.*]], align 4 - // armv7-ios: [[SEL:%.*]] = load i8*, i8** @"\01L_selector(getXFromRect:)", align 4 - // armv7-ios: [[CAST:%.*]] = bitcast [[MYRECT]]* [[COERCED]] to [4 x i32]* - // armv7-ios: [[LOADED:%.*]] = load [4 x i32], [4 x i32]* [[CAST]] - // armv7-ios: [[SELFCAST:%.*]] = bitcast [[SELF]]* %4 to i8* - // armv7-ios: [[RESULT:%.*]] = call float bitcast (void ()* @objc_msgSend to float (i8*, i8*, [4 x i32])*)(i8* [[SELFCAST]], i8* [[SEL]], [4 x i32] [[LOADED]]) + // armv7-ios: [[SEL:%.*]] = load ptr, ptr @"\01L_selector(getXFromRect:)", align 4 + // armv7-ios: [[LOADED:%.*]] = load [4 x i32], ptr [[COERCED]] + // armv7-ios: [[RESULT:%.*]] = call float @objc_msgSend(ptr %4, ptr [[SEL]], [4 x i32] [[LOADED]]) - // armv7s-ios: define hidden swiftcc float @"$s8abitypes3FooC17getXFromRectSwift{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, [[SELF:%.*]]* swiftself %4) {{.*}} { + // armv7s-ios: define hidden swiftcc float @"$s8abitypes3FooC17getXFromRectSwift{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { // armv7s-ios: [[DEBUGVAR:%.*]] = alloca [[MYRECT:%.*MyRect.*]], align 4 // armv7s-ios: [[COERCED:%.*]] = alloca [[MYRECT:%.*MyRect.*]], align 4 - // armv7s-ios: [[SEL:%.*]] = load i8*, i8** @"\01L_selector(getXFromRect:)", align 4 - // armv7s-ios: [[CAST:%.*]] = bitcast [[MYRECT]]* [[COERCED]] to [4 x i32]* - // armv7s-ios: [[LOADED:%.*]] = load [4 x i32], [4 x i32]* [[CAST]] - // armv7s-ios: [[SELFCAST:%.*]] = bitcast [[SELF]]* %4 to i8* - // armv7s-ios: [[RESULT:%.*]] = call float bitcast (void ()* @objc_msgSend to float (i8*, i8*, [4 x i32])*)(i8* [[SELFCAST]], i8* [[SEL]], [4 x i32] [[LOADED]]) + // armv7s-ios: [[SEL:%.*]] = load ptr, ptr @"\01L_selector(getXFromRect:)", align 4 + // armv7s-ios: [[LOADED:%.*]] = load [4 x i32], ptr [[COERCED]] + // armv7s-ios: [[RESULT:%.*]] = call float @objc_msgSend(ptr %4, ptr [[SEL]], [4 x i32] [[LOADED]]) - // armv7k-watchos: define hidden swiftcc float @"$s8abitypes3FooC17getXFromRectSwift{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, [[SELF:%.*]]* swiftself %4) {{.*}} { + // armv7k-watchos: define hidden swiftcc float @"$s8abitypes3FooC17getXFromRectSwift{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { // armv7k-watchos: [[DEBUGVAR:%.*]] = alloca [[MYRECT:%.*MyRect.*]], align 4 // armv7k-watchos: [[COERCED:%.*]] = alloca [[MYRECT:%.*MyRect.*]], align 4 - // armv7k-watchos: [[SEL:%.*]] = load i8*, i8** @"\01L_selector(getXFromRect:)", align 4 - // armv7k-watchos: [[CAST:%.*]] = bitcast [[MYRECT]]* [[COERCED]] to [4 x float]* - // armv7k-watchos: [[LOADED:%.*]] = load [4 x float], [4 x float]* [[CAST]] - // armv7k-watchos: [[SELFCAST:%.*]] = bitcast [[SELF]]* %4 to i8* - // armv7k-watchos: [[RESULT:%.*]] = call float bitcast (void ()* @objc_msgSend to float (i8*, i8*, [4 x float])*)(i8* [[SELFCAST]], i8* [[SEL]], [4 x float] [[LOADED]]) + // armv7k-watchos: [[SEL:%.*]] = load ptr, ptr @"\01L_selector(getXFromRect:)", align 4 + // armv7k-watchos: [[LOADED:%.*]] = load [4 x float], ptr [[COERCED]] + // armv7k-watchos: [[RESULT:%.*]] = call float @objc_msgSend(ptr %4, ptr [[SEL]], [4 x float] [[LOADED]]) - // arm64_32-watchos: define hidden swiftcc float @"$s8abitypes3FooC17getXFromRectSwift{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, [[SELF:%.*]]* swiftself %4) {{.*}} { + // arm64_32-watchos: define hidden swiftcc float @"$s8abitypes3FooC17getXFromRectSwift{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { // arm64_32-watchos: [[DEBUGVAR:%.*]] = alloca [[MYRECT:%.*MyRect.*]], align 4 // arm64_32-watchos: [[COERCED:%.*]] = alloca [[MYRECT:%.*MyRect.*]], align 4 - // arm64_32-watchos: [[SEL:%.*]] = load i8*, i8** @"\01L_selector(getXFromRect:)", align 4 - // arm64_32-watchos: [[CAST:%.*]] = bitcast [[MYRECT]]* [[COERCED]] to [4 x float]* - // arm64_32-watchos: [[LOADED:%.*]] = load [4 x float], [4 x float]* [[CAST]] - // arm64_32-watchos: [[SELFCAST:%.*]] = bitcast [[SELF]]* %4 to i8* - // arm64_32-watchos: [[RESULT:%.*]] = call float bitcast (void ()* @objc_msgSend to float (i8*, i8*, [4 x float])*)(i8* [[SELFCAST]], i8* [[SEL]], [4 x float] [[LOADED]]) + // arm64_32-watchos: [[SEL:%.*]] = load ptr, ptr @"\01L_selector(getXFromRect:)", align 4 + // arm64_32-watchos: [[LOADED:%.*]] = load [4 x float], ptr [[COERCED]] + // arm64_32-watchos: [[RESULT:%.*]] = call float @objc_msgSend(ptr %4, ptr [[SEL]], [4 x float] [[LOADED]]) func getXFromRectSwift(_ r: MyRect) -> Float { return getXFromRect(r) } // Ensure that MyRect is passed as an indirect-byval on x86_64 because we run out of registers for direct arguments - // x86_64-macosx: define internal float @"$s8abitypes3FooC25getXFromRectIndirectByVal{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, float %2, float %3, float %4, float %5, float %6, float %7, float %8, %TSo6MyRectV* byval({{.*}}) align 8 %9) {{[#0-9]*}} { + // x86_64-macosx: define internal float @"$s8abitypes3FooC25getXFromRectIndirectByVal{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, float %2, float %3, float %4, float %5, float %6, float %7, float %8, ptr byval({{.*}}) align 8 %9) {{[#0-9]*}} { @objc dynamic func getXFromRectIndirectByVal(_: Float, second _: Float, third _: Float, fourth _: Float, fifth _: Float, sixth _: Float, @@ -142,96 +131,96 @@ class Foo { } // Make sure the caller-side from Swift also uses indirect-byval for the argument - // x86_64-macosx: define hidden swiftcc float @"$s8abitypes3FooC25getXFromRectIndirectSwift{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, %T8abitypes3FooC* swiftself %4) {{.*}} { + // x86_64-macosx: define hidden swiftcc float @"$s8abitypes3FooC25getXFromRectIndirectSwift{{[_0-9a-zA-Z]*}}F"(float %0, float %1, float %2, float %3, ptr swiftself %4) {{.*}} { func getXFromRectIndirectSwift(_ r: MyRect) -> Float { let f : Float = 1.0 // x86_64-macosx: alloca // x86_64-macosx: alloca // x86_64-macosx: [[TEMP:%.*]] = alloca [[TEMPTYPE:%.*]], align 8 - // x86_64-macosx: [[RESULT:%.*]] = call float bitcast (void ()* @objc_msgSend to float (i8*, i8*, float, float, float, float, float, float, float, [[TEMPTYPE]]*)*)(i8* %{{.*}}, i8* %{{.*}}, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, [[TEMPTYPE]]* byval({{.*}}) align 8 [[TEMP]]) + // x86_64-macosx: [[RESULT:%.*]] = call float @objc_msgSend(ptr %{{.*}}, ptr %{{.*}}, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, ptr byval({{.*}}) align 8 [[TEMP]]) // x86_64-macosx: ret float [[RESULT]] return getXFromRectIndirectByVal(f, second: f, third: f, fourth: f, fifth: f, sixth: f, seventh: f, withRect: r); } // x86_64 returns an HA of four floats directly in two <2 x float> - // x86_64-macosx: define hidden swiftcc float @"$s8abitypes3FooC4barc{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // x86_64-macosx: load i8*, i8** @"\01L_selector(newRect)", align 8 - // x86_64-macosx: [[RESULT:%.*]] = call { <2 x float>, <2 x float> } bitcast (void ()* @objc_msgSend + // x86_64-macosx: define hidden swiftcc float @"$s8abitypes3FooC4barc{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr swiftself %1) {{.*}} { + // x86_64-macosx: load ptr, ptr @"\01L_selector(newRect)", align 8 + // x86_64-macosx: [[RESULT:%.*]] = call { <2 x float>, <2 x float> } bitcast (ptr @objc_msgSend // x86_64-macosx: store { <2 x float>, <2 x float> } [[RESULT]] - // x86_64-macosx: [[CAST:%.*]] = bitcast { <2 x float>, <2 x float> }* - // x86_64-macosx: load { float, float, float, float }, { float, float, float, float }* [[CAST]] + // x86_64-macosx: [[CAST:%.*]] = bitcast ptr + // x86_64-macosx: load { float, float, float, float }, ptr [[CAST]] // x86_64-macosx: ret float // // armv7 returns an HA of four floats indirectly - // armv7-ios: define hidden swiftcc float @"$s8abitypes3FooC4barc{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, %T8abitypes3FooC* swiftself %1) {{.*}} { + // armv7-ios: define hidden swiftcc float @"$s8abitypes3FooC4barc{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr swiftself %1) {{.*}} { // armv7-ios: [[RESULT:%.*]] = alloca [[RECTTYPE:%.*MyRect.*]], align 4 - // armv7-ios: load i8*, i8** @"\01L_selector(newRect)", align 4 - // armv7-ios: call void bitcast (void ()* @objc_msgSend_stret to void ([[RECTTYPE]]*, [[RECEIVER:.*]]*, i8*)*)([[RECTTYPE]]* noalias nocapture sret({{.*}}) %call.aggresult - // armv7-ios: [[GEP1:%.*]] = getelementptr inbounds [[RECTTYPE]], [[RECTTYPE]]* [[RESULT]], i32 0, i32 1 - // armv7-ios: [[GEP2:%.*]] = getelementptr inbounds {{.*}}, {{.*}}* [[GEP1]], i32 0, i32 0 - // armv7-ios: [[RETVAL:%.*]] = load float, float* [[GEP2]], align 4 + // armv7-ios: load ptr, ptr @"\01L_selector(newRect)", align 4 + // armv7-ios: call void @objc_msgSend_stret(ptr noalias nocapture sret({{.*}}) %call.aggresult + // armv7-ios: [[GEP1:%.*]] = getelementptr inbounds [[RECTTYPE]], ptr [[RESULT]], i32 0, i32 1 + // armv7-ios: [[GEP2:%.*]] = getelementptr inbounds {{.*}}, ptr [[GEP1]], i32 0, i32 0 + // armv7-ios: [[RETVAL:%.*]] = load float, ptr [[GEP2]], align 4 // armv7-ios: ret float [[RETVAL]] // // armv7s returns an HA of four floats indirectly - // armv7s-ios: define hidden swiftcc float @"$s8abitypes3FooC4barc{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, %T8abitypes3FooC* swiftself %1) {{.*}} { + // armv7s-ios: define hidden swiftcc float @"$s8abitypes3FooC4barc{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr swiftself %1) {{.*}} { // armv7s-ios: [[RESULT:%.*]] = alloca [[RECTTYPE:%.*MyRect.*]], align 4 - // armv7s-ios: load i8*, i8** @"\01L_selector(newRect)", align 4 - // armv7s-ios: call void bitcast (void ()* @objc_msgSend_stret to void ([[RECTTYPE]]*, [[RECEIVER:.*]]*, i8*)*)([[RECTTYPE]]* noalias nocapture sret({{.*}}) %call.aggresult - // armv7s-ios: [[GEP1:%.*]] = getelementptr inbounds [[RECTTYPE]], [[RECTTYPE]]* [[RESULT]], i32 0, i32 1 - // armv7s-ios: [[GEP2:%.*]] = getelementptr inbounds {{.*}}, {{.*}}* [[GEP1]], i32 0, i32 0 - // armv7s-ios: [[RETVAL:%.*]] = load float, float* [[GEP2]], align 4 + // armv7s-ios: load ptr, ptr @"\01L_selector(newRect)", align 4 + // armv7s-ios: call void @objc_msgSend_stret(ptr noalias nocapture sret({{.*}}) %call.aggresult + // armv7s-ios: [[GEP1:%.*]] = getelementptr inbounds [[RECTTYPE]], ptr [[RESULT]], i32 0, i32 1 + // armv7s-ios: [[GEP2:%.*]] = getelementptr inbounds {{.*}}, ptr [[GEP1]], i32 0, i32 0 + // armv7s-ios: [[RETVAL:%.*]] = load float, ptr [[GEP2]], align 4 // armv7s-ios: ret float [[RETVAL]] // // armv7k returns an HA of four floats directly - // armv7k-watchos: define hidden swiftcc float @"$s8abitypes3FooC4barc{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // armv7k-watchos: load i8*, i8** @"\01L_selector(newRect)", align 4 - // armv7k-watchos: [[RESULT:%.*]] = call [[ARMV7K_MYRECT]] bitcast (void ()* @objc_msgSend + // armv7k-watchos: define hidden swiftcc float @"$s8abitypes3FooC4barc{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr swiftself %1) {{.*}} { + // armv7k-watchos: load ptr, ptr @"\01L_selector(newRect)", align 4 + // armv7k-watchos: [[RESULT:%.*]] = call [[ARMV7K_MYRECT]] bitcast (ptr @objc_msgSend // armv7k-watchos: store [[ARMV7K_MYRECT]] [[RESULT]] - // armv7k-watchos: [[CAST:%.*]] = bitcast [[ARMV7K_MYRECT]]* - // armv7k-watchos: load { float, float, float, float }, { float, float, float, float }* [[CAST]] + // armv7k-watchos: [[CAST:%.*]] = bitcast ptr + // armv7k-watchos: load { float, float, float, float }, ptr [[CAST]] // armv7k-watchos: ret float func barc(_ p: StructReturns) -> Float { return p.newRect().y } - // x86_64-macosx: define hidden swiftcc { double, double, double } @"$s8abitypes3FooC3baz{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // x86_64-macosx: define internal void @"$s8abitypes3FooC3baz{{[_0-9a-zA-Z]*}}FTo"(%TSo4TrioV* noalias nocapture sret({{.*}}) %0, i8* %1, i8* %2) {{[#0-9]*}} { + // x86_64-macosx: define hidden swiftcc { double, double, double } @"$s8abitypes3FooC3baz{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // x86_64-macosx: define internal void @"$s8abitypes3FooC3baz{{[_0-9a-zA-Z]*}}FTo"(ptr noalias nocapture sret({{.*}}) %0, ptr %1, ptr %2) {{[#0-9]*}} { @objc dynamic func baz() -> Trio { return Trio(i: 1.0, j: 2.0, k: 3.0) } - // x86_64-macosx: define hidden swiftcc double @"$s8abitypes3FooC4bazc{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // x86_64-macosx: load i8*, i8** @"\01L_selector(newTrio)", align 8 - // x86_64-macosx: [[CAST:%[0-9]+]] = bitcast {{%.*}}* %0 - // x86_64-macosx: call void bitcast (void ()* @objc_msgSend_stret to void (%TSo4TrioV*, [[OPAQUE:.*]]*, i8*)*) + // x86_64-macosx: define hidden swiftcc double @"$s8abitypes3FooC4bazc{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr swiftself %1) {{.*}} { + // x86_64-macosx: load ptr, ptr @"\01L_selector(newTrio)", align 8 + // x86_64-macosx: [[CAST:%[0-9]+]] = bitcast ptr %0 + // x86_64-macosx: call void @objc_msgSend_stret func bazc(_ p: StructReturns) -> Double { return p.newTrio().j } - // x86_64-macosx: define hidden swiftcc i64 @"$s8abitypes3FooC7getpair{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // x86_64-macosx: [[RESULT:%.*]] = call i64 bitcast (void ()* @objc_msgSend to i64 ([[OPAQUE:.*]]*, i8*)*) - // x86_64-macosx: [[GEP1:%.*]] = getelementptr inbounds { i64 }, { i64 }* {{.*}}, i32 0, i32 0 - // x86_64-macosx: store i64 [[RESULT]], i64* [[GEP1]] - // x86_64-macosx: [[GEP2:%.*]] = getelementptr inbounds { i64 }, { i64 }* {{.*}}, i32 0, i32 0 - // x86_64-macosx: load i64, i64* [[GEP2]] + // x86_64-macosx: define hidden swiftcc i64 @"$s8abitypes3FooC7getpair{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr swiftself %1) {{.*}} { + // x86_64-macosx: [[RESULT:%.*]] = call i64 @objc_msgSend + // x86_64-macosx: [[GEP1:%.*]] = getelementptr inbounds { i64 }, ptr {{.*}}, i32 0, i32 0 + // x86_64-macosx: store i64 [[RESULT]], ptr [[GEP1]] + // x86_64-macosx: [[GEP2:%.*]] = getelementptr inbounds { i64 }, ptr {{.*}}, i32 0, i32 0 + // x86_64-macosx: load i64, ptr [[GEP2]] // x86_64-macosx: ret i64 func getpair(_ p: StructReturns) -> IntPair { return p.newPair() } - // x86_64-macosx: define internal i64 @"$s8abitypes3FooC8takepair{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i64 %2) {{[#0-9]*}} { + // x86_64-macosx: define internal i64 @"$s8abitypes3FooC8takepair{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i64 %2) {{[#0-9]*}} { @objc dynamic func takepair(_ p: IntPair) -> IntPair { return p } - // x86_64-macosx: define hidden swiftcc i64 @"$s8abitypes3FooC9getnested{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // x86_64-macosx: call i64 bitcast (void ()* @objc_msgSend to i64 ([[OPAQUE:.*]]*, i8*)*) + // x86_64-macosx: define hidden swiftcc i64 @"$s8abitypes3FooC9getnested{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr swiftself %1) {{.*}} { + // x86_64-macosx: call i64 @objc_msgSend // x86_64-macosx: bitcast // x86_64-macosx: call void @llvm.lifetime.start // x86_64-macosx: store i32 {{.*}} // x86_64-macosx: store i32 {{.*}} // x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { i64 }, { i64 } - // x86_64-macosx: load i64, i64* [[T0]], align 8 + // x86_64-macosx: load i64, ptr [[T0]], align 8 // x86_64-macosx: bitcast // x86_64-macosx: call void @llvm.lifetime.end // x86_64-macosx: ret i64 @@ -239,96 +228,95 @@ class Foo { return p.newNestedInts() } - // x86_64-macosx: define internal i8* @"$s8abitypes3FooC9copyClass{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i8* %2) {{[#0-9]*}} { - // x86_64-macosx: [[VALUE:%[0-9]+]] = call swiftcc [[TYPE:%.*]]* @"$s8abitypes3FooC9copyClass{{[_0-9a-zA-Z]*}}F" - // x86_64-macosx: [[T0:%.*]] = call [[OBJC:%objc_class]]* @swift_getObjCClassFromMetadata([[TYPE]]* [[VALUE]]) - // x86_64-macosx: [[RESULT:%[0-9]+]] = bitcast [[OBJC]]* [[T0]] to i8* - // x86_64-macosx: ret i8* [[RESULT]] + // x86_64-macosx: define internal ptr @"$s8abitypes3FooC9copyClass{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} { + // x86_64-macosx: [[VALUE:%[0-9]+]] = call swiftcc ptr @"$s8abitypes3FooC9copyClass{{[_0-9a-zA-Z]*}}F" + // x86_64-macosx: [[T0:%.*]] = call ptr @swift_getObjCClassFromMetadata(ptr [[VALUE]]) + // x86_64-macosx: ret ptr [[T0]] @objc dynamic func copyClass(_ a: AnyClass) -> AnyClass { return a } - // x86_64-macosx: define internal i8* @"$s8abitypes3FooC9copyProto{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i8* %2) {{[#0-9]*}} { + // x86_64-macosx: define internal ptr @"$s8abitypes3FooC9copyProto{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} { // x86_64-macosx: [[VALUE:%[0-9]+]] = call swiftcc [[TYPE:%.*]] @"$s8abitypes3FooC9copyProto{{[_0-9a-zA-Z]*}}F" - // x86_64-macosx: [[RESULT:%[0-9]+]] = bitcast [[TYPE]] [[VALUE]] to i8* - // x86_64-macosx: ret i8* [[RESULT]] + // x86_64-macosx: [[RESULT:%[0-9]+]] = bitcast [[TYPE:%.*]] [[VALUE]] to ptr + // x86_64-macosx: ret ptr [[RESULT]] @objc dynamic func copyProto(_ a: AnyObject) -> AnyObject { return a } - // x86_64-macosx: define internal i8* @"$s8abitypes3FooC13copyProtoComp{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i8* %2) {{[#0-9]*}} { + // x86_64-macosx: define internal ptr @"$s8abitypes3FooC13copyProtoComp{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} { // x86_64-macosx: [[VALUE:%[0-9]+]] = call swiftcc [[TYPE:%.*]] @"$s8abitypes3FooC13copyProtoComp{{[_0-9a-zA-Z]*}}F" - // x86_64-macosx: [[RESULT:%[0-9]+]] = bitcast [[TYPE]] [[VALUE]] to i8* - // x86_64-macosx: ret i8* [[RESULT]] + // x86_64-macosx: [[RESULT:%[0-9]+]] = bitcast [[TYPE]] [[VALUE]] to ptr + // x86_64-macosx: ret ptr [[RESULT]] @objc dynamic func copyProtoComp(_ a: P1 & P2) -> P1 & P2 { return a } - // x86_64-macosx: define hidden swiftcc i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // x86_64-macosx: define internal signext i8 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i8 signext %2) {{[#0-9]*}} { + // x86_64-macosx: define hidden swiftcc i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { + // x86_64-macosx: define internal signext i8 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i8 signext %2) {{[#0-9]*}} { // x86_64-macosx: [[R1:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertObjCBoolToBool{{[_0-9a-zA-Z]*}}F" // x86_64-macosx: [[R2:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F" // x86_64-macosx: [[R3:%[0-9]+]] = call swiftcc i8 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[R2]] // x86_64-macosx: ret i8 [[R3]] // - // x86_64-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* %1) {{.*}} { + // x86_64-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr %1) {{.*}} { // x86_64-ios-fixme: define internal zeroext i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo" // x86_64-ios-fixme: [[R1:%[0-9]+]] = call i1 @"$s10ObjectiveC22_convertObjCBoolToBoolSbAA0cD0V1x_tF"(i1 %2) // x86_64-ios-fixme: [[R2:%[0-9]+]] = call i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 [[R1]] // x86_64-ios-fixme: [[R3:%[0-9]+]] = call i1 @"$s10ObjectiveC22_convertBoolToObjCBoolAA0eF0VSb1x_tF"(i1 [[R2]]) // x86_64-ios-fixme: ret i1 [[R3]] // - // armv7-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* %1) {{.*}} { - // armv7-ios-fixme: define internal signext i8 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i8 signext %2) {{[#0-9]*}} { + // armv7-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr %1) {{.*}} { + // armv7-ios-fixme: define internal signext i8 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i8 signext %2) {{[#0-9]*}} { // armv7-ios-fixme: [[R1:%[0-9]+]] = call i1 @"$s10ObjectiveC22_convertObjCBoolToBool1xSbAA0cD0V_tF" // armv7-ios-fixme: [[R2:%[0-9]+]] = call i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 [[R1]] // armv7-ios-fixme: [[R3:%[0-9]+]] = call i8 @"$s10ObjectiveC22_convertBoolToObjCBoolAA0eF0VSb1x_tF"(i1 [[R2]] // armv7-ios-fixme: ret i8 [[R3]] // - // armv7s-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, %T8abitypes3FooC*) {{.*}} { - // armv7s-ios-fixme: define internal signext i8 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo"(i8*, i8*, i8 signext) {{[#0-9]*}} { + // armv7s-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, ptr) {{.*}} { + // armv7s-ios-fixme: define internal signext i8 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo"(ptr, ptr, i8 signext) {{[#0-9]*}} { // armv7s-ios-fixme: [[R1:%[0-9]+]] = call i1 @"$s10ObjectiveC22_convertObjCBoolToBool1xSbAA0cD0V_tF" // armv7s-ios-fixme: [[R2:%[0-9]+]] = call i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 [[R1]] // armv7s-ios-fixme: [[R3:%[0-9]+]] = call i8 @"$s10ObjectiveC22_convertBoolToObjCBoolAA0eF0VSb1x_tF"(i1 [[R2]] // armv7s-ios-fixme: ret i8 [[R3]] // - // arm64-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, %T8abitypes3FooC*) {{.*}} { + // arm64-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, ptr) {{.*}} { // arm64-ios-fixme: define internal zeroext i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo" // arm64-ios-fixme: [[R2:%[0-9]+]] = call i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F" // arm64-ios-fixme: ret i1 [[R2]] // - // arm64e-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, %T8abitypes3FooC*) {{.*}} { + // arm64e-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, ptr) {{.*}} { // arm64e-ios-fixme: define internal zeroext i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo" // arm64e-ios-fixme: [[R2:%[0-9]+]] = call i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F" // arm64e-ios-fixme: ret i1 [[R2]] // - // i386-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, %T8abitypes3FooC*) {{.*}} { - // i386-ios-fixme: define internal signext i8 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo"(i8*, i8*, i8 signext) {{[#0-9]*}} { + // i386-ios-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, ptr) {{.*}} { + // i386-ios-fixme: define internal signext i8 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo"(ptr, ptr, i8 signext) {{[#0-9]*}} { // i386-ios-fixme: [[R1:%[0-9]+]] = call i1 @"$s10ObjectiveC22_convertObjCBoolToBool{{[_0-9a-zA-Z]*}}F" // i386-ios-fixme: [[R2:%[0-9]+]] = call i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 [[R1]] // i386-ios-fixme: [[R3:%[0-9]+]] = call i8 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[R2]] // i386-ios-fixme: ret i8 [[R3]] // - // x86_64-tvos-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, %T8abitypes3FooC*) {{.*}} { + // x86_64-tvos-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, ptr) {{.*}} { // x86_64-tvos-fixme: define internal zeroext i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo" // x86_64-tvos-fixme: [[R1:%[0-9]+]] = call i1 @"$s10ObjectiveC22_convertObjCBoolToBoolSbAA0cD0V1x_tF"(i1 %2) // x86_64-tvos-fixme: [[R2:%[0-9]+]] = call i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 [[R1]] // x86_64-tvos-fixme: [[R3:%[0-9]+]] = call i1 @"$s10ObjectiveC22_convertBoolToObjCBoolAA0eF0VSb1x_tF"(i1 [[R2]]) // x86_64-tvos-fixme: ret i1 [[R3]] // - // arm64-tvos-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, %T8abitypes3FooC*) {{.*}} { + // arm64-tvos-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, ptr) {{.*}} { // arm64-tvos-fixme: define internal zeroext i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo" // arm64-tvos-fixme: [[R2:%[0-9]+]] = call i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F" // arm64-tvos-fixme: ret i1 [[R2]] - // i386-watchos: define hidden swiftcc i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) + // i386-watchos: define hidden swiftcc i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) // i386-watchos: define internal zeroext i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo" // i386-watchos: [[R1:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertObjCBoolToBoolySbAA0cD0VF"(i1 %2) // i386-watchos: [[R2:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1 [[R1]] // i386-watchos: [[R3:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertBoolToObjCBoolyAA0eF0VSbF"(i1 [[R2]]) // i386-watchos: ret i1 [[R3]] // - // arm64-watchos-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, %T8abitypes3FooC*) {{.*}} { + // arm64-watchos-fixme: define hidden i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F"(i1, ptr) {{.*}} { // arm64-watchos-fixme: define internal zeroext i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}FTo" // arm64-watchos-fixme: [[R2:%[0-9]+]] = call i1 @"$s8abitypes3FooC6negate{{[_0-9a-zA-Z]*}}F" // arm64-watchos-fixme: ret i1 [[R2]] @@ -337,134 +325,134 @@ class Foo { return !b } - // x86_64-macosx: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { + // x86_64-macosx: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { // x86_64-macosx: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i8 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 %0) - // x86_64-macosx: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negate:)", align 8 - // x86_64-macosx: [[NEG:%[0-9]+]] = call signext i8 bitcast (void ()* @objc_msgSend to i8 ([[RECEIVER:.*]]*, i8*, i8)*)([[RECEIVER]]* {{%[0-9]+}}, i8* [[SEL]], i8 signext [[TOOBJCBOOL]]) + // x86_64-macosx: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negate:)", align 8 + // x86_64-macosx: [[NEG:%[0-9]+]] = call signext i8 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i8 signext [[TOOBJCBOOL]]) // x86_64-macosx: [[TOBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertObjCBoolToBool{{[_0-9a-zA-Z]*}}F"(i8 [[NEG]]) // x86_64-macosx: ret i1 [[TOBOOL]] // - // x86_64-macosx: define internal signext i8 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i8 signext %2) + // x86_64-macosx: define internal signext i8 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i8 signext %2) // x86_64-macosx: [[TOBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertObjCBoolToBool{{[_0-9a-zA-Z]*}}F" // x86_64-macosx: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 [[TOBOOL]] // x86_64-macosx: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i8 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // x86_64-macosx: ret i8 [[TOOBJCBOOL]] // - // x86_64-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // x86_64-ios: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negate:)", align 8 - // x86_64-ios: [[NEG:%[0-9]+]] = call zeroext i1 bitcast (void ()* @objc_msgSend to i1 ([[RECEIVER:.*]]*, i8*, i1)*)([[RECEIVER]]* {{%[0-9]+}}, i8* [[SEL]], i1 zeroext %0) + // x86_64-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { + // x86_64-ios: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negate:)", align 8 + // x86_64-ios: [[NEG:%[0-9]+]] = call zeroext i1 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i1 zeroext %0) // x86_64-ios: ret i1 [[NEG]] // - // x86_64-ios: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i1 zeroext %2) + // x86_64-ios: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i1 zeroext %2) // x86_64-ios: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 // x86_64-ios: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // x86_64-ios: ret i1 [[TOOBJCBOOL]] // - // armv7-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { + // armv7-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { // armv7-ios: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i8 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 %0) - // armv7-ios: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negate:)", align 4 - // armv7-ios: [[NEG:%[0-9]+]] = call signext i8 bitcast (void ()* @objc_msgSend to i8 ([[RECEIVER:.*]]*, i8*, i8)*)([[RECEIVER]]* {{%[0-9]+}}, i8* [[SEL]], i8 signext [[TOOBJCBOOL]]) + // armv7-ios: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negate:)", align 4 + // armv7-ios: [[NEG:%[0-9]+]] = call signext i8 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i8 signext [[TOOBJCBOOL]]) // armv7-ios: [[TOBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertObjCBoolToBool{{[_0-9a-zA-Z]*}}F"(i8 [[NEG]]) // armv7-ios: ret i1 [[TOBOOL]] // - // armv7-ios: define internal signext i8 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i8 signext %2) + // armv7-ios: define internal signext i8 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i8 signext %2) // armv7-ios: [[TOBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertObjCBoolToBool{{[_0-9a-zA-Z]*}}F" // armv7-ios: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 [[TOBOOL]] // armv7-ios: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i8 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // armv7-ios: ret i8 [[TOOBJCBOOL]] // - // armv7s-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { + // armv7s-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { // armv7s-ios: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i8 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 %0) - // armv7s-ios: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negate:)", align 4 - // armv7s-ios: [[NEG:%[0-9]+]] = call signext i8 bitcast (void ()* @objc_msgSend to i8 ([[RECEIVER:.*]]*, i8*, i8)*)([[RECEIVER]]* {{%[0-9]+}}, i8* [[SEL]], i8 signext [[TOOBJCBOOL]]) + // armv7s-ios: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negate:)", align 4 + // armv7s-ios: [[NEG:%[0-9]+]] = call signext i8 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i8 signext [[TOOBJCBOOL]]) // armv7s-ios: [[TOBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertObjCBoolToBool{{[_0-9a-zA-Z]*}}F"(i8 [[NEG]]) // armv7s-ios: ret i1 [[TOBOOL]] // - // armv7s-ios: define internal signext i8 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i8 signext %2) + // armv7s-ios: define internal signext i8 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i8 signext %2) // armv7s-ios: [[TOBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertObjCBoolToBool{{[_0-9a-zA-Z]*}}F" // armv7s-ios: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 [[TOBOOL]] // armv7s-ios: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i8 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // armv7s-ios: ret i8 [[TOOBJCBOOL]] // - // arm64-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // arm64-ios: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negate:)", align 8 - // arm64-ios: [[NEG:%[0-9]+]] = call zeroext i1 bitcast (void ()* @objc_msgSend to i1 ([[RECEIVER:.*]]*, i8*, i1)*)([[RECEIVER]]* {{%[0-9]+}}, i8* [[SEL]], i1 zeroext %0) + // arm64-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { + // arm64-ios: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negate:)", align 8 + // arm64-ios: [[NEG:%[0-9]+]] = call zeroext i1 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i1 zeroext %0) // arm64-ios: ret i1 [[NEG]] // - // arm64-ios: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i1 zeroext %2) + // arm64-ios: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i1 zeroext %2) // arm64-ios: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 // arm64-ios: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // arm64-ios: ret i1 [[TOOBJCBOOL]] // - // arm64e-ios: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i1 zeroext %2) + // arm64e-ios: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i1 zeroext %2) // arm64e-ios: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 // arm64e-ios: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // arm64e-ios: ret i1 [[TOOBJCBOOL]] // - // i386-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { + // i386-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { // i386-ios: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i8 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 %0) - // i386-ios: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negate:)", align 4 - // i386-ios: [[NEG:%[0-9]+]] = call signext i8 bitcast (void ()* @objc_msgSend to i8 ([[RECEIVER:.*]]*, i8*, i8)*)([[RECEIVER]]* {{%[0-9]+}}, i8* [[SEL]], i8 signext [[TOOBJCBOOL]]) + // i386-ios: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negate:)", align 4 + // i386-ios: [[NEG:%[0-9]+]] = call signext i8 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i8 signext [[TOOBJCBOOL]]) // i386-ios: [[TOBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertObjCBoolToBool{{[_0-9a-zA-Z]*}}F"(i8 [[NEG]]) // i386-ios: ret i1 [[TOBOOL]] // - // i386-ios: define internal signext i8 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i8 signext %2) + // i386-ios: define internal signext i8 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i8 signext %2) // i386-ios: [[TOBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertObjCBoolToBool{{[_0-9a-zA-Z]*}}F" // i386-ios: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 [[TOBOOL]] // i386-ios: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i8 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // i386-ios: ret i8 [[TOOBJCBOOL]] // - // x86_64-tvos: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // x86_64-tvos: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negate:)", align 8 - // x86_64-tvos: [[NEG:%[0-9]+]] = call zeroext i1 bitcast (void ()* @objc_msgSend to i1 ([[RECEIVER:.*]]*, i8*, i1)*)([[RECEIVER]]* {{%[0-9]+}}, i8* [[SEL]], i1 zeroext %0) + // x86_64-tvos: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { + // x86_64-tvos: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negate:)", align 8 + // x86_64-tvos: [[NEG:%[0-9]+]] = call zeroext i1 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i1 zeroext %0) // x86_64-tvos: ret i1 [[NEG]] // - // x86_64-tvos: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i1 zeroext %2) + // x86_64-tvos: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i1 zeroext %2) // x86_64-tvos: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 // x86_64-tvos: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // x86_64-tvos: ret i1 [[TOOBJCBOOL]] // - // arm64-tvos: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // arm64-tvos: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negate:)", align 8 - // arm64-tvos: [[NEG:%[0-9]+]] = call zeroext i1 bitcast (void ()* @objc_msgSend to i1 ([[RECEIVER:.*]]*, i8*, i1)*)([[RECEIVER]]* {{%[0-9]+}}, i8* [[SEL]], i1 zeroext %0) + // arm64-tvos: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { + // arm64-tvos: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negate:)", align 8 + // arm64-tvos: [[NEG:%[0-9]+]] = call zeroext i1 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i1 zeroext %0) // arm64-tvos: ret i1 [[NEG]] // - // arm64-tvos: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i1 zeroext %2) + // arm64-tvos: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i1 zeroext %2) // arm64-tvos: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 // arm64-tvos: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // arm64-tvos: ret i1 [[TOOBJCBOOL]] - // i386-watchos: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // i386-watchos: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negate:)", align 4 - // i386-watchos: [[NEG:%[0-9]+]] = call zeroext i1 bitcast (void ()* @objc_msgSend to i1 ([[RECEIVER:.*]]*, i8*, i1)*)([[RECEIVER]]* {{%[0-9]+}}, i8* [[SEL]], i1 zeroext %0) + // i386-watchos: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { + // i386-watchos: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negate:)", align 4 + // i386-watchos: [[NEG:%[0-9]+]] = call zeroext i1 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i1 zeroext %0) // i386-watchos: ret i1 [[NEG]] // - // i386-watchos: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i1 zeroext %2) + // i386-watchos: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i1 zeroext %2) // i386-watchos: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 // i386-watchos: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // i386-watchos: ret i1 [[TOOBJCBOOL]] // - // armv7k-watchos: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // armv7k-watchos: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negate:)", align 4 - // armv7k-watchos: [[NEG:%[0-9]+]] = call zeroext i1 bitcast (void ()* @objc_msgSend to i1 ([[RECEIVER:.*]]*, i8*, i1)*)([[RECEIVER]]* {{%[0-9]+}}, i8* [[SEL]], i1 zeroext %0) + // armv7k-watchos: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { + // armv7k-watchos: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negate:)", align 4 + // armv7k-watchos: [[NEG:%[0-9]+]] = call zeroext i1 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i1 zeroext %0) // armv7k-watchos: ret i1 [[NEG]] // - // armv7k-watchos: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i1 zeroext %2) + // armv7k-watchos: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i1 zeroext %2) // armv7k-watchos: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 // armv7k-watchos: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // armv7k-watchos: ret i1 [[TOOBJCBOOL]] // - // arm64-watchos: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // arm64-watchos: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negate:)", align 8 - // arm64-watchos: [[NEG:%[0-9]+]] = call zeroext i1 bitcast (void ()* @objc_msgSend to i1 ([[RECEIVER:.*]]*, i8*, i1)*)([[RECEIVER]]* {{%[0-9]+}}, i8* [[SEL]], i1 zeroext %0) + // arm64-watchos: define hidden swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 %0, ptr swiftself %1) {{.*}} { + // arm64-watchos: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negate:)", align 8 + // arm64-watchos: [[NEG:%[0-9]+]] = call zeroext i1 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i1 zeroext %0) // arm64-watchos: ret i1 [[NEG]] // - // arm64-watchos: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i1 zeroext %2) + // arm64-watchos: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i1 zeroext %2) // arm64-watchos: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 // arm64-watchos: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // arm64-watchos: ret i1 [[TOOBJCBOOL]] // - // arm64-macosx: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i1 zeroext %2) + // arm64-macosx: define internal zeroext i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i1 zeroext %2) // arm64-macosx: [[NEG:%[0-9]+]] = call swiftcc i1 @"$s8abitypes3FooC7negate2{{[_0-9a-zA-Z]*}}F"(i1 // arm64-macosx: [[TOOBJCBOOL:%[0-9]+]] = call swiftcc i1 @"$s10ObjectiveC22_convertBoolToObjCBool{{[_0-9a-zA-Z]*}}F"(i1 [[NEG]]) // arm64-macosx: ret i1 [[TOOBJCBOOL]] @@ -473,21 +461,21 @@ class Foo { return g.negate(b) } - // x86_64-macosx: define hidden swiftcc i1 @"$s8abitypes3FooC7negate3yS2bF"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // x86_64-macosx: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(invert:)", align 8 - // x86_64-macosx: [[NEG:%[0-9]+]] = call zeroext i1 bitcast (void ()* @objc_msgSend to i1 (%1*, i8*, i1)*)(%1* [[RECEIVER:%[0-9]+]], i8* [[SEL]], i1 zeroext %0) + // x86_64-macosx: define hidden swiftcc i1 @"$s8abitypes3FooC7negate3yS2bF"(i1 %0, ptr swiftself %1) {{.*}} { + // x86_64-macosx: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(invert:)", align 8 + // x86_64-macosx: [[NEG:%[0-9]+]] = call zeroext i1 @objc_msgSend(ptr [[RECEIVER:%[0-9]+]], ptr [[SEL]], i1 zeroext %0) // x86_64-macosx: ret i1 [[NEG]] // x86_64-macosx: } - // x86_64-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate3yS2bF"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // x86_64-ios: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(invert:)", align 8 - // x86_64-ios: [[NEG:%[0-9]+]] = call zeroext i1 bitcast (void ()* @objc_msgSend to i1 (%1*, i8*, i1)*)(%1* [[RECEIVER:%[0-9]+]], i8* [[SEL]], i1 zeroext %0) + // x86_64-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate3yS2bF"(i1 %0, ptr swiftself %1) {{.*}} { + // x86_64-ios: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(invert:)", align 8 + // x86_64-ios: [[NEG:%[0-9]+]] = call zeroext i1 @objc_msgSend(ptr [[RECEIVER:%[0-9]+]], ptr [[SEL]], i1 zeroext %0) // x86_64-ios: ret i1 [[NEG]] // x86_64-ios: } - // i386-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate3yS2bF"(i1 %0, %T8abitypes3FooC* swiftself %1) {{.*}} { - // i386-ios: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(invert:)", align 4 - // i386-ios: [[NEG:%[0-9]+]] = call zeroext i1 bitcast (void ()* @objc_msgSend to i1 (%1*, i8*, i1)*)(%1* [[RECEIVER:%[0-9]+]], i8* [[SEL]], i1 zeroext %0) + // i386-ios: define hidden swiftcc i1 @"$s8abitypes3FooC7negate3yS2bF"(i1 %0, ptr swiftself %1) {{.*}} { + // i386-ios: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(invert:)", align 4 + // i386-ios: [[NEG:%[0-9]+]] = call zeroext i1 @objc_msgSend(ptr [[RECEIVER:%[0-9]+]], ptr [[SEL]], i1 zeroext %0) // i386-ios: ret i1 [[NEG]] // i386-ios: } @@ -496,36 +484,36 @@ class Foo { return g.invert(b) } - // x86_64-macosx: define hidden swiftcc void @"$s8abitypes3FooC10throwsTestyySbKF"(i1 %0, %T8abitypes3FooC* swiftself %1, %swift.error** noalias nocapture swifterror dereferenceable(8) %2) {{.*}} { - // x86_64-macosx: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negateThrowing:error:)", align 8 - // x86_64-macosx: call signext i8 bitcast (void ()* @objc_msgSend to i8 (%1*, i8*, i8, %2**)*)(%1* {{%[0-9]+}}, i8* [[SEL]], i8 signext {{%[0-9]+}}, %2** {{%[0-9]+}}) + // x86_64-macosx: define hidden swiftcc void @"$s8abitypes3FooC10throwsTestyySbKF"(i1 %0, ptr swiftself %1, ptr noalias nocapture swifterror dereferenceable(8) %2) {{.*}} { + // x86_64-macosx: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negateThrowing:error:)", align 8 + // x86_64-macosx: call signext i8 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i8 signext {{%[0-9]+}}, ptr {{%[0-9]+}}) // x86_64-macosx: } - // x86_64-ios: define hidden swiftcc void @"$s8abitypes3FooC10throwsTestyySbKF"(i1 %0, %T8abitypes3FooC* swiftself %1, %swift.error** noalias nocapture swifterror dereferenceable(8) %2) {{.*}} { - // x86_64-ios: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negateThrowing:error:)", align 8 - // x86_64-ios: call zeroext i1 bitcast (void ()* @objc_msgSend to i1 (%1*, i8*, i1, %2**)*)(%1* {{%[0-9]+}}, i8* [[SEL]], i1 zeroext {{%[0-9]+}}, %2** {{%[0-9]+}}) + // x86_64-ios: define hidden swiftcc void @"$s8abitypes3FooC10throwsTestyySbKF"(i1 %0, ptr swiftself %1, ptr noalias nocapture swifterror dereferenceable(8) %2) {{.*}} { + // x86_64-ios: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negateThrowing:error:)", align 8 + // x86_64-ios: call zeroext i1 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i1 zeroext {{%[0-9]+}}, ptr {{%[0-9]+}}) // x86_64-ios: } - // i386-ios: define hidden swiftcc void @"$s8abitypes3FooC10throwsTestyySbKF"(i1 %0, %T8abitypes3FooC* swiftself %1, %swift.error** noalias nocapture dereferenceable(4) %2) {{.*}} { - // i386-ios: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(negateThrowing:error:)", align 4 - // i386-ios: call signext i8 bitcast (void ()* @objc_msgSend to i8 (%1*, i8*, i8, %2**)*)(%1* {{%[0-9]+}}, i8* [[SEL]], i8 signext {{%[0-9]+}}, %2** {{%[0-9]+}}) + // i386-ios: define hidden swiftcc void @"$s8abitypes3FooC10throwsTestyySbKF"(i1 %0, ptr swiftself %1, ptr noalias nocapture dereferenceable(4) %2) {{.*}} { + // i386-ios: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(negateThrowing:error:)", align 4 + // i386-ios: call signext i8 @objc_msgSend(ptr {{%[0-9]+}}, ptr [[SEL]], i8 signext {{%[0-9]+}}, ptr {{%[0-9]+}}) // i386-ios: } @objc dynamic func throwsTest(_ b: Bool) throws { var g = Gadget() try g.negateThrowing(b) } - // x86_64-macosx: define internal i32* @"$s8abitypes3FooC24copyUnsafeMutablePointer{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i32* %2) {{[#0-9]*}} { + // x86_64-macosx: define internal ptr @"$s8abitypes3FooC24copyUnsafeMutablePointer{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} { @objc dynamic func copyUnsafeMutablePointer(_ p: UnsafeMutablePointer) -> UnsafeMutablePointer { return p } - // x86_64-macosx: define internal i64 @"$s8abitypes3FooC17returnNSEnumValue{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1) {{[#0-9]*}} { + // x86_64-macosx: define internal i64 @"$s8abitypes3FooC17returnNSEnumValue{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1) {{[#0-9]*}} { @objc dynamic func returnNSEnumValue() -> ByteCountFormatter.CountStyle { return .file } - // x86_64-macosx: define internal zeroext i16 @"$s8abitypes3FooC20returnOtherEnumValue{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i16 zeroext %2) {{[#0-9]*}} { + // x86_64-macosx: define internal zeroext i16 @"$s8abitypes3FooC20returnOtherEnumValue{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, i16 zeroext %2) {{[#0-9]*}} { @objc dynamic func returnOtherEnumValue(_ choice: ChooseTo) -> ChooseTo { switch choice { case .takeIt: return .leaveIt @@ -533,8 +521,8 @@ class Foo { } } - // x86_64-macosx: define hidden swiftcc i32 @"$s8abitypes3FooC10getRawEnum{{[_0-9a-zA-Z]*}}F"(%T8abitypes3FooC* swiftself %0) {{.*}} { - // x86_64-macosx: define internal i32 @"$s8abitypes3FooC10getRawEnum{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1) {{[#0-9]*}} { + // x86_64-macosx: define hidden swiftcc i32 @"$s8abitypes3FooC10getRawEnum{{[_0-9a-zA-Z]*}}F"(ptr swiftself %0) {{.*}} { + // x86_64-macosx: define internal i32 @"$s8abitypes3FooC10getRawEnum{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1) {{[#0-9]*}} { @objc dynamic func getRawEnum() -> RawEnum { return Intergalactic } @@ -544,11 +532,10 @@ class Foo { self.work = work } - // x86_64-macosx: define internal void @"$s8abitypes3FooC13testArchetype{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i8* %2) {{[#0-9]*}} { + // x86_64-macosx: define internal void @"$s8abitypes3FooC13testArchetype{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} { @objc dynamic func testArchetype(_ work: Work) { work.doStuff(1) - // x86_64-macosx: [[OBJCPTR:%.*]] = bitcast i8* %2 to %objc_object* - // x86_64-macosx: call swiftcc void @"$s8abitypes3FooC13testArchetype{{[_0-9a-zA-Z]*}}F"(%objc_object* [[OBJCPTR]], %T8abitypes3FooC* swiftself %{{.*}}) + // x86_64-macosx: call swiftcc void @"$s8abitypes3FooC13testArchetype{{[_0-9a-zA-Z]*}}F"(ptr %2, ptr swiftself %{{.*}}) } @objc dynamic func foo(_ x: @convention(block) (Int) -> Int) -> Int { @@ -557,26 +544,25 @@ class Foo { return 1 } - // x86_64-macosx: define hidden swiftcc void @"$s8abitypes3FooC20testGenericTypeParam{{[_0-9a-zA-Z]*}}F"(%objc_object* %0, %swift.type* %T, %T8abitypes3FooC* swiftself %1) {{.*}} { + // x86_64-macosx: define hidden swiftcc void @"$s8abitypes3FooC20testGenericTypeParam{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr %T, ptr swiftself %1) {{.*}} { func testGenericTypeParam(_ x: T) { - // x86_64-macosx: [[CAST:%.*]] = bitcast %objc_object* %0 to i8* - // x86_64-macosx: call void bitcast (void ()* @objc_msgSend to void (i8*, i8*)*)(i8* [[CAST]], i8* %{{.*}}) + // x86_64-macosx: call void @objc_msgSend(ptr %0, ptr %{{.*}}) x.alDente() } - // arm64-ios: define hidden swiftcc { i64, i64, i64, i64 } @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, i64 %1, i64 %2, i64 %3, i64 %4, %T8abitypes3FooC* swiftself %5) {{.*}} { - // arm64-ios: define internal void @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}FTo"(%TSo9BigStructV* noalias nocapture sret({{.*}}) %0, i8* %1, i8* %2, [[OPAQUE:.*]]* %3, %TSo9BigStructV* %4) {{[#0-9]*}} { + // arm64-ios: define hidden swiftcc { i64, i64, i64, i64 } @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}F"(ptr %0, i64 %1, i64 %2, i64 %3, i64 %4, ptr swiftself %5) {{.*}} { + // arm64-ios: define internal void @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}FTo"(ptr noalias nocapture sret({{.*}}) %0, ptr %1, ptr %2, ptr %3, ptr %4) {{[#0-9]*}} { // - // arm64e-ios: define hidden swiftcc { i64, i64, i64, i64 } @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, i64 %1, i64 %2, i64 %3, i64 %4, %T8abitypes3FooC* swiftself %5) {{.*}} { - // arm64e-ios: define internal void @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}FTo"(%TSo9BigStructV* noalias nocapture sret({{.*}}) %0, i8* %1, i8* %2, [[OPAQUE:.*]]* %3, %TSo9BigStructV* %4) {{.*}} { + // arm64e-ios: define hidden swiftcc { i64, i64, i64, i64 } @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}F"(ptr %0, i64 %1, i64 %2, i64 %3, i64 %4, ptr swiftself %5) {{.*}} { + // arm64e-ios: define internal void @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}FTo"(ptr noalias nocapture sret({{.*}}) %0, ptr %1, ptr %2, ptr %3, ptr %4) {{.*}} { // - // arm64-tvos: define hidden swiftcc { i64, i64, i64, i64 } @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, i64 %1, i64 %2, i64 %3, i64 %4, %T8abitypes3FooC* swiftself %5) {{.*}} { - // arm64-tvos: define internal void @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}FTo"(%TSo9BigStructV* noalias nocapture sret({{.*}}) %0, i8* %1, i8* %2, [[OPAQUE:.*]]* %3, %TSo9BigStructV* %4) {{[#0-9]*}} { - // arm64-macosx: define hidden swiftcc { i64, i64, i64, i64 } @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, i64 %1, i64 %2, i64 %3, i64 %4, %T8abitypes3FooC* swiftself %5) {{.*}} { - // arm64-macosx: define internal void @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}FTo"(%TSo9BigStructV* noalias nocapture sret({{.*}}) %0, i8* %1, i8* %2, [[OPAQUE:.*]]* %3, %TSo9BigStructV* %4) {{.*}} { + // arm64-tvos: define hidden swiftcc { i64, i64, i64, i64 } @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}F"(ptr %0, i64 %1, i64 %2, i64 %3, i64 %4, ptr swiftself %5) {{.*}} { + // arm64-tvos: define internal void @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}FTo"(ptr noalias nocapture sret({{.*}}) %0, ptr %1, ptr %2, ptr %3, ptr %4) {{[#0-9]*}} { + // arm64-macosx: define hidden swiftcc { i64, i64, i64, i64 } @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}F"(ptr %0, i64 %1, i64 %2, i64 %3, i64 %4, ptr swiftself %5) {{.*}} { + // arm64-macosx: define internal void @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}FTo"(ptr noalias nocapture sret({{.*}}) %0, ptr %1, ptr %2, ptr %3, ptr %4) {{.*}} { // - // arm64-watchos: define hidden swiftcc { i64, i64, i64, i64 } @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}F"(%TSo13StructReturnsC* %0, i64 %1, i64 %2, i64 %3, i64 %4, %T8abitypes3FooC* swiftself %5) {{.*}} { - // arm64-watchos: define internal void @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}FTo"(%TSo9BigStructV* noalias nocapture sret({{.*}}) %0, i8* %1, i8* %2, [[OPAQUE:.*]]* %3, %TSo9BigStructV* %4) {{[#0-9]*}} { + // arm64-watchos: define hidden swiftcc { i64, i64, i64, i64 } @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}F"(ptr %0, i64 %1, i64 %2, i64 %3, i64 %4, ptr swiftself %5) {{.*}} { + // arm64-watchos: define internal void @"$s8abitypes3FooC14callJustReturn{{[_0-9a-zA-Z]*}}FTo"(ptr noalias nocapture sret({{.*}}) %0, ptr %1, ptr %2, ptr %3, ptr %4) {{[#0-9]*}} { @objc dynamic func callJustReturn(_ r: StructReturns, with v: BigStruct) -> BigStruct { return r.justReturn(v) } @@ -588,8 +574,8 @@ class Foo { } } -// armv7-ios: define internal void @makeOne(%struct.One* noalias sret({{.*}}) align 4 %agg.result, float %f, float %s) -// armv7s-ios: define internal void @makeOne(%struct.One* noalias sret({{.*}}) align 4 %agg.result, float %f, float %s) +// armv7-ios: define internal void @makeOne(ptr noalias sret({{.*}}) align 4 %agg.result, float %f, float %s) +// armv7s-ios: define internal void @makeOne(ptr noalias sret({{.*}}) align 4 %agg.result, float %f, float %s) // armv7k-watchos: define internal %struct.One @makeOne(float {{.*}}%f, float {{.*}}%s) // rdar://17631440 - Expand direct arguments that are coerced to aggregates. @@ -599,11 +585,10 @@ class Foo { // x86_64-macosx: store float %1, // x86_64-macosx: store float %2, // x86_64-macosx: store float %3, -// x86_64-macosx: [[CAST:%.*]] = bitcast %TSo6MyRectV* [[COERCED]] to { <2 x float>, <2 x float> }* -// x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { <2 x float>, <2 x float> }, { <2 x float>, <2 x float> }* [[CAST]], i32 0, i32 0 -// x86_64-macosx: [[FIRST_HALF:%.*]] = load <2 x float>, <2 x float>* [[T0]], align 8 -// x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { <2 x float>, <2 x float> }, { <2 x float>, <2 x float> }* [[CAST]], i32 0, i32 1 -// x86_64-macosx: [[SECOND_HALF:%.*]] = load <2 x float>, <2 x float>* [[T0]], align 8 +// x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { <2 x float>, <2 x float> }, ptr [[COERCED]], i32 0, i32 0 +// x86_64-macosx: [[FIRST_HALF:%.*]] = load <2 x float>, ptr [[T0]], align 8 +// x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { <2 x float>, <2 x float> }, ptr [[COERCED]], i32 0, i32 1 +// x86_64-macosx: [[SECOND_HALF:%.*]] = load <2 x float>, ptr [[T0]], align 8 // x86_64-macosx: [[RESULT:%.*]] = call float @MyRect_Area(<2 x float> [[FIRST_HALF]], <2 x float> [[SECOND_HALF]]) // x86_64-macosx: ret float [[RESULT]] public func testInlineAgg(_ rect: MyRect) -> Float { @@ -613,46 +598,38 @@ public func testInlineAgg(_ rect: MyRect) -> Float { // We need to allocate enough memory on the stack to hold the argument value we load. // arm64-ios: define swiftcc void @"$s8abitypes14testBOOLStructyyF"() // arm64-ios: [[COERCED:%.*]] = alloca i64 -// arm64-ios: [[STRUCTPTR:%.*]] = bitcast i64* [[COERCED]] to %TSo14FiveByteStructV -// arm64-ios: [[PTR0:%.*]] = getelementptr inbounds %TSo14FiveByteStructV, %TSo14FiveByteStructV* [[STRUCTPTR]], {{i.*}} 0, {{i.*}} 0 -// arm64-ios: [[PTR1:%.*]] = getelementptr inbounds %T10ObjectiveC8ObjCBoolV, %T10ObjectiveC8ObjCBoolV* [[PTR0]], {{i.*}} 0, {{i.*}} 0 -// arm64-ios: [[PTR2:%.*]] = getelementptr inbounds %TSb, %TSb* [[PTR1]], {{i.*}} 0, {{i.*}} 0 -// arm64-ios: [[BYTE_ADDR:%.*]] = bitcast i1* [[PTR2]] to i8* -// arm64-ios: store i8 0, i8* [[BYTE_ADDR]], align 8 -// arm64-ios: [[ARG:%.*]] = load i64, i64* [[COERCED]] -// arm64-ios: call void bitcast (void ()* @objc_msgSend to void (i8*, i8*, i64)*)(i8* {{.*}}, i8* {{.*}}, i64 [[ARG]]) +// arm64-ios: [[PTR0:%.*]] = getelementptr inbounds %TSo14FiveByteStructV, ptr [[COERCED]], {{i.*}} 0, {{i.*}} 0 +// arm64-ios: [[PTR1:%.*]] = getelementptr inbounds %T10ObjectiveC8ObjCBoolV, ptr [[PTR0]], {{i.*}} 0, {{i.*}} 0 +// arm64-ios: [[PTR2:%.*]] = getelementptr inbounds %TSb, ptr [[PTR1]], {{i.*}} 0, {{i.*}} 0 +// arm64-ios: store i8 0, ptr [[PTR2]], align 8 +// arm64-ios: [[ARG:%.*]] = load i64, ptr [[COERCED]] +// arm64-ios: call void @objc_msgSend(ptr {{.*}}, ptr {{.*}}, i64 [[ARG]]) // // arm64e-ios: define swiftcc void @"$s8abitypes14testBOOLStructyyF"() // arm64e-ios: [[COERCED:%.*]] = alloca i64 -// arm64e-ios: [[STRUCTPTR:%.*]] = bitcast i64* [[COERCED]] to %TSo14FiveByteStructV -// arm64e-ios: [[PTR0:%.*]] = getelementptr inbounds %TSo14FiveByteStructV, %TSo14FiveByteStructV* [[STRUCTPTR]], {{i.*}} 0, {{i.*}} 0 -// arm64e-ios: [[PTR1:%.*]] = getelementptr inbounds %T10ObjectiveC8ObjCBoolV, %T10ObjectiveC8ObjCBoolV* [[PTR0]], {{i.*}} 0, {{i.*}} 0 -// arm64e-ios: [[PTR2:%.*]] = getelementptr inbounds %TSb, %TSb* [[PTR1]], {{i.*}} 0, {{i.*}} 0 -// arm64e-ios: [[BYTE_ADDR:%.*]] = bitcast i1* [[PTR2]] to i8* -// arm64e-ios: store i8 0, i8* [[BYTE_ADDR]], align 8 -// arm64e-ios: [[ARG:%.*]] = load i64, i64* [[COERCED]] -// arm64e-ios: call void bitcast (void ()* @objc_msgSend to void (i8*, i8*, i64)*)(i8* {{.*}}, i8* {{.*}}, i64 [[ARG]]) +// arm64e-ios: [[PTR0:%.*]] = getelementptr inbounds %TSo14FiveByteStructV, ptr [[COERCED]], {{i.*}} 0, {{i.*}} 0 +// arm64e-ios: [[PTR1:%.*]] = getelementptr inbounds %T10ObjectiveC8ObjCBoolV, ptr [[PTR0]], {{i.*}} 0, {{i.*}} 0 +// arm64e-ios: [[PTR2:%.*]] = getelementptr inbounds %TSb, ptr [[PTR1]], {{i.*}} 0, {{i.*}} 0 +// arm64e-ios: store i8 0, ptr [[PTR2]], align 8 +// arm64e-ios: [[ARG:%.*]] = load i64, ptr [[COERCED]] +// arm64e-ios: call void @objc_msgSend(ptr {{.*}}, ptr {{.*}}, i64 [[ARG]]) // arm64-macosx: define swiftcc void @"$s8abitypes14testBOOLStructyyF"() // arm64-macosx: [[COERCED:%.*]] = alloca i64 -// arm64-macosx: [[STRUCTPTR:%.*]] = bitcast i64* [[COERCED]] to %TSo14FiveByteStructV -// arm64-macosx: [[PTR0:%.*]] = getelementptr inbounds %TSo14FiveByteStructV, %TSo14FiveByteStructV* [[STRUCTPTR]], {{i.*}} 0, {{i.*}} 0 -// arm64-macosx: [[PTR1:%.*]] = getelementptr inbounds %T10ObjectiveC8ObjCBoolV, %T10ObjectiveC8ObjCBoolV* [[PTR0]], {{i.*}} 0, {{i.*}} 0 -// arm64-macosx: [[PTR2:%.*]] = getelementptr inbounds %TSb, %TSb* [[PTR1]], {{i.*}} 0, {{i.*}} 0 -// arm64-macosx: [[BYTE_ADDR:%.*]] = bitcast i1* [[PTR2]] to i8* -// arm64-macosx: store i8 0, i8* [[BYTE_ADDR]], align 8 -// arm64-macosx: [[ARG:%.*]] = load i64, i64* [[COERCED]] -// arm64-macosx: call void bitcast (void ()* @objc_msgSend to void (i8*, i8*, i64)*)(i8* {{.*}}, i8* {{.*}}, i64 [[ARG]]) +// arm64-macosx: [[PTR0:%.*]] = getelementptr inbounds %TSo14FiveByteStructV, ptr [[COERCED]], {{i.*}} 0, {{i.*}} 0 +// arm64-macosx: [[PTR1:%.*]] = getelementptr inbounds %T10ObjectiveC8ObjCBoolV, ptr [[PTR0]], {{i.*}} 0, {{i.*}} 0 +// arm64-macosx: [[PTR2:%.*]] = getelementptr inbounds %TSb, ptr [[PTR1]], {{i.*}} 0, {{i.*}} 0 +// arm64-macosx: store i8 0, ptr [[PTR2]], align 8 +// arm64-macosx: [[ARG:%.*]] = load i64, ptr [[COERCED]] +// arm64-macosx: call void @objc_msgSend(ptr {{.*}}, ptr {{.*}}, i64 [[ARG]]) // // arm64-watchos: define swiftcc void @"$s8abitypes14testBOOLStructyyF"() // arm64-watchos: [[COERCED:%.*]] = alloca i64 -// arm64-watchos: [[STRUCTPTR:%.*]] = bitcast i64* [[COERCED]] to %TSo14FiveByteStructV -// arm64-watchos: [[PTR0:%.*]] = getelementptr inbounds %TSo14FiveByteStructV, %TSo14FiveByteStructV* [[STRUCTPTR]], {{i.*}} 0, {{i.*}} 0 -// arm64-watchos: [[PTR1:%.*]] = getelementptr inbounds %T10ObjectiveC8ObjCBoolV, %T10ObjectiveC8ObjCBoolV* [[PTR0]], {{i.*}} 0, {{i.*}} 0 -// arm64-watchos: [[PTR2:%.*]] = getelementptr inbounds %TSb, %TSb* [[PTR1]], {{i.*}} 0, {{i.*}} 0 -// arm64-watchos: [[BYTE_ADDR:%.*]] = bitcast i1* [[PTR2]] to i8* -// arm64-watchos: store i8 0, i8* [[BYTE_ADDR]], align 8 -// arm64-watchos: [[ARG:%.*]] = load i64, i64* [[COERCED]] -// arm64-watchos: call void bitcast (void ()* @objc_msgSend to void (i8*, i8*, i64)*)(i8* {{.*}}, i8* {{.*}}, i64 [[ARG]]) +// arm64-watchos: [[PTR0:%.*]] = getelementptr inbounds %TSo14FiveByteStructV, ptr [[COERCED]], {{i.*}} 0, {{i.*}} 0 +// arm64-watchos: [[PTR1:%.*]] = getelementptr inbounds %T10ObjectiveC8ObjCBoolV, ptr [[PTR0]], {{i.*}} 0, {{i.*}} 0 +// arm64-watchos: [[PTR2:%.*]] = getelementptr inbounds %TSb, ptr [[PTR1]], {{i.*}} 0, {{i.*}} 0 +// arm64-watchos: store i8 0, ptr [[PTR2]], align 8 +// arm64-watchos: [[ARG:%.*]] = load i64, ptr [[COERCED]] +// arm64-watchos: call void @objc_msgSend(ptr {{.*}}, ptr {{.*}}, i64 [[ARG]]) public func testBOOLStruct() { let s = FiveByteStruct() MyClass.mymethod(s) diff --git a/test/IRGen/access_markers.sil b/test/IRGen/access_markers.sil index 86a4d3d5a750c..16983fd4eff67 100644 --- a/test/IRGen/access_markers.sil +++ b/test/IRGen/access_markers.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -swift-version 4 -enforce-exclusivity=checked %s -emit-ir | %FileCheck %s --check-prefix=CHECK -// RUN: %target-swift-frontend -swift-version 4 -enforce-exclusivity=checked %s -emit-ir +// RUN: %target-swift-frontend -swift-version 4 -enforce-exclusivity=checked %s -emit-ir | %FileCheck %s --check-prefix=CHECK sil_stage canonical @@ -27,37 +26,31 @@ bb0(%0 : @guaranteed $A): // CHECK: [[SCRATCH1:%.*]] = alloca [[BUFFER:.* x i8.]], align // CHECK: [[SCRATCH2:%.*]] = alloca [[BUFFER]], align - // CHECK: [[PROPERTY:%.*]] = getelementptr inbounds [[C]], [[C]]* %0, i32 0, i32 1 + // CHECK: [[PROPERTY:%.*]] = getelementptr inbounds [[C]], ptr %0, i32 0, i32 1 %2 = ref_element_addr %0 : $A, #A.property - // CHECK-NEXT: [[T0:%.*]] = bitcast [[BUFFER]]* [[SCRATCH1]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 {{.*}}, i8* [[T0]]) - // CHECK-NEXT: [[T1:%.*]] = bitcast [[INT]]* [[PROPERTY]] to i8* - // CHECK-NEXT: call void @swift_beginAccess(i8* [[T1]], [[BUFFER]]* [[SCRATCH1]], [[SIZE:i(32|64)]] 33, i8* null) + // CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 {{.*}}, ptr [[SCRATCH1]]) + // CHECK-NEXT: call void @swift_beginAccess(ptr [[PROPERTY]], ptr [[SCRATCH1]], [[SIZE:i(32|64)]] 33, ptr null) %3 = begin_access [modify] [dynamic] %2 : $*Int64 - // CHECK-NEXT: getelementptr inbounds %Ts5Int64V, %Ts5Int64V* [[PROPERTY]], i32 0, i32 0 - // CHECK-NEXT: load i64, i64* + // CHECK-NEXT: getelementptr inbounds %Ts5Int64V, ptr [[PROPERTY]], i32 0, i32 0 + // CHECK-NEXT: load i64, ptr %4 = load [trivial] %3 : $*Int64 - // CHECK-NEXT: call void @swift_endAccess([[BUFFER]]* [[SCRATCH1]]) - // CHECK-NEXT: [[T0:%.*]] = bitcast [[BUFFER]]* [[SCRATCH1]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end.p0i8(i64 {{.*}}, i8* [[T0]]) + // CHECK-NEXT: call void @swift_endAccess(ptr [[SCRATCH1]]) + // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 {{.*}}, ptr [[SCRATCH1]]) end_access %3 : $*Int64 - // CHECK-NEXT: [[T0:%.*]] = bitcast [[BUFFER]]* [[SCRATCH2]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 {{.*}}, i8* [[T0]]) - // CHECK-NEXT: [[T1:%.*]] = bitcast [[INT]]* [[PROPERTY]] to i8* - // CHECK-NEXT: call void @swift_beginAccess(i8* [[T1]], [[BUFFER]]* [[SCRATCH2]], [[SIZE]] 32, i8* null) + // CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 {{.*}}, ptr [[SCRATCH2]]) + // CHECK-NEXT: call void @swift_beginAccess(ptr [[PROPERTY]], ptr [[SCRATCH2]], [[SIZE]] 32, ptr null) %6 = begin_access [read] [dynamic] %2 : $*Int64 - // CHECK-NEXT: getelementptr inbounds %Ts5Int64V, %Ts5Int64V* [[PROPERTY]], i32 0, i32 0 - // CHECK-NEXT: load i64, i64* + // CHECK-NEXT: getelementptr inbounds %Ts5Int64V, ptr [[PROPERTY]], i32 0, i32 0 + // CHECK-NEXT: load i64, ptr %7 = load [trivial] %6 : $*Int64 - // CHECK-NEXT: call void @swift_endAccess([[BUFFER]]* [[SCRATCH2]]) - // CHECK-NEXT: [[T0:%.*]] = bitcast [[BUFFER]]* [[SCRATCH2]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.end.p0i8(i64 {{.*}}, i8* [[T0]]) + // CHECK-NEXT: call void @swift_endAccess(ptr [[SCRATCH2]]) + // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 {{.*}}, ptr [[SCRATCH2]]) end_access %6 : $*Int64 apply %func(%4, %7) : $@convention(thin) (Int64, Int64) -> () @@ -72,21 +65,19 @@ bb0(%0 : $A): // CHECK: [[SCRATCH:%.*]] = alloca [[BUFFER:.* x i8.]], align %1 = alloc_stack $Builtin.UnsafeValueBuffer - // CHECK: [[PROPERTY:%.*]] = getelementptr inbounds [[C]], [[C]]* %0, i32 0, i32 1 + // CHECK: [[PROPERTY:%.*]] = getelementptr inbounds [[C]], ptr %0, i32 0, i32 1 %2 = ref_element_addr %0 : $A, #A.property - // CHECK-NEXT: [[T1:%.*]] = bitcast [[INT]]* [[PROPERTY]] to i8* - // CHECK-NEXT: call void @swift_beginAccess(i8* [[T1]], [[BUFFER]]* [[SCRATCH]], [[SIZE]] 33, i8* null) + // CHECK-NEXT: call void @swift_beginAccess(ptr [[PROPERTY]], ptr [[SCRATCH]], [[SIZE]] 33, ptr null) begin_unpaired_access [modify] [dynamic] %2 : $*Int64, %1 : $*Builtin.UnsafeValueBuffer - // CHECK-NEXT: call void @swift_endAccess([[BUFFER]]* [[SCRATCH]]) + // CHECK-NEXT: call void @swift_endAccess(ptr [[SCRATCH]]) end_unpaired_access [dynamic] %1 : $*Builtin.UnsafeValueBuffer - // CHECK-NEXT: [[T1:%.*]] = bitcast [[INT]]* [[PROPERTY]] to i8* - // CHECK-NEXT: call void @swift_beginAccess(i8* [[T1]], [[BUFFER]]* [[SCRATCH]], [[SIZE]] 32, i8* null) + // CHECK-NEXT: call void @swift_beginAccess(ptr [[PROPERTY]], ptr [[SCRATCH]], [[SIZE]] 32, ptr null) begin_unpaired_access [read] [dynamic] %2 : $*Int64, %1 : $*Builtin.UnsafeValueBuffer - // CHECK-NEXT: call void @swift_endAccess([[BUFFER]]* [[SCRATCH]]) + // CHECK-NEXT: call void @swift_endAccess(ptr [[SCRATCH]]) end_unpaired_access [dynamic] %1 : $*Builtin.UnsafeValueBuffer dealloc_stack %1 : $*Builtin.UnsafeValueBuffer @@ -98,23 +89,21 @@ bb0(%0 : $A): // CHECK-LABEL: define {{.*}}void @testUnpairedExternal( sil @testUnpairedExternal : $(@guaranteed A, @inout Builtin.UnsafeValueBuffer) -> () { bb0(%0 : $A, %1 : $*Builtin.UnsafeValueBuffer): - // CHECK: [[PROPERTY:%.*]] = getelementptr inbounds [[C]], [[C]]* %0, i32 0, i32 1 + // CHECK: [[PROPERTY:%.*]] = getelementptr inbounds [[C]], ptr %0, i32 0, i32 1 %2 = ref_element_addr %0 : $A, #A.property - // CHECK-NEXT: [[T1:%.*]] = bitcast [[INT]]* [[PROPERTY]] to i8* - // CHECK-NEXT: [[PC:%.*]] = call i8* @llvm.returnaddress(i32 0) - // CHECK-NEXT: call void @swift_beginAccess(i8* [[T1]], [[BUFFER]]* [[SCRATCH:%1]], [[SIZE]] 33, i8* [[PC]]) + // CHECK-NEXT: [[PC:%.*]] = call ptr @llvm.returnaddress(i32 0) + // CHECK-NEXT: call void @swift_beginAccess(ptr [[PROPERTY]], ptr [[SCRATCH:%1]], [[SIZE]] 33, ptr [[PC]]) begin_unpaired_access [modify] [dynamic] %2 : $*Int64, %1 : $*Builtin.UnsafeValueBuffer - // CHECK-NEXT: call void @swift_endAccess([[BUFFER]]* [[SCRATCH]]) + // CHECK-NEXT: call void @swift_endAccess(ptr [[SCRATCH]]) end_unpaired_access [dynamic] %1 : $*Builtin.UnsafeValueBuffer - // CHECK-NEXT: [[T1:%.*]] = bitcast [[INT]]* [[PROPERTY]] to i8* - // CHECK-NEXT: [[PC:%.*]] = call i8* @llvm.returnaddress(i32 0) - // CHECK-NEXT: call void @swift_beginAccess(i8* [[T1]], [[BUFFER]]* [[SCRATCH]], [[SIZE]] 32, i8* [[PC]]) + // CHECK-NEXT: [[PC:%.*]] = call ptr @llvm.returnaddress(i32 0) + // CHECK-NEXT: call void @swift_beginAccess(ptr [[PROPERTY]], ptr [[SCRATCH]], [[SIZE]] 32, ptr [[PC]]) begin_unpaired_access [read] [dynamic] %2 : $*Int64, %1 : $*Builtin.UnsafeValueBuffer - // CHECK-NEXT: call void @swift_endAccess([[BUFFER]]* [[SCRATCH]]) + // CHECK-NEXT: call void @swift_endAccess(ptr [[SCRATCH]]) end_unpaired_access [dynamic] %1 : $*Builtin.UnsafeValueBuffer %20 = tuple () @@ -130,13 +119,13 @@ sil @testPairedBox : $(@guaranteed { var () }) -> () { bb0(%0 : ${ var () }): // CHECK: entry: %2 = project_box %0 : ${ var () }, 0 - // CHECK-NEXT: call {{.*}}void @writeEmptyTuple(%swift.opaque* nocapture undef) + // CHECK-NEXT: call {{.*}}void @writeEmptyTuple(ptr nocapture undef) %3 = begin_access [modify] [dynamic] %2 : $*() %write_fn = function_ref @writeEmptyTuple : $@convention(thin) (@inout ()) -> () apply %write_fn(%3) : $@convention(thin) (@inout ()) -> () end_access %3 : $*() - // CHECK-NEXT: call {{.*}}void @readEmptyTuple(%swift.opaque* noalias nocapture undef) + // CHECK-NEXT: call {{.*}}void @readEmptyTuple(ptr noalias nocapture undef) %5 = begin_access [read] [dynamic] %2 : $*() %read_fn = function_ref @readEmptyTuple : $@convention(thin) (@in_guaranteed ()) -> () apply %read_fn(%5) : $@convention(thin) (@in_guaranteed ()) -> () @@ -166,15 +155,15 @@ bb0(%0 : $A): sil @testNontracking : $(@guaranteed A) -> () { bb0(%0 : $A): %1 = alloc_stack $Int64 - // CHECK: [[PROPERTY:%.*]] = getelementptr inbounds [[C]], [[C]]* %0, i32 0, i32 1 + // CHECK: [[PROPERTY:%.*]] = getelementptr inbounds [[C]], ptr %0, i32 0, i32 1 %2 = ref_element_addr %0 : $A, #A.property - // CHECK: call void @swift_beginAccess(i8* %{{.*}}, [[BUFFER]]* %{{.*}}, [[SIZE]] 0, i8* null) + // CHECK: call void @swift_beginAccess(ptr %{{.*}}, ptr %{{.*}}, [[SIZE]] 0, ptr null) %3 = begin_access [read] [dynamic] [no_nested_conflict] %2 : $*Int64 copy_addr %3 to [init] %1 : $*Int64 // CHECK-NOT: end_access end_access %3 : $*Int64 %9 = alloc_stack $Builtin.UnsafeValueBuffer - // CHECK: call void @swift_beginAccess(i8* %{{.*}}, [[BUFFER]]* %{{.*}}, [[SIZE]] 0, i8* null) + // CHECK: call void @swift_beginAccess(ptr %{{.*}}, ptr %{{.*}}, [[SIZE]] 0, ptr null) begin_unpaired_access [read] [dynamic] [no_nested_conflict] %2 : $*Int64, %9 : $*Builtin.UnsafeValueBuffer copy_addr %2 to %1 : $*Int64 dealloc_stack %9 : $*Builtin.UnsafeValueBuffer diff --git a/test/IRGen/access_type_metadata_by_mangled_name.swift b/test/IRGen/access_type_metadata_by_mangled_name.swift index 282d0e28866c3..1e4d51fb54fe7 100644 --- a/test/IRGen/access_type_metadata_by_mangled_name.swift +++ b/test/IRGen/access_type_metadata_by_mangled_name.swift @@ -1,7 +1,5 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -parse-stdlib %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-endian -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -disable-concrete-type-metadata-mangled-name-accessors -parse-stdlib %s | %FileCheck %s --check-prefix=DISABLED -// RUN: %target-swift-frontend -emit-ir -parse-stdlib %s -// RUN: %target-swift-frontend -emit-ir -disable-concrete-type-metadata-mangled-name-accessors -parse-stdlib %s +// RUN: %target-swift-frontend -emit-ir -parse-stdlib %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-endian +// RUN: %target-swift-frontend -emit-ir -disable-concrete-type-metadata-mangled-name-accessors -parse-stdlib %s | %FileCheck %s --check-prefix=DISABLED // DISABLED-NOT: __swift_instantiateConcreteTypeFromMangledName // DISABLED-NOT: MD" = {{.*}} global @@ -43,15 +41,15 @@ protocol Proto {} public func test() -> Builtin.AnyObject { var x: Builtin.AnyObject - // CHECK: call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s36access_type_metadata_by_mangled_name3FooCyAA3BarCyAA3ZimCyAA4ZangCGGGMD") + // CHECK: call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s36access_type_metadata_by_mangled_name3FooCyAA3BarCyAA3ZimCyAA4ZangCGGGMD") x = Foo>>() - // CHECK: call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s36access_type_metadata_by_mangled_name3FooC16NestedNonGenericCyAA4ZangC_GMD") + // CHECK: call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s36access_type_metadata_by_mangled_name3FooC16NestedNonGenericCyAA4ZangC_GMD") x = Foo.NestedNonGeneric() - // CHECK: call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s36access_type_metadata_by_mangled_name3FooC13NestedGenericCyAA4ZangC_AGGMD") + // CHECK: call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s36access_type_metadata_by_mangled_name3FooC13NestedGenericCyAA4ZangC_AGGMD") x = Foo.NestedGeneric() - // CHECK: call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s36access_type_metadata_by_mangled_name4ZangC13NestedGenericCy_ACGMD") + // CHECK: call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s36access_type_metadata_by_mangled_name4ZangC13NestedGenericCy_ACGMD") x = Zang.NestedGeneric() - // CHECK: call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s36access_type_metadata_by_mangled_name3ZimCA2A4ZangCRszlE16ExtensionGenericCyAE_AEGMD") + // CHECK: call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s36access_type_metadata_by_mangled_name3ZimCA2A4ZangCRszlE16ExtensionGenericCyAE_AEGMD") x = Zim.ExtensionGeneric() // Accessing nongeneric nominal type metadata should still go through the @@ -66,7 +64,7 @@ public func test() -> Builtin.AnyObject { // Protocols still have only existential type metadata, so it's better // to access them by mangled name. - // CHECK: call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s36access_type_metadata_by_mangled_name5Proto_pMD") + // CHECK: call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s36access_type_metadata_by_mangled_name5Proto_pMD") var y: Any.Type = Proto.self return x diff --git a/test/IRGen/actor_class.swift b/test/IRGen/actor_class.swift index a49041f9e1eaf..d9edacdcad802 100644 --- a/test/IRGen/actor_class.swift +++ b/test/IRGen/actor_class.swift @@ -1,10 +1,9 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s -swift-version 5 -disable-availability-checking | %IRGenFileCheck %s -// RUN: %target-swift-frontend -emit-ir %s -swift-version 5 -disable-availability-checking +// RUN: %target-swift-frontend -emit-ir %s -swift-version 5 -disable-availability-checking | %IRGenFileCheck %s // REQUIRES: concurrency // CHECK: %T11actor_class7MyClassC = type <{ %swift.refcounted, %swift.defaultactor, %TSi }> -// CHECK: %swift.defaultactor = type { [12 x i8*] } +// CHECK: %swift.defaultactor = type { [12 x ptr] } // CHECK-objc-LABEL: @"$s11actor_class7MyClassCMm" = global // CHECK-objc-SAME: @"OBJC_METACLASS_$__TtCs12_SwiftObject{{(.ptrauth)?}}" @@ -12,7 +11,7 @@ // CHECK: @"$s11actor_class7MyClassCMf" = internal global // CHECK-SAME: @"$s11actor_class7MyClassCfD{{(.ptrauth)?}}" // CHECK-objc-SAME: @"OBJC_CLASS_$__TtCs12_SwiftObject{{(.ptrauth)?}}" -// CHECK-nonobjc-SAME: %swift.type* null, +// CHECK-nonobjc-SAME: ptr null, // Flags: uses Swift refcounting // CHECK-SAME: i32 2, // Instance size @@ -42,15 +41,15 @@ public actor MyClass { } // CHECK-LABEL: define {{.*}}@"$s11actor_class7MyClassC1xSivg" -// CHECK: [[T0:%.*]] = getelementptr inbounds %T11actor_class7MyClassC, %T11actor_class7MyClassC* %0, i32 0, i32 2 -// CHECK: [[T1:%.*]] = getelementptr inbounds %TSi, %TSi* [[T0]], i32 0, i32 0 -// CHECK: load [[INT]], [[INT]]* [[T1]], align +// CHECK: [[T0:%.*]] = getelementptr inbounds %T11actor_class7MyClassC, ptr %0, i32 0, i32 2 +// CHECK: [[T1:%.*]] = getelementptr inbounds %TSi, ptr [[T0]], i32 0, i32 0 +// CHECK: load [[INT]], ptr [[T1]], align -// CHECK-LABEL: define {{.*}}swiftcc %T11actor_class7MyClassC* @"$s11actor_class7MyClassCACycfc" +// CHECK-LABEL: define {{.*}}swiftcc ptr @"$s11actor_class7MyClassCACycfc" // CHECK: swift_defaultActor_initialize -// CHECK-LABEL: ret %T11actor_class7MyClassC* +// CHECK-LABEL: ret ptr -// CHECK-LABEL: define {{.*}}swiftcc %swift.refcounted* @"$s11actor_class7MyClassCfd" +// CHECK-LABEL: define {{.*}}swiftcc ptr @"$s11actor_class7MyClassCfd" // CHECK: swift_defaultActor_destroy // CHECK-LABEL: ret @@ -67,7 +66,6 @@ public actor Exchanger { // CHECK-LABEL: define{{.*}} void @"$s11actor_class9ExchangerC5valuexvg"( // Note that this is one more than the field offset vector offset from // the class descriptor, since this is the second field. -// CHECK: [[T0:%.*]] = getelementptr inbounds [[INT]], [[INT]]* {{.*}}, [[INT]] [[#CLASS_METADATA_HEADER+2]] -// CHECK-NEXT: [[OFFSET:%.*]] = load [[INT]], [[INT]]* [[T0]], align -// CHECK-NEXT: [[T0:%.*]] = bitcast %T11actor_class9ExchangerC* %1 to i8* -// CHECK-NEXT: getelementptr inbounds i8, i8* [[T0]], [[INT]] [[OFFSET]] +// CHECK: [[T0:%.*]] = getelementptr inbounds [[INT]], ptr {{.*}}, [[INT]] [[#CLASS_METADATA_HEADER+2]] +// CHECK-NEXT: [[OFFSET:%.*]] = load [[INT]], ptr [[T0]], align +// CHECK-NEXT: getelementptr inbounds i8, ptr %1, [[INT]] [[OFFSET]] diff --git a/test/IRGen/actor_class_objc.swift b/test/IRGen/actor_class_objc.swift index c8a8373ad82b5..0e156c4c8ec29 100644 --- a/test/IRGen/actor_class_objc.swift +++ b/test/IRGen/actor_class_objc.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s -swift-version 5 -target %target-cpu-apple-macosx12.0 | %IRGenFileCheck %s -// RUN: %target-swift-frontend -emit-ir %s -swift-version 5 -target %target-cpu-apple-macosx12.0 +// RUN: %target-swift-frontend -emit-ir %s -swift-version 5 -target %target-cpu-apple-macosx12.0 | %IRGenFileCheck %s // REQUIRES: concurrency // REQUIRES: objc_interop // REQUIRES: OS=macosx @@ -7,11 +6,11 @@ import Foundation // CHECK: %T16actor_class_objc7MyClassC = type <{ %swift.refcounted, %swift.defaultactor, %TSi }> -// CHECK: %swift.defaultactor = type { [12 x i8*] } +// CHECK: %swift.defaultactor = type { [12 x ptr] } // CHECK-LABEL: @"OBJC_METACLASS_$__TtC16actor_class_objc7MyClass" = global // Metaclass is an instance of the root class. -// CHECK-SAME: %objc_class* {{.*}}@"OBJC_METACLASS_$_SwiftNativeNSObject{{(.ptrauth)?}}" +// CHECK-SAME: ptr {{.*}}@"OBJC_METACLASS_$_SwiftNativeNSObject{{(.ptrauth)?}}" // CHECK: @"$s16actor_class_objc7MyClassCMf" = internal global // CHECK-SAME: @"$s16actor_class_objc7MyClassCfD{{(.ptrauth)?}}" @@ -35,12 +34,12 @@ import Foundation } // CHECK-LABEL: define {{.*}} @"$s16actor_class_objc7MyClassC1xSivg" -// CHECK: [[T0:%.*]] = getelementptr inbounds %T16actor_class_objc7MyClassC, %T16actor_class_objc7MyClassC* %0, i32 0, i32 2 -// CHECK: [[T1:%.*]] = getelementptr inbounds %TSi, %TSi* [[T0]], i32 0, i32 0 -// CHECK: load [[INT]], [[INT]]* [[T1]], align +// CHECK: [[T0:%.*]] = getelementptr inbounds %T16actor_class_objc7MyClassC, ptr %0, i32 0, i32 2 +// CHECK: [[T1:%.*]] = getelementptr inbounds %TSi, ptr [[T0]], i32 0, i32 0 +// CHECK: load [[INT]], ptr [[T1]], align -// CHECK-LABEL: define {{.*}}swiftcc %T16actor_class_objc7MyClassC* @"$s16actor_class_objc7MyClassCACycfc" +// CHECK-LABEL: define {{.*}}swiftcc ptr @"$s16actor_class_objc7MyClassCACycfc" // CHECK: swift_defaultActor_initialize -// CHECK-LABEL: ret %T16actor_class_objc7MyClassC* +// CHECK-LABEL: ret ptr // CHECK: swift_defaultActor_destroy diff --git a/test/IRGen/alignment.sil b/test/IRGen/alignment.sil index 8bab3b8d2ec1c..820435e448251 100644 --- a/test/IRGen/alignment.sil +++ b/test/IRGen/alignment.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir %s +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s import Swift import Builtin @@ -81,14 +80,14 @@ entry: } // CHECK-LABEL: define {{.*}} @test_unaligned -// CHECK: store i64 %{{.*}}, i64* %{{.*}}, align 8 -// CHECK: %{{.*}} = load i64, i64* %{{.*}}, align 8 -// CHECK: store i64 %{{.*}}, i64* %{{.*}}, align 1 -// CHECK: %{{.*}} = load i64, i64* %{{.*}}, align 1 -// CHECK: store i64 %{{.*}}, i64* %{{.*}}, align 8 -// CHECK: %{{.*}} = load i64, i64* %{{.*}}, align 8 -// CHECK: store i64 %{{.*}}, i64* %{{.*}}, align 536870912 -// CHECK: %{{.*}} = load i64, i64* %{{.*}}, align 536870912 +// CHECK: store i64 %{{.*}}, ptr %{{.*}}, align 8 +// CHECK: %{{.*}} = load i64, ptr %{{.*}}, align 8 +// CHECK: store i64 %{{.*}}, ptr %{{.*}}, align 1 +// CHECK: %{{.*}} = load i64, ptr %{{.*}}, align 1 +// CHECK: store i64 %{{.*}}, ptr %{{.*}}, align 8 +// CHECK: %{{.*}} = load i64, ptr %{{.*}}, align 8 +// CHECK: store i64 %{{.*}}, ptr %{{.*}}, align 536870912 +// CHECK: %{{.*}} = load i64, ptr %{{.*}}, align 536870912 sil @test_unaligned : $@convention(thin) (Builtin.RawPointer, Builtin.Int64) -> () { entry(%0 : $Builtin.RawPointer, %1 : $Builtin.Int64): %2 = pointer_to_address %0 : $Builtin.RawPointer to $*Builtin.Int64 diff --git a/test/IRGen/alloc.sil b/test/IRGen/alloc.sil index 8e2b80d409888..3f52969558ca8 100644 --- a/test/IRGen/alloc.sil +++ b/test/IRGen/alloc.sil @@ -1,10 +1,9 @@ -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target x86_64-apple-macosx10.9 -module-name main %s -emit-ir -o - | %FileCheck %s -// RUN: %swift -disable-legacy-type-info -target x86_64-apple-macosx10.9 -module-name main %s -emit-ir -o - -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target i386-apple-ios7.0 %s -module-name main -emit-ir -o - | %FileCheck %s -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target x86_64-apple-ios7.0 %s -module-name main -emit-ir -o - | %FileCheck %s -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target armv7-apple-ios7.0 %s -module-name main -emit-ir -o - | %FileCheck %s -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target arm64-apple-ios7.0 %s -module-name main -emit-ir -o - | %FileCheck %s -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target x86_64-unknown-linux-gnu %s -disable-objc-interop -module-name main -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target x86_64-apple-macosx10.9 -module-name main %s -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target i386-apple-ios7.0 %s -module-name main -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target x86_64-apple-ios7.0 %s -module-name main -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target armv7-apple-ios7.0 %s -module-name main -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target arm64-apple-ios7.0 %s -module-name main -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target x86_64-unknown-linux-gnu %s -disable-objc-interop -module-name main -emit-ir -o - | %FileCheck %s // REQUIRES: CODEGENERATOR=X86 // REQUIRES: CODEGENERATOR=ARM @@ -20,6 +19,6 @@ struct Huge { var unalign: Builtin.Int8 } -// CHECK: define linkonce_odr hidden i8* @__swift_memcpy4097_8(i8* %0, i8* %1, %swift.type* %2) -// CHECK: call void @llvm.memcpy.p0i8.p0i8.{{(i64|i32)}}(i8* align 8 %0, i8* align 8 %1, {{(i64|i32)}} 4097, i1 false) -// CHECK: ret i8* %0 +// CHECK: define linkonce_odr hidden ptr @__swift_memcpy4097_8(ptr %0, ptr %1, ptr %2) +// CHECK: call void @llvm.memcpy.p0.p0.{{(i64|i32)}}(ptr align 8 %0, ptr align 8 %1, {{(i64|i32)}} 4097, i1 false) +// CHECK: ret ptr %0 diff --git a/test/IRGen/argument_attrs.sil b/test/IRGen/argument_attrs.sil index ff17815eb6f35..cd2972d128e32 100644 --- a/test/IRGen/argument_attrs.sil +++ b/test/IRGen/argument_attrs.sil @@ -1,53 +1,52 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir %s +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s import Builtin struct Huge { var x, y, z, w, a, b, c, d, e, f: Builtin.Int32 } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @arguments_in_def(i32* nocapture dereferenceable(4) %0, i32* noalias nocapture dereferenceable(4) %1, i32* noalias nocapture dereferenceable(4) %2, %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40) %3, %swift.opaque* noalias nocapture %4, %swift.opaque* noalias nocapture %5, %swift.type* %T) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @arguments_in_def(ptr nocapture dereferenceable(4) %0, ptr noalias nocapture dereferenceable(4) %1, ptr noalias nocapture dereferenceable(4) %2, ptr noalias nocapture dereferenceable(40) %3, ptr noalias nocapture %4, ptr noalias nocapture %5, ptr %T) sil @arguments_in_def : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> () { entry(%1 : $*Builtin.Int32, %2 : $*Builtin.Int32, %3 : $*Builtin.Int32, %4 : $Huge, %5 : $*T, %6 : $*()): - // CHECK: call swiftcc void @arguments_in_decl(i32* nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40) {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.type* %T) + // CHECK: call swiftcc void @arguments_in_decl(ptr nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(40) {{%.*}}, ptr noalias nocapture {{%.*}}, ptr noalias nocapture {{%.*}}, ptr %T) %f = function_ref @arguments_in_decl : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> () %x = apply %f(%1, %2, %3, %4, %5, %6) : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> () - // CHECK: call swiftcc void @arguments_in_def(i32* nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40) {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.type* %T) + // CHECK: call swiftcc void @arguments_in_def(ptr nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(40) {{%.*}}, ptr noalias nocapture {{%.*}}, ptr noalias nocapture {{%.*}}, ptr %T) %g = function_ref @arguments_in_def : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> () %y = apply %g(%1, %2, %3, %4, %5, %6) : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> () return undef : $() } -// CHECK-LABEL: declare{{( dllimport)?}} swiftcc void @arguments_in_decl(i32* nocapture dereferenceable(4), i32* noalias nocapture dereferenceable(4), i32* noalias nocapture dereferenceable(4), %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40), %swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*) +// CHECK-LABEL: declare{{( dllimport)?}} swiftcc void @arguments_in_decl(ptr nocapture dereferenceable(4), ptr noalias nocapture dereferenceable(4), ptr noalias nocapture dereferenceable(4), ptr noalias nocapture dereferenceable(40), ptr noalias nocapture, ptr noalias nocapture, ptr) sil @arguments_in_decl : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> () -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @arguments_in_def_out(i32* noalias nocapture sret({{.*}}) %0, i32* nocapture dereferenceable(4) %1, i32* noalias nocapture dereferenceable(4) %2, i32* noalias nocapture dereferenceable(4) %3, %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40) %4, %swift.opaque* noalias nocapture %5, %swift.opaque* noalias nocapture %6, %swift.type* %T) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @arguments_in_def_out(ptr noalias nocapture sret({{.*}}) %0, ptr nocapture dereferenceable(4) %1, ptr noalias nocapture dereferenceable(4) %2, ptr noalias nocapture dereferenceable(4) %3, ptr noalias nocapture dereferenceable(40) %4, ptr noalias nocapture %5, ptr noalias nocapture %6, ptr %T) sil @arguments_in_def_out : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> @out Builtin.Int32 { entry(%0 : $*Builtin.Int32, %1 : $*Builtin.Int32, %2 : $*Builtin.Int32, %3 : $*Builtin.Int32, %4 : $Huge, %5 : $*T, %6 : $*()): - // CHECK: call swiftcc void @arguments_in_decl_out(i32* noalias nocapture sret({{.*}}) {{%.*}}, i32* nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40) {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.type* {{%.*}}) + // CHECK: call swiftcc void @arguments_in_decl_out(ptr noalias nocapture sret({{.*}}) {{%.*}}, ptr nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(40) {{%.*}}, ptr noalias nocapture {{%.*}}, ptr noalias nocapture {{%.*}}, ptr {{%.*}}) %f = function_ref @arguments_in_decl_out : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> @out Builtin.Int32 %x = apply %f(%0, %1, %2, %3, %4, %5, %6) : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> @out Builtin.Int32 - // CHECK: call swiftcc void @arguments_in_def_out(i32* noalias nocapture sret({{.*}}) {{%.*}}, i32* nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40) {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.type* {{%.*}}) + // CHECK: call swiftcc void @arguments_in_def_out(ptr noalias nocapture sret({{.*}}) {{%.*}}, ptr nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(40) {{%.*}}, ptr noalias nocapture {{%.*}}, ptr noalias nocapture {{%.*}}, ptr {{%.*}}) %g = function_ref @arguments_in_def_out : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> @out Builtin.Int32 %y = apply %g(%0, %1, %2, %3, %4, %5, %6) : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> @out Builtin.Int32 return undef : $() } -// CHECK-LABEL: declare{{( dllimport)?}} swiftcc void @arguments_in_decl_out(i32* noalias nocapture sret({{.*}}), i32* nocapture dereferenceable(4), i32* noalias nocapture dereferenceable(4), i32* noalias nocapture dereferenceable(4), %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40), %swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*) +// CHECK-LABEL: declare{{( dllimport)?}} swiftcc void @arguments_in_decl_out(ptr noalias nocapture sret({{.*}}), ptr nocapture dereferenceable(4), ptr noalias nocapture dereferenceable(4), ptr noalias nocapture dereferenceable(4), ptr noalias nocapture dereferenceable(40), ptr noalias nocapture, ptr noalias nocapture, ptr) sil @arguments_in_decl_out : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> @out Builtin.Int32 -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @arguments_in_def_huge_ret(%T14argument_attrs4HugeV* noalias nocapture sret({{.*}}) %0, i32* nocapture dereferenceable(4) %1, i32* noalias nocapture dereferenceable(4) %2, i32* noalias nocapture dereferenceable(4) %3, %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40) %4, %swift.opaque* noalias nocapture %5, %swift.opaque* noalias nocapture %6, %swift.type* %T) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @arguments_in_def_huge_ret(ptr noalias nocapture sret({{.*}}) %0, ptr nocapture dereferenceable(4) %1, ptr noalias nocapture dereferenceable(4) %2, ptr noalias nocapture dereferenceable(4) %3, ptr noalias nocapture dereferenceable(40) %4, ptr noalias nocapture %5, ptr noalias nocapture %6, ptr %T) sil @arguments_in_def_huge_ret : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> Huge { entry(%1 : $*Builtin.Int32, %2 : $*Builtin.Int32, %3 : $*Builtin.Int32, %4 : $Huge, %5 : $*T, %6 : $*()): %f = function_ref @arguments_in_decl_huge_ret : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> Huge - // CHECK: call swiftcc void @arguments_in_decl_huge_ret(%T14argument_attrs4HugeV* noalias nocapture sret({{.*}}) {{%.*}}, i32* nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40) {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.type* {{%.*}}) + // CHECK: call swiftcc void @arguments_in_decl_huge_ret(ptr noalias nocapture sret({{.*}}) {{%.*}}, ptr nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(40) {{%.*}}, ptr noalias nocapture {{%.*}}, ptr noalias nocapture {{%.*}}, ptr {{%.*}}) %x = apply %f(%1, %2, %3, %4, %5, %6) : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> Huge - // CHECK: call swiftcc void @arguments_in_def_huge_ret(%T14argument_attrs4HugeV* noalias nocapture sret({{.*}}) {{%.*}}, i32* nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, i32* noalias nocapture dereferenceable(4) {{%.*}}, %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40) {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.opaque* noalias nocapture {{%.*}}, %swift.type* {{%.*}}) + // CHECK: call swiftcc void @arguments_in_def_huge_ret(ptr noalias nocapture sret({{.*}}) {{%.*}}, ptr nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(4) {{%.*}}, ptr noalias nocapture dereferenceable(40) {{%.*}}, ptr noalias nocapture {{%.*}}, ptr noalias nocapture {{%.*}}, ptr {{%.*}}) %g = function_ref @arguments_in_def_huge_ret : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> Huge %y = apply %g(%1, %2, %3, %4, %5, %6) : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> Huge return %y : $Huge } -// CHECK-LABEL: declare{{( dllimport)?}} swiftcc void @arguments_in_decl_huge_ret(%T14argument_attrs4HugeV* noalias nocapture sret({{.*}}), i32* nocapture dereferenceable(4), i32* noalias nocapture dereferenceable(4), i32* noalias nocapture dereferenceable(4), %T14argument_attrs4HugeV* noalias nocapture dereferenceable(40), %swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*) +// CHECK-LABEL: declare{{( dllimport)?}} swiftcc void @arguments_in_decl_huge_ret(ptr noalias nocapture sret({{.*}}), ptr nocapture dereferenceable(4), ptr noalias nocapture dereferenceable(4), ptr noalias nocapture dereferenceable(4), ptr noalias nocapture dereferenceable(40), ptr noalias nocapture, ptr noalias nocapture, ptr) sil @arguments_in_decl_huge_ret : $@convention(thin) (@inout Builtin.Int32, @in Builtin.Int32, @in_guaranteed Builtin.Int32, Huge, @in T, @in ()) -> Huge diff --git a/test/IRGen/async.swift b/test/IRGen/async.swift index de9b4a951cba7..3af4d3443303f 100644 --- a/test/IRGen/async.swift +++ b/test/IRGen/async.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir -disable-availability-checking | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -// RUN: %target-swift-frontend -primary-file %s -emit-ir -disable-availability-checking +// RUN: %target-swift-frontend -primary-file %s -emit-ir -disable-availability-checking | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize // RUN: %target-swift-frontend -primary-file %s -emit-ir -disable-availability-checking -enable-library-evolution // REQUIRES: concurrency @@ -21,9 +20,9 @@ public class SomeClass {} @_silgen_name("swift_task_future_wait_throwing") public func _taskFutureGetThrowing(_ task: SomeClass) async throws -> T -// CHECK: define{{.*}} swift{{(tail)?}}cc void @"$s5async8testThisyyAA9SomeClassCnYaF"(%swift.context* swiftasync %0{{.*}} +// CHECK: define{{.*}} swift{{(tail)?}}cc void @"$s5async8testThisyyAA9SomeClassCnYaF"(ptr swiftasync %0{{.*}} // CHECK-NOT: @swift_task_alloc -// CHECK: {{(must)?}}tail call swift{{(tail)?}}cc void @swift_task_future_wait_throwing(%swift.opaque* {{.*}}, %swift.context* {{.*}}, %T5async9SomeClassC* {{.*}}, i8* {{.*}}, %swift.context* {{.*}}) +// CHECK: {{(must)?}}tail call swift{{(tail)?}}cc void @swift_task_future_wait_throwing(ptr {{.*}}, ptr {{.*}}, ptr {{.*}}, ptr {{.*}}, ptr {{.*}}) public func testThis(_ task: __owned SomeClass) async { do { let _ : Int = try await _taskFutureGetThrowing(task) diff --git a/test/IRGen/async/builtin_executor.sil b/test/IRGen/async/builtin_executor.sil index b9590009abe45..a30eba0475bf9 100644 --- a/test/IRGen/async/builtin_executor.sil +++ b/test/IRGen/async/builtin_executor.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -module-name=test -disable-llvm-optzns -disable-swift-specific-llvm-optzns -emit-ir -sil-verify-all | %IRGenFileCheck %s -// RUN: %target-swift-frontend -primary-file %s -module-name=test -disable-llvm-optzns -disable-swift-specific-llvm-optzns -emit-ir -sil-verify-all +// RUN: %target-swift-frontend -primary-file %s -module-name=test -disable-llvm-optzns -disable-swift-specific-llvm-optzns -emit-ir -sil-verify-all | %IRGenFileCheck %s // REQUIRES: concurrency // rdar://106849189 move-only types should be supported in freestanding mode @@ -42,10 +41,10 @@ bb0(%0 : $Builtin.Executor): return %1 : $Optional } -// CHECK: define{{.*}} swiftcc { [[INT]], [[INT]] } @test_build_default_actor(%T4test14MyDefaultActorC* %0) +// CHECK: define{{.*}} swiftcc { [[INT]], [[INT]] } @test_build_default_actor(ptr %0) sil @test_build_default_actor : $(@guaranteed MyDefaultActor) -> Builtin.Executor { bb0(%0 : $MyDefaultActor): - // CHECK: [[T0:%.*]] = ptrtoint %T4test14MyDefaultActorC* %0 to [[INT]] + // CHECK: [[T0:%.*]] = ptrtoint ptr %0 to [[INT]] // CHECK-NEXT: [[ONE:%.*]] = insertvalue { [[INT]], [[INT]] } undef, [[INT]] [[T0]], 0 // CHECK-NEXT: [[TWO:%.*]] = insertvalue { [[INT]], [[INT]] } [[ONE]], [[INT]] 0, 1 // CHECK-NEXT: ret { [[INT]], [[INT]] } [[TWO]] @@ -53,12 +52,12 @@ bb0(%0 : $MyDefaultActor): return %1 : $Builtin.Executor } -// CHECK: define{{.*}} swiftcc { [[INT]], [[INT]] } @test_build_custom_actor(%T4test13MyCustomActorC* %0) +// CHECK: define{{.*}} swiftcc { [[INT]], [[INT]] } @test_build_custom_actor(ptr %0) sil @test_build_custom_actor : $(@guaranteed MyCustomActor) -> Builtin.Executor { bb0(%0 : $MyCustomActor): - // CHECK: [[T0:%.*]] = ptrtoint %T4test13MyCustomActorC* %0 to [[INT]] - // CHECK-NEXT: [[T1:%.*]] = call i8** @"$s4test13MyCustomActorCACScfAAWl"() - // CHECK-NEXT: [[T2:%.*]] = ptrtoint i8** [[T1]] to [[INT]] + // CHECK: [[T0:%.*]] = ptrtoint ptr %0 to [[INT]] + // CHECK-NEXT: [[T1:%.*]] = call ptr @"$s4test13MyCustomActorCACScfAAWl"() + // CHECK-NEXT: [[T2:%.*]] = ptrtoint ptr [[T1]] to [[INT]] // CHECK: [[ONE:%.*]] = insertvalue { [[INT]], [[INT]] } undef, [[INT]] [[T0]], 0 // CHECK-NEXT: [[TWO:%.*]] = insertvalue { [[INT]], [[INT]] } [[ONE]], [[INT]] [[T2]], 1 // CHECK-NEXT: ret { [[INT]], [[INT]] } [[TWO]] diff --git a/test/IRGen/async/builtins.sil b/test/IRGen/async/builtins.sil index cb62bcbbe363a..2444150be4697 100644 --- a/test/IRGen/async/builtins.sil +++ b/test/IRGen/async/builtins.sil @@ -1,7 +1,5 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -enable-objc-interop -primary-file %s -emit-ir -sil-verify-all | %FileCheck %s -DINT=i%target-ptrsize --check-prefixes=CHECK,CHECK-objc,CHECK-%target-ptrsize -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-objc-interop -primary-file %s -emit-ir -sil-verify-all | %FileCheck %s -DINT=i%target-ptrsize --check-prefixes=CHECK,CHECK-native,CHECK-%target-ptrsize -// RUN: %target-swift-frontend -enable-objc-interop -primary-file %s -emit-ir -sil-verify-all -// RUN: %target-swift-frontend -disable-objc-interop -primary-file %s -emit-ir -sil-verify-all +// RUN: %target-swift-frontend -enable-objc-interop -primary-file %s -emit-ir -sil-verify-all | %FileCheck %s -DINT=i%target-ptrsize --check-prefixes=CHECK,CHECK-objc,CHECK-%target-ptrsize +// RUN: %target-swift-frontend -disable-objc-interop -primary-file %s -emit-ir -sil-verify-all | %FileCheck %s -DINT=i%target-ptrsize --check-prefixes=CHECK,CHECK-native,CHECK-%target-ptrsize // REQUIRES: concurrency // XFAIL: CPU=arm64e @@ -11,21 +9,19 @@ sil_stage canonical import Builtin import Swift -// CHECK-LABEL: define hidden swift{{(tail)?}}cc void @get_task(%swift.context* swiftasync %0) +// CHECK-LABEL: define hidden swift{{(tail)?}}cc void @get_task(ptr swiftasync %0) sil hidden [ossa] @get_task : $@async @convention(thin) () -> @owned Builtin.NativeObject { bb0: - // CHECK: [[TASK:%.*]] = call swiftcc %swift.task* @swift_task_getCurrent() - // CHECK: [[TASKRC:%.*]] = bitcast %swift.task* [[TASK]] to %swift.refcounted* + // CHECK: [[TASK:%.*]] = call swiftcc ptr @swift_task_getCurrent() %0 = builtin "getCurrentAsyncTask"() : $Builtin.NativeObject - // CHECK-NEXT: [[TASK_COPY:%.*]] = call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[TASKRC]]) + // CHECK-NEXT: [[TASK_COPY:%.*]] = call ptr @swift_retain(ptr returned [[TASK]]) %1 = copy_value %0 : $Builtin.NativeObject end_lifetime %0 : $Builtin.NativeObject return %1 : $Builtin.NativeObject } -// CHECK-LABEL: define hidden swift{{(tail)?}}cc void @cancel_task(%swift.refcounted* %0) -// CHECK: [[TASK:%.*]] = bitcast %swift.refcounted* %0 to %swift.task* -// CHECK-NEXT: call swift{{(tail)?}}cc void @swift_task_cancel(%swift.task* [[TASK]]) +// CHECK-LABEL: define hidden swift{{(tail)?}}cc void @cancel_task(ptr %0) +// CHECK: call swift{{(tail)?}}cc void @swift_task_cancel(ptr %0) sil hidden [ossa] @cancel_task : $@convention(method) (@guaranteed Builtin.NativeObject) -> () { bb0(%0 : @guaranteed $Builtin.NativeObject): %4 = builtin "cancelAsyncTask"(%0 : $Builtin.NativeObject) : $() @@ -37,7 +33,7 @@ bb0(%0 : @guaranteed $Builtin.NativeObject): sil hidden [ossa] @launch_future : $@convention(method) (Int, Optional, @guaranteed @async @callee_owned @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for , @in_guaranteed T) -> () { bb0(%0 : $Int, %1 : $Optional, %2: @guaranteed $@async @callee_owned @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for , %4: $*T): %5 = copy_value %2 : $@async @callee_owned @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for - // CHECK: call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[FN_CONTEXT:%3]]) + // CHECK: call ptr @swift_retain(ptr returned [[FN_CONTEXT:%3]]) %9 = metatype $@thick T.Type %10 = init_existential_metatype %9 : $@thick T.Type, $@thick Any.Type // CHECK: [[NEW_TASK_AND_CONTEXT:%.*]] = call swift{{(tail)?}}cc %swift.async_task_and_context @swift_task_create( @@ -49,14 +45,14 @@ bb0(%0 : $Int, %1 : $Optional, %2: @guaranteed $@async @call // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @launch_future_in_group // CHECK: [[OPTIONS:%.*]] = alloca %swift.task_group_task_option -// CHECK: [[BASE_GEP:%.*]] = getelementptr inbounds %swift.task_group_task_option, %swift.task_group_task_option* [[OPTIONS]], i32 0, i32 0 -// CHECK: [[FLAGS_GEP:%.*]] = getelementptr inbounds %swift.task_option, %swift.task_option* [[BASE_GEP]], i32 0, i32 0 -// CHECK: store [[INT]] 1, [[INT]]* [[FLAGS_GEP]], align 1 -// CHECK: [[PARENT_GEP:%.*]] = getelementptr inbounds %swift.task_option, %swift.task_option* [[BASE_GEP]], i32 0, i32 1 -// CHECK: store [[INT]] 0, [[INT]]* [[PARENT_GEP]], align 1 -// CHECK: [[GROUP_GEP:%.*]] = getelementptr inbounds %swift.task_group_task_option, %swift.task_group_task_option* [[OPTIONS]], i32 0, i32 1 -// CHECK: store i8* %0, i8** [[GROUP_GEP]], align 1 -// CHECK: [[OPTIONS_PTR:%.*]] = ptrtoint %swift.task_group_task_option* [[OPTIONS]] to [[INT]] +// CHECK: [[BASE_GEP:%.*]] = getelementptr inbounds %swift.task_group_task_option, ptr [[OPTIONS]], i32 0, i32 0 +// CHECK: [[FLAGS_GEP:%.*]] = getelementptr inbounds %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 0 +// CHECK: store [[INT]] 1, ptr [[FLAGS_GEP]], align 1 +// CHECK: [[PARENT_GEP:%.*]] = getelementptr inbounds %swift.task_option, ptr [[BASE_GEP]], i32 0, i32 1 +// CHECK: store [[INT]] 0, ptr [[PARENT_GEP]], align 1 +// CHECK: [[GROUP_GEP:%.*]] = getelementptr inbounds %swift.task_group_task_option, ptr [[OPTIONS]], i32 0, i32 1 +// CHECK: store ptr %0, ptr [[GROUP_GEP]], align 1 +// CHECK: [[OPTIONS_PTR:%.*]] = ptrtoint ptr [[OPTIONS]] to [[INT]] // CHECK: call swiftcc %swift.async_task_and_context @swift_task_create([[INT]] %3, [[INT]] [[OPTIONS_PTR]], sil hidden @launch_future_in_group : $@convention(thin) (Builtin.RawPointer, @guaranteed @async @callee_guaranteed () -> (Int, @error Error), Int) -> () { bb0(%0 : $Builtin.RawPointer, %1 : $@async @callee_guaranteed () -> (Int, @error Error), %3: $Int): @@ -74,7 +70,7 @@ bb0(%0 : $Builtin.RawPointer, %1 : $@async @callee_guaranteed () -> (Int, @error sil hidden [ossa] @launch_void_future : $@convention(method) (Int, Optional, @guaranteed @async @callee_owned @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for <()>) -> () { bb0(%0 : $Int, %1 : $Optional, %2: @guaranteed $@async @callee_owned @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for <()>): %5 = copy_value %2 : $@async @callee_owned @substituted <τ_0_0> () -> (@out τ_0_0, @error Error) for <()> - // CHECK: call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[FN_CONTEXT:%3]]) + // CHECK: call ptr @swift_retain(ptr returned [[FN_CONTEXT:%3]]) %8 = metatype $@thick ().Type // user: %9 %9 = init_existential_metatype %8 : $@thick ().Type, $@thick Any.Type // user: %10 // CHECK: [[NEW_TASK_AND_CONTEXT:%.*]] = call swift{{(tail)?}}cc %swift.async_task_and_context @swift_task_create( @@ -87,16 +83,13 @@ bb0(%0 : $Int, %1 : $Optional, %2: @guaranteed $@async @call // CHECK-LABEL: define hidden swiftcc void @resume_nonthrowing_continuation sil hidden [ossa] @resume_nonthrowing_continuation : $(@in Builtin.NativeObject, Builtin.RawUnsafeContinuation) -> () { bb0(%0 : $*Builtin.NativeObject, %1 : $Builtin.RawUnsafeContinuation): - // CHECK: [[CONT:%.*]] = bitcast i8* %1 to %swift.task* - // CHECK-NEXT: [[CONTEXT_SLOT:%.*]] = getelementptr inbounds %swift.task, %swift.task* [[CONT]], i32 0, i32 8 - // CHECK-NEXT: [[CONTEXT_OPAQUE:%.*]] = load %swift.context*, %swift.context** [[CONTEXT_SLOT]], align - // CHECK-NEXT: [[CONTEXT:%.*]] = bitcast %swift.context* [[CONTEXT_OPAQUE]] to %swift.continuation_context* - // CHECK-NEXT: [[RESULT_ADDR_SLOT:%.*]] = getelementptr inbounds %swift.continuation_context, %swift.continuation_context* [[CONTEXT]], i32 0, i32 4 - // CHECK-NEXT: [[RESULT_ADDR_OPAQUE:%.*]] = load %swift.opaque*, %swift.opaque** [[RESULT_ADDR_SLOT]], align - // CHECK-NEXT: [[RESULT_ADDR:%.*]] = bitcast %swift.opaque* [[RESULT_ADDR_OPAQUE]] to %swift.refcounted** - // CHECK-NEXT: [[VALUE:%.*]] = load %swift.refcounted*, %swift.refcounted** %0, align - // CHECK-NEXT: store %swift.refcounted* [[VALUE]], %swift.refcounted** [[RESULT_ADDR]], align - // CHECK-NEXT: call swiftcc void @swift_continuation_resume(%swift.task* [[CONT]]) + // CHECK: [[CONTEXT_SLOT:%.*]] = getelementptr inbounds %swift.task, ptr %1, i32 0, i32 8 + // CHECK-NEXT: [[CONTEXT_OPAQUE:%.*]] = load ptr, ptr [[CONTEXT_SLOT]], align + // CHECK-NEXT: [[RESULT_ADDR_SLOT:%.*]] = getelementptr inbounds %swift.continuation_context, ptr [[CONTEXT_OPAQUE]], i32 0, i32 4 + // CHECK-NEXT: [[RESULT_ADDR_OPAQUE:%.*]] = load ptr, ptr [[RESULT_ADDR_SLOT]], align + // CHECK-NEXT: [[VALUE:%.*]] = load ptr, ptr %0, align + // CHECK-NEXT: store ptr [[VALUE]], ptr [[RESULT_ADDR_OPAQUE]], align + // CHECK-NEXT: call swiftcc void @swift_continuation_resume(ptr %1) // CHECK-NEXT: ret void builtin "resumeNonThrowingContinuationReturning"(%1 : $Builtin.RawUnsafeContinuation, %0 : $*Builtin.NativeObject) : $() %21 = tuple () @@ -106,16 +99,13 @@ bb0(%0 : $*Builtin.NativeObject, %1 : $Builtin.RawUnsafeContinuation): // CHECK-LABEL: define hidden swiftcc void @resume_throwing_continuation sil hidden [ossa] @resume_throwing_continuation : $(@in Builtin.NativeObject, Builtin.RawUnsafeContinuation) -> () { bb0(%0 : $*Builtin.NativeObject, %1 : $Builtin.RawUnsafeContinuation): - // CHECK: [[CONT:%.*]] = bitcast i8* %1 to %swift.task* - // CHECK-NEXT: [[CONTEXT_SLOT:%.*]] = getelementptr inbounds %swift.task, %swift.task* [[CONT]], i32 0, i32 8 - // CHECK-NEXT: [[CONTEXT_OPAQUE:%.*]] = load %swift.context*, %swift.context** [[CONTEXT_SLOT]], align - // CHECK-NEXT: [[CONTEXT:%.*]] = bitcast %swift.context* [[CONTEXT_OPAQUE]] to %swift.continuation_context* - // CHECK-NEXT: [[RESULT_ADDR_SLOT:%.*]] = getelementptr inbounds %swift.continuation_context, %swift.continuation_context* [[CONTEXT]], i32 0, i32 4 - // CHECK-NEXT: [[RESULT_ADDR_OPAQUE:%.*]] = load %swift.opaque*, %swift.opaque** [[RESULT_ADDR_SLOT]], align - // CHECK-NEXT: [[RESULT_ADDR:%.*]] = bitcast %swift.opaque* [[RESULT_ADDR_OPAQUE]] to %swift.refcounted** - // CHECK-NEXT: [[VALUE:%.*]] = load %swift.refcounted*, %swift.refcounted** %0, align - // CHECK-NEXT: store %swift.refcounted* [[VALUE]], %swift.refcounted** [[RESULT_ADDR]], align - // CHECK-NEXT: call swiftcc void @swift_continuation_throwingResume(%swift.task* [[CONT]]) + // CHECK: [[CONTEXT_SLOT:%.*]] = getelementptr inbounds %swift.task, ptr %1, i32 0, i32 8 + // CHECK-NEXT: [[CONTEXT_OPAQUE:%.*]] = load ptr, ptr [[CONTEXT_SLOT]], align + // CHECK-NEXT: [[RESULT_ADDR_SLOT:%.*]] = getelementptr inbounds %swift.continuation_context, ptr [[CONTEXT_OPAQUE]], i32 0, i32 4 + // CHECK-NEXT: [[RESULT_ADDR_OPAQUE:%.*]] = load ptr, ptr [[RESULT_ADDR_SLOT]], align + // CHECK-NEXT: [[VALUE:%.*]] = load ptr, ptr %0, align + // CHECK-NEXT: store ptr [[VALUE]], ptr [[RESULT_ADDR_OPAQUE]], align + // CHECK-NEXT: call swiftcc void @swift_continuation_throwingResume(ptr %1) // CHECK-NEXT: ret void builtin "resumeThrowingContinuationReturning"(%1 : $Builtin.RawUnsafeContinuation, %0 : $*Builtin.NativeObject) : $() %21 = tuple () @@ -125,8 +115,7 @@ bb0(%0 : $*Builtin.NativeObject, %1 : $Builtin.RawUnsafeContinuation): // CHECK-LABEL: define hidden swiftcc void @resume_throwing_continuation_throwing sil hidden [ossa] @resume_throwing_continuation_throwing : $(@owned Error, Builtin.RawUnsafeContinuation) -> () { bb0(%0 : @owned $Error, %1 : $Builtin.RawUnsafeContinuation): - // CHECK: [[CONT:%.*]] = bitcast i8* %1 to %swift.task* - // CHECK-NEXT: call swiftcc void @swift_continuation_throwingResumeWithError(%swift.task* [[CONT]], %swift.error* %0) + // CHECK: call swiftcc void @swift_continuation_throwingResumeWithError(ptr %1, ptr %0) // CHECK-NEXT: ret void builtin "resumeThrowingContinuationThrowing"(%1 : $Builtin.RawUnsafeContinuation, %0 : $Error) : $() %21 = tuple () @@ -136,15 +125,14 @@ bb0(%0 : @owned $Error, %1 : $Builtin.RawUnsafeContinuation): // CHECK-LABEL: define hidden swift{{(tail)?}}cc void @task_group_create_destroy sil hidden [ossa] @task_group_create_destroy : $@async () -> () { bb0: - // CHECK: [[TASKGROUP:%.*]] = alloca [32 x i8*], align 16 - // CHECK: [[T0:%.*]] = bitcast [32 x i8*]* [[TASKGROUP]] to i8* - // CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 -1, i8* [[T0]]) - // CHECK-NEXT: call swiftcc void @swift_taskGroup_initialize(i8* [[T0]], %swift.type* {{.*}}) + // CHECK: [[TASKGROUP:%.*]] = alloca [32 x ptr], align 16 + // CHECK: call void @llvm.lifetime.start.p0(i64 -1, ptr [[TASKGROUP]]) + // CHECK-NEXT: call swiftcc void @swift_taskGroup_initialize(ptr [[TASKGROUP]], ptr {{.*}}) %0 = metatype $@thin Builtin.Int32.Type %1 = builtin "createTaskGroup"(%0: $@thin Builtin.Int32.Type) : $Builtin.RawPointer - // CHECK-NEXT: call swiftcc void @swift_taskGroup_destroy(i8* [[T0]]) - // CHECK-NEXT: call void @llvm.lifetime.end.p0i8(i64 -1, i8* [[T0]]) + // CHECK-NEXT: call swiftcc void @swift_taskGroup_destroy(ptr [[TASKGROUP]]) + // CHECK-NEXT: call void @llvm.lifetime.end.p0(i64 -1, ptr [[TASKGROUP]]) builtin "destroyTaskGroup"(%1 : $Builtin.RawPointer) : $() %21 = tuple () @@ -153,16 +141,16 @@ bb0: // CHECK-LABEL: define{{.*}} swiftcc void @testRunInline( -// CHECK-SAME: %swift.opaque* noalias nocapture sret(%swift.opaque) [[RESULT:%[^,]+]], -// CHECK-SAME: i8* [[CLOSURE:%[^,]+]], -// CHECK-SAME: %swift.opaque* [[CLOSURE_CONTEXT:%[^,]+]], -// CHECK-SAME: %swift.type* [[FUTURE_RESULT_TYPE:%[^,]+]]) +// CHECK-SAME: ptr noalias nocapture sret(%swift.opaque) [[RESULT:%[^,]+]], +// CHECK-SAME: ptr [[CLOSURE:%[^,]+]], +// CHECK-SAME: ptr [[CLOSURE_CONTEXT:%[^,]+]], +// CHECK-SAME: ptr [[FUTURE_RESULT_TYPE:%[^,]+]]) // CHECK-SAME: { // CHECK: call swiftcc void @swift_task_run_inline( -// CHECK-SAME: %swift.opaque* [[RESULT]], -// CHECK-SAME: i8* [[CLOSURE]], -// CHECK-SAME: %swift.opaque* [[CLOSURE_CONTEXT]], -// CHECK-SAME: %swift.type* [[FUTURE_RESULT_TYPE]]) +// CHECK-SAME: ptr [[RESULT]], +// CHECK-SAME: ptr [[CLOSURE]], +// CHECK-SAME: ptr [[CLOSURE_CONTEXT]], +// CHECK-SAME: ptr [[FUTURE_RESULT_TYPE]]) // CHECK: } sil hidden @testRunInline : $@convention(thin) (@noescape @async @callee_guaranteed @substituted <τ_0_0> () -> @out τ_0_0 for ) -> @out T { entry(%result : $*T, %closure : $@noescape @async @callee_guaranteed @substituted <τ_0_0> () -> @out τ_0_0 for ): diff --git a/test/IRGen/async/class_resilience.swift b/test/IRGen/async/class_resilience.swift index 2a556a23036a3..413cb76d67064 100644 --- a/test/IRGen/async/class_resilience.swift +++ b/test/IRGen/async/class_resilience.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -disable-availability-checking -enable-library-evolution -emit-module-path=%t/resilient_class.swiftmodule -module-name=resilient_class %S/Inputs/resilient_class.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -disable-availability-checking -enable-library-evolution %s | %FileCheck -check-prefix CHECK -check-prefix CHECK-%target-cpu -check-prefix CHECK-%target-import-type %s -// RUN: %target-swift-frontend -I %t -emit-ir -disable-availability-checking -enable-library-evolution %s +// RUN: %target-swift-frontend -I %t -emit-ir -disable-availability-checking -enable-library-evolution %s | %FileCheck -check-prefix CHECK -check-prefix CHECK-%target-cpu -check-prefix CHECK-%target-import-type %s // REQUIRES: concurrency import resilient_class @@ -37,23 +36,23 @@ open class MyBaseClass { // CHECK-LABEL: @"$s16class_resilience11MyBaseClassC4waitxyYaFTjTu" = {{(dllexport )?}}{{(protected )?}}global %swift.async_func_pointer // CHECK-LABEL: @"$s16class_resilience11MyBaseClassCMn" = {{(dllexport )?}}{{(protected )?}}constant -// CHECK-SAME: %swift.async_func_pointer* @"$s16class_resilience11MyBaseClassC4waitxyYaFTu" +// CHECK-SAME: ptr @"$s16class_resilience11MyBaseClassC4waitxyYaFTu" // CHECK-LABEL: @"$s16class_resilience9MyDerivedCMn" = hidden constant -// CHECK-SAME: %swift.async_func_pointer* @"$s16class_resilience9MyDerivedC4waitSiyYaF010resilient_A09BaseClassCADxyYaFTVTu" - -// CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swift{{(tail)?}}cc void @"$s16class_resilience14callsAwaitableyx010resilient_A09BaseClassCyxGYalF"(%swift.opaque* noalias nocapture %0, %swift.context* swiftasync %1{{.*}}) -// CHECK-DIRECT: %swift.async_func_pointer* @"$s15resilient_class9BaseClassC4waitxyYaFTjTu" -// CHECK-INDIRECT: [[LOAD:%[0-9]+]] = load %swift.async_func_pointer*, %swift.async_func_pointer** inttoptr (i64 and (i64 add (i64 ptrtoint (%swift.async_func_pointer** @"\01__imp_$s15resilient_class9BaseClassC4waitxyYaFTjTu" to i64), i64 1), i64 -2) to %swift.async_func_pointer**), align {{4|8}} -// CHECK-INDIRECT-NEXT: %14 = select i1 icmp eq (i64 and (i64 add (i64 ptrtoint (%swift.async_func_pointer** @"\01__imp_$s15resilient_class9BaseClassC4waitxyYaFTjTu" to i64), i64 1), i64 1), i64 0), -// CHECK-INDIRECT-SAME: %swift.async_func_pointer* inttoptr (i64 add (i64 ptrtoint (%swift.async_func_pointer** @"\01__imp_$s15resilient_class9BaseClassC4waitxyYaFTjTu" to i64), i64 1) to %swift.async_func_pointer*), -// CHECK-INDIRECT-SAME: %swift.async_func_pointer* [[LOAD]] +// CHECK-SAME: ptr @"$s16class_resilience9MyDerivedC4waitSiyYaF010resilient_A09BaseClassCADxyYaFTVTu" + +// CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swift{{(tail)?}}cc void @"$s16class_resilience14callsAwaitableyx010resilient_A09BaseClassCyxGYalF"(ptr noalias nocapture %0, ptr swiftasync %1{{.*}}) +// CHECK-DIRECT: ptr @"$s15resilient_class9BaseClassC4waitxyYaFTjTu" +// CHECK-INDIRECT: [[LOAD:%[0-9]+]] = load ptr, ptr inttoptr (i64 and (i64 add (i64 ptrtoint (ptr @"\01__imp_$s15resilient_class9BaseClassC4waitxyYaFTjTu" to i64), i64 1), i64 -2) to ptr), align {{4|8}} +// CHECK-INDIRECT-NEXT: %14 = select i1 icmp eq (i64 and (i64 add (i64 ptrtoint (ptr @"\01__imp_$s15resilient_class9BaseClassC4waitxyYaFTjTu" to i64), i64 1), i64 1), i64 0), +// CHECK-INDIRECT-SAME: ptr inttoptr (i64 add (i64 ptrtoint (ptr @"\01__imp_$s15resilient_class9BaseClassC4waitxyYaFTjTu" to i64), i64 1) to ptr), +// CHECK-INDIRECT-SAME: ptr [[LOAD]] // CHECK: ret void public func callsAwaitable(_ c: BaseClass) async -> T { return await c.wait() } -// CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swift{{(tail)?}}cc void @"$s16class_resilience11MyBaseClassC4waitxyYaFTj"(%swift.opaque* noalias nocapture %0, %swift.context* swiftasync %1, %T16class_resilience11MyBaseClassC* swiftself %2) {{#([0-9]+)}} { +// CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swift{{(tail)?}}cc void @"$s16class_resilience11MyBaseClassC4waitxyYaFTj"(ptr noalias nocapture %0, ptr swiftasync %1, ptr swiftself %2) {{#([0-9]+)}} { class MyDerived : BaseClass { override func wait() async -> Int { diff --git a/test/IRGen/async/default_actor.swift b/test/IRGen/async/default_actor.swift index a145d7a6f4a1d..b38e33cb2a0d7 100644 --- a/test/IRGen/async/default_actor.swift +++ b/test/IRGen/async/default_actor.swift @@ -1,6 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -disable-availability-checking -enable-library-evolution %s | %IRGenFileCheck %s -// RUN: %target-swift-frontend -I %t -emit-ir -disable-availability-checking -enable-library-evolution %s +// RUN: %target-swift-frontend -I %t -emit-ir -disable-availability-checking -enable-library-evolution %s | %IRGenFileCheck %s // REQUIRES: concurrency // CHECK: @"$s13default_actor1ACMn" = hidden constant @@ -8,7 +7,7 @@ // 0x81810050: the same, but using a singleton metadata initialization // CHECK-SAME: i32 {{-2122317744|-2122252208}}, -// CHECK-LABEL: define hidden swiftcc void @"$s13default_actor1ACfD"(%T13default_actor1AC* swiftself %0) +// CHECK-LABEL: define hidden swiftcc void @"$s13default_actor1ACfD"(ptr swiftself %0) // CHECK-NOT: ret void // CHECK: call swiftcc void @swift_defaultActor_deallocate( // CHECK: ret void diff --git a/test/IRGen/async/partial_apply.sil b/test/IRGen/async/partial_apply.sil index 259377ed796ad..e298a19c41d4b 100644 --- a/test/IRGen/async/partial_apply.sil +++ b/test/IRGen/async/partial_apply.sil @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -g -emit-module -enable-library-evolution -emit-module-path=%t/resilient_struct.swiftmodule -module-name=resilient_struct %S/../../Inputs/resilient_struct.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -g -I %t -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -// RUN: %target-swift-frontend -g -I %t -emit-ir %s +// RUN: %target-swift-frontend -g -I %t -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize // REQUIRES: concurrency @@ -438,7 +437,7 @@ bb0(%0 : $*A2): //sil @capture_class : $@async @convention(thin) (@guaranteed A3) -> () // -//// CHECK LABEL: define{{.*}} swift{{(tail)?}}cc i8* @partial_apply_stack_in_coroutine(i8* {{.*}} %0, %T13partial_apply2A3C* %1) +//// CHECK LABEL: define{{.*}} swift{{(tail)?}}cc ptr @partial_apply_stack_in_coroutine(ptr {{.*}} %0, ptr %1) //sil @partial_apply_stack_in_coroutine : $@async @yield_once (@owned A3) -> () { //entry(%0: $A3): // %f = function_ref @capture_class : $@async @convention(thin) (@guaranteed A3) -> () @@ -607,7 +606,7 @@ entry(%0 : $EmptyType, %1: $*SomeType, %3: $FixedType): return %40 : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swift{{(tail)?}}cc { i8*, %swift.refcounted* } @create_pa_f2( +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swift{{(tail)?}}cc { ptr, ptr } @create_pa_f2( sil @create_pa_f2 : $@convention(thin) (@callee_guaranteed @async @convention(thick) (Int64, Int32) -> Int64, Int32) -> @owned @async @callee_guaranteed (Int64) -> Int64 { bb0(%thick : $@callee_guaranteed @async @convention(thick) (Int64, Int32) -> Int64 , %captured : $Int32): %pa_f = partial_apply [callee_guaranteed] %thick(%captured) : $@callee_guaranteed @async @convention(thick) (Int64, Int32) -> Int64 diff --git a/test/IRGen/async/protocol_resilience.swift b/test/IRGen/async/protocol_resilience.swift index 8b60cbaa1ff07..758533cf65ce8 100644 --- a/test/IRGen/async/protocol_resilience.swift +++ b/test/IRGen/async/protocol_resilience.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -disable-availability-checking -g -enable-library-evolution -emit-module-path=%t/resilient_protocol.swiftmodule -module-name=resilient_protocol %S/Inputs/resilient_protocol.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -disable-availability-checking -g -enable-library-evolution %s | %FileCheck -check-prefix CHECK -check-prefix CHECK-%target-cpu -check-prefix CHECK-%target-import-type %s -// RUN: %target-swift-frontend -I %t -emit-ir -disable-availability-checking -g -enable-library-evolution %s +// RUN: %target-swift-frontend -I %t -emit-ir -disable-availability-checking -g -enable-library-evolution %s | %FileCheck -check-prefix CHECK -check-prefix CHECK-%target-cpu -check-prefix CHECK-%target-import-type %s // REQUIRES: concurrency import resilient_protocol @@ -25,20 +24,20 @@ public protocol MyAwaitable { // CHECK-LABEL: @"$s19protocol_resilience11MyAwaitableP4wait6ResultQzyYaFTjTu" = {{(dllexport )?}}{{(protected )?}}global %swift.async_func_pointer // CHECK-LABEL: @"$s19protocol_resilience19ConformsToAwaitableVyxG010resilient_A00E0AAMc" = hidden constant -// CHECK-SAME: %swift.async_func_pointer* @"$s19protocol_resilience19ConformsToAwaitableVyxG010resilient_A00E0AaeFP4wait6ResultQzyYaFTWTu" - -// CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swift{{(tail)?}}cc void @"$s19protocol_resilience14callsAwaitabley6ResultQzxYa010resilient_A00D0RzlF"(%swift.opaque* noalias nocapture %0, %swift.context* swiftasync %1, %swift.opaque* noalias nocapture %2, %swift.type* %T, i8** %T.Awaitable) -// CHECK-DIRECT: %swift.async_func_pointer* @"$s18resilient_protocol9AwaitableP4wait6ResultQzyYaFTjTu" -// CHECK-INDIRECT: [[LOAD:%[0-9]+]] = load %swift.async_func_pointer*, %swift.async_func_pointer** inttoptr (i64 and (i64 add (i64 ptrtoint (%swift.async_func_pointer** @"\01__imp_$s18resilient_protocol9AwaitableP4wait6ResultQzyYaFTjTu" to i64), i64 1), i64 -2) to %swift.async_func_pointer**), align {{4|8}} -// CHECK-INDIRECT: select i1 icmp eq (i64 and (i64 add (i64 ptrtoint (%swift.async_func_pointer** @"\01__imp_$s18resilient_protocol9AwaitableP4wait6ResultQzyYaFTjTu" to i64), i64 1), i64 1), i64 0), -// CHECK-INDIRECT-SAME: %swift.async_func_pointer* inttoptr (i64 add (i64 ptrtoint (%swift.async_func_pointer** @"\01__imp_$s18resilient_protocol9AwaitableP4wait6ResultQzyYaFTjTu" to i64), i64 1) to %swift.async_func_pointer*), -// CHECK-INDIRECT-SAME: %swift.async_func_pointer* [[LOAD]] +// CHECK-SAME: ptr @"$s19protocol_resilience19ConformsToAwaitableVyxG010resilient_A00E0AaeFP4wait6ResultQzyYaFTWTu" + +// CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swift{{(tail)?}}cc void @"$s19protocol_resilience14callsAwaitabley6ResultQzxYa010resilient_A00D0RzlF"(ptr noalias nocapture %0, ptr swiftasync %1, ptr noalias nocapture %2, ptr %T, ptr %T.Awaitable) +// CHECK-DIRECT: ptr @"$s18resilient_protocol9AwaitableP4wait6ResultQzyYaFTjTu" +// CHECK-INDIRECT: [[LOAD:%[0-9]+]] = load ptr, ptr inttoptr (i64 and (i64 add (i64 ptrtoint (ptr @"\01__imp_$s18resilient_protocol9AwaitableP4wait6ResultQzyYaFTjTu" to i64), i64 1), i64 -2) to ptr), align {{4|8}} +// CHECK-INDIRECT: select i1 icmp eq (i64 and (i64 add (i64 ptrtoint (ptr @"\01__imp_$s18resilient_protocol9AwaitableP4wait6ResultQzyYaFTjTu" to i64), i64 1), i64 1), i64 0), +// CHECK-INDIRECT-SAME: ptr inttoptr (i64 add (i64 ptrtoint (ptr @"\01__imp_$s18resilient_protocol9AwaitableP4wait6ResultQzyYaFTjTu" to i64), i64 1) to ptr), +// CHECK-INDIRECT-SAME: ptr [[LOAD]] // CHECK: ret void public func callsAwaitable(_ t: T) async -> T.Result { return await t.wait() } -// CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swift{{(tail)?}}cc void @"$s19protocol_resilience11MyAwaitableP4wait6ResultQzyYaFTj"(%swift.opaque* noalias nocapture %0, %swift.context* swiftasync %1, %swift.opaque* noalias nocapture swiftself %2, %swift.type* %3, i8** %4) +// CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swift{{(tail)?}}cc void @"$s19protocol_resilience11MyAwaitableP4wait6ResultQzyYaFTj"(ptr noalias nocapture %0, ptr swiftasync %1, ptr noalias nocapture swiftself %2, ptr %3, ptr %4) struct ConformsToAwaitable : Awaitable { var value: T diff --git a/test/IRGen/async/run-call-dynamic-void_to_void.swift b/test/IRGen/async/run-call-dynamic-void_to_void.swift index 5a40eaf9f7eeb..1934849afa53c 100644 --- a/test/IRGen/async/run-call-dynamic-void_to_void.swift +++ b/test/IRGen/async/run-call-dynamic-void_to_void.swift @@ -1,6 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-build-swift %use_no_opaque_pointers -Xfrontend -disable-availability-checking -g %s -emit-ir -parse-as-library -module-name main | %FileCheck %s --check-prefix=CHECK-LL -// RUN: %target-build-swift -Xfrontend -disable-availability-checking -g %s -emit-ir -parse-as-library -module-name main +// RUN: %target-build-swift -Xfrontend -disable-availability-checking -g %s -emit-ir -parse-as-library -module-name main | %FileCheck %s --check-prefix=CHECK-LL // RUN: %target-build-swift -Xfrontend -disable-availability-checking -g %s -parse-as-library -module-name main -o %t/main %target-rpath(%t) // RUN: %target-codesign %t/main // RUN: %target-run %t/main | %FileCheck %s @@ -17,7 +16,7 @@ import _Concurrency // CHECK: running // CHECK-LL: @"$s4main3runyyY{{.*}}FTu" = hidden global %swift.async_func_pointer -// CHECK-LL: define {{.*}}hidden swift{{(tail)?}}cc void @"$s4main3runyyY{{.*}}F"(%swift.context* swiftasync {{%[0-9]+}}) {{#[0-9]*}} +// CHECK-LL: define {{.*}}hidden swift{{(tail)?}}cc void @"$s4main3runyyY{{.*}}F"(ptr swiftasync {{%[0-9]+}}) {{#[0-9]*}} // CHECK-LL: musttail call swifttailcc void dynamic func run() async { print("running") diff --git a/test/IRGen/async/run-call-resilient-classinstance-void-to-void.sil b/test/IRGen/async/run-call-resilient-classinstance-void-to-void.sil index efb619b48a409..aa703b6ffdfdc 100644 --- a/test/IRGen/async/run-call-resilient-classinstance-void-to-void.sil +++ b/test/IRGen/async/run-call-resilient-classinstance-void-to-void.sil @@ -3,8 +3,7 @@ // RUN: %target-codesign %t/%target-library-name(PrintShims) // RUN: %target-build-swift-dylib(%t/%target-library-name(ResilientClass)) %S/Inputs/class-1instance-void_to_void.swift -Xfrontend -disable-availability-checking -g -module-name ResilientClass -emit-module -emit-module-path %t/ResilientClass.swiftmodule // RUN: %target-codesign %t/%target-library-name(ResilientClass) -// RUN: %target-build-swift %use_no_opaque_pointers -Xfrontend -disable-availability-checking -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim -lResilientClass | %FileCheck %s --check-prefix=CHECK-LL -// RUN: %target-build-swift -Xfrontend -disable-availability-checking -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim -lResilientClass +// RUN: %target-build-swift -Xfrontend -disable-availability-checking -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim -lResilientClass | %FileCheck %s --check-prefix=CHECK-LL // RUN: %target-build-swift -Xfrontend -disable-availability-checking -g -parse-sil %s -module-name main -o %t/main -I %t -L %t -lPrintShims -lResilientClass %target-rpath(%t) // RUN: %target-codesign %t/main // RUN: %target-run %t/main %t/%target-library-name(PrintShims) %t/%target-library-name(ResilientClass) | %FileCheck %s @@ -24,7 +23,7 @@ import ResilientClass sil public_external [exact_self_class] @$s14ResilientClass5ClazzCACycfC : $@convention(method) (@thick Clazz.Type) -> @owned Clazz -// CHECK-LL: define{{( dllexport)?}}{{( protected)?}} swift{{(tail)?}}cc void @test_case(%swift.context* swiftasync {{%[0-9]+}}) {{#[0-9]*}} +// CHECK-LL: define{{( dllexport)?}}{{( protected)?}} swift{{(tail)?}}cc void @test_case(ptr swiftasync {{%[0-9]+}}) {{#[0-9]*}} sil @test_case : $@convention(thin) @async () -> () { %s_type = metatype $@thick Clazz.Type %allocating_init = function_ref @$s14ResilientClass5ClazzCACycfC : $@convention(method) (@thick Clazz.Type) -> @owned Clazz diff --git a/test/IRGen/async/run-call-struct_five_bools-to-void.sil b/test/IRGen/async/run-call-struct_five_bools-to-void.sil index 94597a91e4191..b56a69f4228e7 100644 --- a/test/IRGen/async/run-call-struct_five_bools-to-void.sil +++ b/test/IRGen/async/run-call-struct_five_bools-to-void.sil @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift-dylib(%t/%target-library-name(PrintShims)) %S/../../Inputs/print-shims.swift -module-name PrintShims -emit-module -emit-module-path %t/PrintShims.swiftmodule // RUN: %target-codesign %t/%target-library-name(PrintShims) -// RUN: %target-build-swift %use_no_opaque_pointers -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL -// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim +// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL // RUN: %target-build-swift -g -parse-sil %s -module-name main -o %t/main -I %t -L %t -lPrintShims %target-rpath(%t) // RUN: %target-codesign %t/main // RUN: %target-run %t/main %t/%target-library-name(PrintShims) | %FileCheck %s @@ -42,7 +41,7 @@ entry(%pack : $Pack): return %printGeneric_result1 : $() } -// CHECK-LL: define{{( dllexport)?}}{{( protected)?}} swift{{(tail)?}}cc void @test_case(%swift.context* swiftasync {{%[0-9]+}}) {{#[0-9]*}} +// CHECK-LL: define{{( dllexport)?}}{{( protected)?}} swift{{(tail)?}}cc void @test_case(ptr swiftasync {{%[0-9]+}}) {{#[0-9]*}} sil @test_case : $@async @convention(thin) () -> () { %a_literal = integer_literal $Builtin.Int1, -1 diff --git a/test/IRGen/async/run-call-void-throws-to-int-throwing.sil b/test/IRGen/async/run-call-void-throws-to-int-throwing.sil index 46eaf949de3bb..ad75da7af9919 100644 --- a/test/IRGen/async/run-call-void-throws-to-int-throwing.sil +++ b/test/IRGen/async/run-call-void-throws-to-int-throwing.sil @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift-dylib(%t/%target-library-name(PrintShims)) %S/../../Inputs/print-shims.swift -module-name PrintShims -emit-module -emit-module-path %t/PrintShims.swiftmodule // RUN: %target-codesign %t/%target-library-name(PrintShims) -// RUN: %target-build-swift %use_no_opaque_pointers -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL -// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim +// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL // RUN: %target-build-swift -g -parse-sil %s -module-name main -o %t/main -I %t -L %t -lPrintShims %target-rpath(%t) // RUN: %target-codesign %t/main // RUN: %target-run %t/main %t/%target-library-name(PrintShims) | %FileCheck %s @@ -102,7 +101,7 @@ bb5: } // CHECK-LL: @voidThrowsToIntTu = -// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidThrowsToInt(%swift.context* swiftasync {{%[0-9]+}}) {{#[0-9]*}} +// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidThrowsToInt(ptr swiftasync {{%[0-9]+}}) {{#[0-9]*}} sil hidden @voidThrowsToInt : $@async @convention(thin) () -> (Int, @error Error) { bb0: %e_type = metatype $@thin E.Type diff --git a/test/IRGen/async/run-call-void-throws-to-int-throwing_call-async-nothrow_call-sync-throw.sil b/test/IRGen/async/run-call-void-throws-to-int-throwing_call-async-nothrow_call-sync-throw.sil index 95976bfbaeff1..2408334f8f8be 100644 --- a/test/IRGen/async/run-call-void-throws-to-int-throwing_call-async-nothrow_call-sync-throw.sil +++ b/test/IRGen/async/run-call-void-throws-to-int-throwing_call-async-nothrow_call-sync-throw.sil @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift-dylib(%t/%target-library-name(PrintShims)) %S/../../Inputs/print-shims.swift -module-name PrintShims -emit-module -emit-module-path %t/PrintShims.swiftmodule // RUN: %target-codesign %t/%target-library-name(PrintShims) -// RUN: %target-build-swift %use_no_opaque_pointers -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL -// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim +// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL // RUN: %target-build-swift -g -parse-sil %s -module-name main -o %t/main -I %t -L %t -lPrintShims %target-rpath(%t) // RUN: %target-codesign %t/main // RUN: %target-run %t/main %t/%target-library-name(PrintShims) | %FileCheck %s @@ -101,7 +100,7 @@ bb5: } // CHECK-LL: @voidThrowsToIntTu = -// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidThrowsToInt(%swift.context* swiftasync {{%[0-9]+}}) {{#[0-9]*}} +// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidThrowsToInt(ptr swiftasync {{%[0-9]+}}) {{#[0-9]*}} sil hidden @voidThrowsToInt : $@async @convention(thin) () -> (Int64, @error Error) { entry: %asyncVoidThrowsToInt = function_ref @asyncVoidThrowsToInt : $@async @convention(thin) () -> (Int64, @error Error) diff --git a/test/IRGen/async/run-call-void-throws-to-int-throwing_call-async-throw.sil b/test/IRGen/async/run-call-void-throws-to-int-throwing_call-async-throw.sil index 022af8cdf0fbc..8eab0d60018da 100644 --- a/test/IRGen/async/run-call-void-throws-to-int-throwing_call-async-throw.sil +++ b/test/IRGen/async/run-call-void-throws-to-int-throwing_call-async-throw.sil @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift-dylib(%t/%target-library-name(PrintShims)) %S/../../Inputs/print-shims.swift -module-name PrintShims -emit-module -emit-module-path %t/PrintShims.swiftmodule // RUN: %target-codesign %t/%target-library-name(PrintShims) -// RUN: %target-build-swift %use_no_opaque_pointers -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL -// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim +// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL // RUN: %target-build-swift -g -parse-sil %s -module-name main -o %t/main -I %t -L %t -lPrintShims %target-rpath(%t) // RUN: %target-codesign %t/main // RUN: %target-run %t/main %t/%target-library-name(PrintShims) | %FileCheck %s @@ -102,7 +101,7 @@ bb5: } // CHECK-LL: @voidThrowsToIntTu = -// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidThrowsToInt(%swift.context* swiftasync {{%[0-9]+}}) {{#[0-9]*}} +// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidThrowsToInt(ptr swiftasync {{%[0-9]+}}) {{#[0-9]*}} sil hidden @voidThrowsToInt : $@async @convention(thin) () -> (Int, @error Error) { bb0: %asyncVoidThrowsToInt = function_ref @asyncVoidThrowsToInt : $@async @convention(thin) () -> (Int, @error Error) diff --git a/test/IRGen/async/run-call-void-throws-to-int-throwing_call-sync-nothrow_call-async-throw.sil b/test/IRGen/async/run-call-void-throws-to-int-throwing_call-sync-nothrow_call-async-throw.sil index 1f7c71236058e..1e5cb25cebfa6 100644 --- a/test/IRGen/async/run-call-void-throws-to-int-throwing_call-sync-nothrow_call-async-throw.sil +++ b/test/IRGen/async/run-call-void-throws-to-int-throwing_call-sync-nothrow_call-async-throw.sil @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift-dylib(%t/%target-library-name(PrintShims)) %S/../../Inputs/print-shims.swift -module-name PrintShims -emit-module -emit-module-path %t/PrintShims.swiftmodule // RUN: %target-codesign %t/%target-library-name(PrintShims) -// RUN: %target-build-swift %use_no_opaque_pointers -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL -// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim +// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL // RUN: %target-build-swift -g -parse-sil %s -module-name main -o %t/main -I %t -L %t -lPrintShims %target-rpath(%t) // RUN: %target-codesign %t/main // RUN: %target-run %t/main %t/%target-library-name(PrintShims) | %FileCheck %s @@ -102,7 +101,7 @@ bb5: } // CHECK-LL: @voidThrowsToIntTu = -// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidThrowsToInt(%swift.context* swiftasync {{%[0-9]+}}) {{#[0-9]*}} +// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidThrowsToInt(ptr swiftasync {{%[0-9]+}}) {{#[0-9]*}} sil hidden @voidThrowsToInt : $@async @convention(thin) () -> (Int64, @error Error) { entry: %syncVoidThrowsToInt = function_ref @syncVoidThrowsToInt : $@async @convention(thin) () -> (Int64, @error Error) diff --git a/test/IRGen/async/run-call-void-throws-to-int-throwing_call-sync-throw.sil b/test/IRGen/async/run-call-void-throws-to-int-throwing_call-sync-throw.sil index 3347508b46b29..a865ee65cdfd5 100644 --- a/test/IRGen/async/run-call-void-throws-to-int-throwing_call-sync-throw.sil +++ b/test/IRGen/async/run-call-void-throws-to-int-throwing_call-sync-throw.sil @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift-dylib(%t/%target-library-name(PrintShims)) %S/../../Inputs/print-shims.swift -module-name PrintShims -emit-module -emit-module-path %t/PrintShims.swiftmodule // RUN: %target-codesign %t/%target-library-name(PrintShims) -// RUN: %target-build-swift %use_no_opaque_pointers -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL -// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim +// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL // RUN: %target-build-swift -g -parse-sil %s -module-name main -o %t/main -I %t -L %t -lPrintShims %target-rpath(%t) // RUN: %target-codesign %t/main // RUN: %target-run %t/main %t/%target-library-name(PrintShims) | %FileCheck %s @@ -103,7 +102,7 @@ bb5: } // CHECK-LL: @voidThrowsToIntTu = -// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidThrowsToInt(%swift.context* swiftasync {{%[0-9]+}}) {{#[0-9]*}} +// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidThrowsToInt(ptr swiftasync {{%[0-9]+}}) {{#[0-9]*}} sil hidden @voidThrowsToInt : $@async @convention(thin) () -> (Int, @error Error) { bb0: %syncVoidThrowsToInt = function_ref @syncVoidThrowsToInt : $@async @convention(thin) () -> (Int, @error Error) diff --git a/test/IRGen/async/run-call-void-to-int64.swift b/test/IRGen/async/run-call-void-to-int64.swift index c40de03393a74..62330ce1bd228 100644 --- a/test/IRGen/async/run-call-void-to-int64.swift +++ b/test/IRGen/async/run-call-void-to-int64.swift @@ -1,6 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-build-swift %use_no_opaque_pointers -Xfrontend -disable-availability-checking -g %s -parse-as-library -module-name main -emit-ir | %FileCheck %s --check-prefix=CHECK-LL -// RUN: %target-build-swift -Xfrontend -disable-availability-checking -g %s -parse-as-library -module-name main -emit-ir +// RUN: %target-build-swift -Xfrontend -disable-availability-checking -g %s -parse-as-library -module-name main -emit-ir | %FileCheck %s --check-prefix=CHECK-LL // RUN: %target-build-swift -Xfrontend -disable-availability-checking -g %s -parse-as-library -module-name main -o %t/main // RUN: %target-codesign %t/main // RUN: %target-run %t/main | %FileCheck %s @@ -15,7 +14,7 @@ import Swift import _Concurrency // CHECK-LL: @voidToInt64Tu = -// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidToInt64(%swift.context* swiftasync {{%[0-9]+}}) {{#[0-9]*}} +// CHECK-LL: define hidden swift{{(tail)?}}cc void @voidToInt64(ptr swiftasync {{%[0-9]+}}) {{#[0-9]*}} @_silgen_name("voidToInt64") func voidToInt64() async -> Int64 { return 42 } diff --git a/test/IRGen/async/run-thintothick-int64-to-void.sil b/test/IRGen/async/run-thintothick-int64-to-void.sil index 343219def61af..a63d8821e7b43 100644 --- a/test/IRGen/async/run-thintothick-int64-to-void.sil +++ b/test/IRGen/async/run-thintothick-int64-to-void.sil @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift-dylib(%t/%target-library-name(PrintShims)) %S/../../Inputs/print-shims.swift -module-name PrintShims -emit-module -emit-module-path %t/PrintShims.swiftmodule // RUN: %target-codesign %t/%target-library-name(PrintShims) -// RUN: %target-build-swift %use_no_opaque_pointers -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL -// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim +// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim | %FileCheck %s --check-prefix=CHECK-LL // RUN: %target-build-swift -g -parse-sil %s -module-name main -o %t/main -I %t -L %t -lPrintShims %target-rpath(%t) // RUN: %target-codesign %t/main // RUN: %target-run %t/main %t/%target-library-name(PrintShims) | %FileCheck %s @@ -20,7 +19,7 @@ import _Concurrency sil public_external @printInt64 : $@convention(thin) (Int64) -> () -// CHECK-LL: define{{( dllexport)?}}{{( protected)?}} swift{{(tail)?}}cc void @afun2(%swift.context* swiftasync {{%[0-9]+}} +// CHECK-LL: define{{( dllexport)?}}{{( protected)?}} swift{{(tail)?}}cc void @afun2(ptr swiftasync {{%[0-9]+}} sil @afun2 : $@async @convention(thin) (Int64) -> () { entry(%int : $Int64): %print = function_ref @printInt64 : $@convention(thin) (Int64) -> () diff --git a/test/IRGen/async/unreachable.swift b/test/IRGen/async/unreachable.swift index ea1b14465298a..1502ca9cf6626 100644 --- a/test/IRGen/async/unreachable.swift +++ b/test/IRGen/async/unreachable.swift @@ -1,14 +1,13 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -g -emit-ir -disable-availability-checking -disable-llvm-optzns -disable-swift-specific-llvm-optzns | %FileCheck %s -// RUN: %target-swift-frontend -primary-file %s -g -emit-ir -disable-availability-checking -disable-llvm-optzns -disable-swift-specific-llvm-optzns +// RUN: %target-swift-frontend -primary-file %s -g -emit-ir -disable-availability-checking -disable-llvm-optzns -disable-swift-specific-llvm-optzns | %FileCheck %s // REQUIRES: concurrency -// CHECK: call i1 (i8*, i1, ...) @llvm.coro.end.async +// CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async func foo() async -> Never { await bar() fatalError() } -// CHECK: call i1 (i8*, i1, ...) @llvm.coro.end.async +// CHECK: call i1 (ptr, i1, ...) @llvm.coro.end.async func bar() async -> Never { await foo() fatalError() diff --git a/test/IRGen/async_dynamic_replacement.swift b/test/IRGen/async_dynamic_replacement.swift index 183c457525302..794df87c578f3 100644 --- a/test/IRGen/async_dynamic_replacement.swift +++ b/test/IRGen/async_dynamic_replacement.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers %s -emit-ir -disable-availability-checking -disable-objc-interop | %FileCheck %s -// RUN: %target-swift-frontend %s -emit-ir -disable-availability-checking -disable-objc-interop +// RUN: %target-swift-frontend %s -emit-ir -disable-availability-checking -disable-objc-interop | %FileCheck %s // REQUIRES: concurrency @@ -22,9 +21,9 @@ public func calls_number() async -> Int { await number() } -// CHECK-LABEL: define {{.*}}swifttailcc void @"$s25async_dynamic_replacement32indirectReturnDynamicReplaceableSi_S6ityYaKF"(<{ %TSi, %TSi, %TSi, %TSi, %TSi, %TSi, %TSi }>* {{.*}}%0, %swift.context* swiftasync %1) +// CHECK-LABEL: define {{.*}}swifttailcc void @"$s25async_dynamic_replacement32indirectReturnDynamicReplaceableSi_S6ityYaKF"(ptr {{.*}}%0, ptr swiftasync %1) // CHECK: forward_to_replaced: -// CHECK: musttail call swifttailcc void {{.*}}(<{ %TSi, %TSi, %TSi, %TSi, %TSi, %TSi, %TSi }>* noalias nocapture %0, %swift.context* swiftasync {{.*}}) +// CHECK: musttail call swifttailcc void {{.*}}(ptr noalias nocapture %0, ptr swiftasync {{.*}}) public dynamic func indirectReturnDynamicReplaceable() async throws -> (Int, Int, Int, Int, Int, Int, Int) { return (0, 0, 0, 0, 0, 0, 0) } diff --git a/test/IRGen/autolink-coff-x86.swift b/test/IRGen/autolink-coff-x86.swift index 53e1fcb3c20d7..28825a982d259 100644 --- a/test/IRGen/autolink-coff-x86.swift +++ b/test/IRGen/autolink-coff-x86.swift @@ -1,10 +1,8 @@ // RUN: %empty-directory(%t) // RUN: %swift -target x86_64--windows-gnu -parse-as-library -disable-legacy-type-info -parse-stdlib -emit-module-path %t/module.swiftmodule -module-name module -module-link-name module %s -// RUN: %swift %use_no_opaque_pointers -target x86_64--windows-gnu -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name autolink -I %t -D MAIN_MODULE -emit-ir -o - %s | %FileCheck %s -check-prefix CHECK-GNU-IR -// RUN: %swift %use_no_opaque_pointers -target x86_64--windows-gnu -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name autolink -I %t -D MAIN_MODULE -emit-ir -o - %s | %FileCheck %s -check-prefix CHECK-GNU-IR -// RUN: %swift -target x86_64--windows-gnu -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name autolink -I %t -D MAIN_MODULE -S -o - %s -// RUN: %swift -target x86_64--windows-gnu -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name autolink -I %t -D MAIN_MODULE -S -o - %s +// RUN: %swift -target x86_64--windows-gnu -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name autolink -I %t -D MAIN_MODULE -emit-ir -o - %s | %FileCheck %s -check-prefix CHECK-GNU-IR +// RUN: %swift -target x86_64--windows-gnu -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name autolink -I %t -D MAIN_MODULE -S -o - %s | %FileCheck %s -check-prefix CHECK-GNU-ASM // REQUIRES: CODEGENERATOR=X86 @@ -13,7 +11,7 @@ import module #endif // CHECK-GNU-IR: @_swift1_autolink_entries = private constant [9 x i8] c"-lmodule\00", section ".swift1_autolink_entries",{{.*}} align 8 -// CHECK-GNU-IR: @llvm.used = appending global [{{.*}} x i8*] [{{.*}}i8* getelementptr inbounds ([9 x i8], [9 x i8]* @_swift1_autolink_entries, i32 0, i32 0){{.*}}], section "llvm.metadata" +// CHECK-GNU-IR: @llvm.used = appending global [{{.*}} x ptr] [{{.*}}ptr @_swift1_autolink_entries{{.*}}], section "llvm.metadata" // CHECK-GNU-ASM: .section .swift1_autolink_entries{{.*}} // CHECK-GNU-ASM: .asciz "-lmodule" diff --git a/test/IRGen/autolink_elf.swift b/test/IRGen/autolink_elf.swift index afbfd0d9501b3..54331527822a3 100644 --- a/test/IRGen/autolink_elf.swift +++ b/test/IRGen/autolink_elf.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %swift -disable-legacy-type-info -target x86_64-unknown-linux-gnu -emit-module -parse-stdlib -o %t -module-name Empty -module-link-name swiftEmpty -public-autolink-library anotherLib %S/../Inputs/empty.swift -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target x86_64-unknown-linux-gnu %s -I %t -parse-stdlib -disable-objc-interop -module-name main -emit-ir -o - | %FileCheck %s -// RUN: %swift -disable-legacy-type-info -target x86_64-unknown-linux-gnu %s -I %t -parse-stdlib -disable-objc-interop -module-name main -emit-ir -o - +// RUN: %swift -disable-legacy-type-info -target x86_64-unknown-linux-gnu %s -I %t -parse-stdlib -disable-objc-interop -module-name main -emit-ir -o - | %FileCheck %s // REQUIRES: CODEGENERATOR=X86 @@ -11,5 +10,5 @@ import Empty // as used. // CHECK-DAG: @_swift1_autolink_entries = private constant [26 x i8] c"-lswiftEmpty\00-lanotherLib\00", section ".swift1_autolink_entries",{{.*}} align 8 -// CHECK-DAG: @llvm.compiler.used = appending global [{{.*}} x i8*] [{{.*}}i8* getelementptr inbounds ([26 x i8], [26 x i8]* @_swift1_autolink_entries, i32 0, i32 0){{.*}}], section "llvm.metadata" +// CHECK-DAG: @llvm.compiler.used = appending global [{{.*}} x ptr] [{{.*}}ptr @_swift1_autolink_entries{{.*}}], section "llvm.metadata" diff --git a/test/IRGen/autorelease.sil b/test/IRGen/autorelease.sil index ad583b560faf4..078f74250f663 100644 --- a/test/IRGen/autorelease.sil +++ b/test/IRGen/autorelease.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers %s -emit-ir | %FileCheck -check-prefix CHECK -check-prefix CHECK-%target-ptrsize -check-prefix %target-cpu -DINT=i%target-ptrsize %s -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %s -emit-ir +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %s -emit-ir | %FileCheck -check-prefix CHECK -check-prefix CHECK-%target-ptrsize -check-prefix %target-cpu -DINT=i%target-ptrsize %s // rdar://16565958 @@ -20,9 +19,9 @@ bb0(%0 : @owned $C?): } // CHECK: define{{( dllexport| protected)?}} swiftcc [[INT]] @foo([[INT]] %0) {{.*}} { -// CHECK: [[T0:%.*]] = inttoptr [[INT]] %0 to i8* -// CHECK-NEXT: [[T1:%.*]] = tail call i8* @llvm.objc.autoreleaseReturnValue(i8* [[T0]]) -// CHECK-NEXT: [[T2:%.*]] = ptrtoint i8* [[T1]] to [[INT]] +// CHECK: [[T0:%.*]] = inttoptr [[INT]] %0 to ptr +// CHECK-NEXT: [[T1:%.*]] = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr [[T0]]) +// CHECK-NEXT: [[T2:%.*]] = ptrtoint ptr [[T1]] to [[INT]] // CHECK-NEXT: ret [[INT]] [[T2]] sil [ossa] @bar : $@convention(thin) (@owned C?) -> @owned C? { @@ -34,63 +33,63 @@ bb0(%0 : @owned $C?): // x86_64: define{{( dllexport| protected)?}} swiftcc i64 @bar(i64 %0) // x86_64: [[T0:%.*]] = call swiftcc i64 @foo(i64 %0) -// x86_64-NEXT: [[T1:%.*]] = inttoptr i64 [[T0]] to i8* -// x86_64-NEXT: [[T2:%.*]] = notail call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[T1]]) -// x86_64-NEXT: [[T3:%.*]] = ptrtoint i8* [[T2]] to i64 +// x86_64-NEXT: [[T1:%.*]] = inttoptr i64 [[T0]] to ptr +// x86_64-NEXT: [[T2:%.*]] = notail call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr [[T1]]) +// x86_64-NEXT: [[T3:%.*]] = ptrtoint ptr [[T2]] to i64 // x86_64-NEXT: ret i64 [[T3]] // arm64: define{{( dllexport| protected)?}} swiftcc i64 @bar(i64 %0) // arm64: [[T0:%.*]] = call swiftcc i64 @foo(i64 %0) // arm64-NEXT: call void asm sideeffect "mov -// arm64-NEXT: [[T1:%.*]] = inttoptr i64 [[T0]] to i8* -// arm64-NEXT: [[T2:%.*]] = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[T1]]) -// arm64-NEXT: [[T3:%.*]] = ptrtoint i8* [[T2]] to i64 +// arm64-NEXT: [[T1:%.*]] = inttoptr i64 [[T0]] to ptr +// arm64-NEXT: [[T2:%.*]] = call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr [[T1]]) +// arm64-NEXT: [[T3:%.*]] = ptrtoint ptr [[T2]] to i64 // arm64-NEXT: ret i64 [[T3]] // arm64e: define{{( dllexport| protected)?}} swiftcc i64 @bar(i64 %0) // arm64e: [[T0:%.*]] = call swiftcc i64 @foo(i64 %0) // arm64e-NEXT: call void asm sideeffect "mov -// arm64e-NEXT: [[T1:%.*]] = inttoptr i64 [[T0]] to i8* -// arm64e-NEXT: [[T2:%.*]] = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[T1]]) -// arm64e-NEXT: [[T3:%.*]] = ptrtoint i8* [[T2]] to i64 +// arm64e-NEXT: [[T1:%.*]] = inttoptr i64 [[T0]] to ptr +// arm64e-NEXT: [[T2:%.*]] = call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr [[T1]]) +// arm64e-NEXT: [[T3:%.*]] = ptrtoint ptr [[T2]] to i64 // arm64e-NEXT: ret i64 [[T3]] // aarch64: define{{( dllexport| protected)?}} swiftcc i64 @bar(i64 %0) // aarch64: [[T0:%.*]] = call swiftcc i64 @foo(i64 %0) // aarch64-NEXT: call void asm sideeffect "mov -// aarch64-NEXT: [[T1:%.*]] = inttoptr i64 [[T0]] to i8* -// aarch64-NEXT: [[T2:%.*]] = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[T1]]) -// aarch64-NEXT: [[T3:%.*]] = ptrtoint i8* [[T2]] to i64 +// aarch64-NEXT: [[T1:%.*]] = inttoptr i64 [[T0]] to ptr +// aarch64-NEXT: [[T2:%.*]] = call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr [[T1]]) +// aarch64-NEXT: [[T3:%.*]] = ptrtoint ptr [[T2]] to i64 // aarch64-NEXT: ret i64 [[T3]] // i386: define{{( dllexport| protected)?}} swiftcc i32 @bar(i32 %0) // i386: [[T0:%.*]] = call swiftcc i32 @foo(i32 %0) -// i386-NEXT: [[T1:%.*]] = inttoptr i32 [[T0]] to i8* -// i386-NEXT: [[T2:%.*]] = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[T1]]) -// i386-NEXT: [[T3:%.*]] = ptrtoint i8* [[T2]] to i32 +// i386-NEXT: [[T1:%.*]] = inttoptr i32 [[T0]] to ptr +// i386-NEXT: [[T2:%.*]] = call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr [[T1]]) +// i386-NEXT: [[T3:%.*]] = ptrtoint ptr [[T2]] to i32 // i386-NEXT: ret i32 [[T3]] // armv7: define{{( dllexport| protected)?}} swiftcc i32 @bar(i32 %0) // armv7: [[T0:%.*]] = call swiftcc i32 @foo(i32 %0) // armv7-NEXT: call void asm sideeffect "mov -// armv7-NEXT: [[T1:%.*]] = inttoptr i32 [[T0]] to i8* -// armv7-NEXT: [[T2:%.*]] = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[T1]]) -// armv7-NEXT: [[T3:%.*]] = ptrtoint i8* [[T2]] to i32 +// armv7-NEXT: [[T1:%.*]] = inttoptr i32 [[T0]] to ptr +// armv7-NEXT: [[T2:%.*]] = call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr [[T1]]) +// armv7-NEXT: [[T3:%.*]] = ptrtoint ptr [[T2]] to i32 // armv7-NEXT: ret i32 [[T3]] // armv7s: define{{( dllexport| protected)?}} swiftcc i32 @bar(i32 %0) // armv7s: [[T0:%.*]] = call swiftcc i32 @foo(i32 %0) // armv7s-NEXT: call void asm sideeffect "mov -// armv7s-NEXT: [[T1:%.*]] = inttoptr i32 [[T0]] to i8* -// armv7s-NEXT: [[T2:%.*]] = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[T1]]) -// armv7s-NEXT: [[T3:%.*]] = ptrtoint i8* [[T2]] to i32 +// armv7s-NEXT: [[T1:%.*]] = inttoptr i32 [[T0]] to ptr +// armv7s-NEXT: [[T2:%.*]] = call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr [[T1]]) +// armv7s-NEXT: [[T3:%.*]] = ptrtoint ptr [[T2]] to i32 // armv7s-NEXT: ret i32 [[T3]] // armv7k: define{{( dllexport| protected)?}} swiftcc i32 @bar(i32 %0) // armv7k: [[T0:%.*]] = call swiftcc i32 @foo(i32 %0) // armv7k-NEXT: call void asm sideeffect "mov -// armv7k-NEXT: [[T1:%.*]] = inttoptr i32 [[T0]] to i8* -// armv7k-NEXT: [[T2:%.*]] = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[T1]]) -// armv7k-NEXT: [[T3:%.*]] = ptrtoint i8* [[T2]] to i32 +// armv7k-NEXT: [[T1:%.*]] = inttoptr i32 [[T0]] to ptr +// armv7k-NEXT: [[T2:%.*]] = call ptr @llvm.objc.retainAutoreleasedReturnValue(ptr [[T1]]) +// armv7k-NEXT: [[T3:%.*]] = ptrtoint ptr [[T2]] to i32 // armv7k-NEXT: ret i32 [[T3]] diff --git a/test/IRGen/big_types_corner_cases.swift b/test/IRGen/big_types_corner_cases.swift index 4b51e46b33409..825d9801b5dce 100644 --- a/test/IRGen/big_types_corner_cases.swift +++ b/test/IRGen/big_types_corner_cases.swift @@ -1,7 +1,6 @@ // XFAIL: CPU=powerpc64le // XFAIL: CPU=s390x -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-type-layout %s -emit-ir | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -// RUN: %target-swift-frontend -disable-type-layout %s -emit-ir +// RUN: %target-swift-frontend -disable-type-layout %s -emit-ir | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize // REQUIRES: optimized_stdlib // UNSUPPORTED: CPU=powerpc64le @@ -38,7 +37,7 @@ class OptionalInoutFuncType { } } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} i32 @main(i32 %0, i8** %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} i32 @main(i32 %0, ptr %1) // CHECK: call void @llvm.lifetime.start // CHECK: call void @llvm.memcpy // CHECK: call void @llvm.lifetime.end @@ -47,7 +46,7 @@ let bigStructGlobalArray : [BigStruct] = [ BigStruct() ] -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal swiftcc void @"$s22big_types_corner_cases21OptionalInoutFuncTypeC7executeyys5Error_pSgFyyXEfU_"(%T22big_types_corner_cases9BigStructVSg* nocapture dereferenceable({{.*}}) %0, %T22big_types_corner_cases21OptionalInoutFuncTypeC* %1, %T22big_types_corner_cases9BigStructVSgs5Error_pSgIegig_Sg* nocapture dereferenceable({{.*}}) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal swiftcc void @"$s22big_types_corner_cases21OptionalInoutFuncTypeC7executeyys5Error_pSgFyyXEfU_"(ptr nocapture dereferenceable({{.*}}) %0, ptr %1, ptr nocapture dereferenceable({{.*}}) // CHECK: call void @"$s22big_types_corner_cases9BigStructVSgs5Error_pSgIegig_SgWOe // CHECK: call void @"$s22big_types_corner_cases9BigStructVSgs5Error_pSgIegig_SgWOy // CHECK: ret void @@ -67,9 +66,9 @@ public func f3_uses_f2() { } // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases10f3_uses_f2yyF"() -// CHECK: call swiftcc void @"$s22big_types_corner_cases9BigStructVACycfC"(%T22big_types_corner_cases9BigStructV* noalias nocapture sret({{.*}}) -// CHECK: call swiftcc { i8*, %swift.refcounted* } @"$s22big_types_corner_cases13f2_returns_f1AA9BigStructVADcyF"() -// CHECK: call swiftcc void {{.*}}(%T22big_types_corner_cases9BigStructV* noalias nocapture sret({{.*}}) {{.*}}, %T22big_types_corner_cases9BigStructV* noalias nocapture dereferenceable({{.*}}) {{.*}}, %swift.refcounted* swiftself {{.*}}) +// CHECK: call swiftcc void @"$s22big_types_corner_cases9BigStructVACycfC"(ptr noalias nocapture sret({{.*}}) +// CHECK: call swiftcc { ptr, ptr } @"$s22big_types_corner_cases13f2_returns_f1AA9BigStructVADcyF"() +// CHECK: call swiftcc void {{.*}}(ptr noalias nocapture sret({{.*}}) {{.*}}, ptr noalias nocapture dereferenceable({{.*}}) {{.*}}, ptr swiftself {{.*}}) // CHECK: ret void public func f4_tuple_use_of_f2() { @@ -80,10 +79,9 @@ public func f4_tuple_use_of_f2() { } // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases18f4_tuple_use_of_f2yyF"() -// CHECK: [[TUPLE:%.*]] = call swiftcc { i8*, %swift.refcounted* } @"$s22big_types_corner_cases13f2_returns_f1AA9BigStructVADcyF"() -// CHECK: [[TUPLE_EXTRACT:%.*]] = extractvalue { i8*, %swift.refcounted* } [[TUPLE]], 0 -// CHECK: [[CAST_EXTRACT:%.*]] = bitcast i8* [[TUPLE_EXTRACT]] to void (%T22big_types_corner_cases9BigStructV*, %T22big_types_corner_cases9BigStructV*, %swift.refcounted*)* -// CHECK: call swiftcc void [[CAST_EXTRACT]](%T22big_types_corner_cases9BigStructV* noalias nocapture sret({{.*}}) {{.*}}, %T22big_types_corner_cases9BigStructV* noalias nocapture dereferenceable({{.*}}) {{.*}}, %swift.refcounted* swiftself %{{.*}}) +// CHECK: [[TUPLE:%.*]] = call swiftcc { ptr, ptr } @"$s22big_types_corner_cases13f2_returns_f1AA9BigStructVADcyF"() +// CHECK: [[TUPLE_EXTRACT:%.*]] = extractvalue { ptr, ptr } [[TUPLE]], 0 +// CHECK: call swiftcc void [[TUPLE_EXTRACT]](ptr noalias nocapture sret({{.*}}) {{.*}}, ptr noalias nocapture dereferenceable({{.*}}) {{.*}}, ptr swiftself %{{.*}}) // CHECK: ret void public class BigClass { @@ -97,9 +95,8 @@ public class BigClass { } } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} hidden swiftcc void @"$s22big_types_corner_cases8BigClassC03useE6Struct0aH0yAA0eH0V_tF"(%T22big_types_corner_cases9BigStructV* noalias nocapture dereferenceable({{.*}}) %0, %T22big_types_corner_cases8BigClassC* swiftself %1) -// CHECK: [[BITCAST:%.*]] = bitcast i8* {{.*}} to void (%T22big_types_corner_cases9BigStructV*, %swift.refcounted*)* -// CHECK: call swiftcc void [[BITCAST]](%T22big_types_corner_cases9BigStructV* noalias nocapture dereferenceable({{.*}}) %0, %swift.refcounted* swiftself +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} hidden swiftcc void @"$s22big_types_corner_cases8BigClassC03useE6Struct0aH0yAA0eH0V_tF"(ptr noalias nocapture dereferenceable({{.*}}) %0, ptr swiftself %1) +// CHECK: call swiftcc void {{.*}}(ptr noalias nocapture dereferenceable({{.*}}) %0, ptr swiftself // CHECK: ret void public struct MyStruct { @@ -118,7 +115,7 @@ class Foo { func myMethod(_ callback: (MyStruct, Int) -> Void) -> Void { } } -// CHECK-LABEL: define internal swiftcc void @"$s22big_types_corner_cases3FooC4blamyyFyyAA8MyStructV_SitXEcACcfu_yyAF_SitXEcfu0_"(i8* %0, %swift.opaque* %1, %T22big_types_corner_cases3FooC* %2) +// CHECK-LABEL: define internal swiftcc void @"$s22big_types_corner_cases3FooC4blamyyFyyAA8MyStructV_SitXEcACcfu_yyAF_SitXEcfu0_"(ptr %0, ptr %1, ptr %2) public enum LargeEnum { public enum InnerEnum { @@ -137,17 +134,17 @@ public func enumCallee(_ x: LargeEnum) { case .Empty2: break } } -// CHECK-64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases10enumCalleeyyAA9LargeEnumOF"(%T22big_types_corner_cases9LargeEnumO* noalias nocapture dereferenceable({{.*}}) %0) #0 { +// CHECK-64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases10enumCalleeyyAA9LargeEnumOF"(ptr noalias nocapture dereferenceable({{.*}}) %0) #0 { // CHECK-64: alloca %T22big_types_corner_cases9LargeEnumO05InnerF0O // CHECK-64: alloca %T22big_types_corner_cases9LargeEnumO // CHECK-64: $ss5print_9separator10terminatoryypd_S2StF // CHECK-64: ret void -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal swiftcc void @"$s22big_types_corner_cases8SuperSubC1fyyFAA9BigStructVycfU_"(%T22big_types_corner_cases9BigStructV* noalias nocapture sret({{.*}}) %0, %T22big_types_corner_cases8SuperSubC* %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal swiftcc void @"$s22big_types_corner_cases8SuperSubC1fyyFAA9BigStructVycfU_"(ptr noalias nocapture sret({{.*}}) %0, ptr %1) // CHECK-64: [[ALLOC1:%.*]] = alloca %T22big_types_corner_cases9BigStructV // CHECK-64: [[ALLOC2:%.*]] = alloca %T22big_types_corner_cases9BigStructV // CHECK-64: [[ALLOC3:%.*]] = alloca %T22big_types_corner_cases9BigStructVSg -// CHECK-64: call swiftcc void @"$s22big_types_corner_cases9SuperBaseC4boomAA9BigStructVyF"(%T22big_types_corner_cases9BigStructV* noalias nocapture sret({{.*}}) [[ALLOC1]], %T22big_types_corner_cases9SuperBaseC* swiftself {{.*}}) +// CHECK-64: call swiftcc void @"$s22big_types_corner_cases9SuperBaseC4boomAA9BigStructVyF"(ptr noalias nocapture sret({{.*}}) [[ALLOC1]], ptr swiftself {{.*}}) // CHECK: ret void class SuperBase { func boom() -> BigStruct { @@ -167,10 +164,10 @@ class SuperSub : SuperBase { } } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases10MUseStructV16superclassMirrorAA03BigF0VSgvg"(%T22big_types_corner_cases9BigStructVSg* noalias nocapture sret({{.*}}) %0, %T22big_types_corner_cases10MUseStructV* noalias nocapture swiftself dereferenceable({{.*}}) %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases10MUseStructV16superclassMirrorAA03BigF0VSgvg"(ptr noalias nocapture sret({{.*}}) %0, ptr noalias nocapture swiftself dereferenceable({{.*}}) %1) // CHECK: [[ALLOC:%.*]] = alloca %T22big_types_corner_cases9BigStructVSg -// CHECK: [[LOAD:%.*]] = load %swift.refcounted*, %swift.refcounted** %.callInternalLet.data -// CHECK: call swiftcc void %{{[0-9]+}}(%T22big_types_corner_cases9BigStructVSg* noalias nocapture sret({{.*}}) [[ALLOC]], %swift.refcounted* swiftself [[LOAD]]) +// CHECK: [[LOAD:%.*]] = load ptr, ptr %.callInternalLet.data +// CHECK: call swiftcc void %{{[0-9]+}}(ptr noalias nocapture sret({{.*}}) [[ALLOC]], ptr swiftself [[LOAD]]) // CHECK: ret void public struct MUseStruct { var x = BigStruct() @@ -181,8 +178,8 @@ public struct MUseStruct { internal let callInternalLet: () -> BigStruct? } -// CHECK-LABEL-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases18stringAndSubstringSS_s0G0VtyF"(<{ %TSS, %Ts9SubstringV }>* noalias nocapture sret({{.*}}) %0) #0 { -// CHECK-LABEL-32: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases18stringAndSubstringSS_s0G0VtyF"(<{ %TSS, [4 x i8], %Ts9SubstringV }>* noalias nocapture sret({{.*}}) %0) #0 { +// CHECK-LABEL-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases18stringAndSubstringSS_s0G0VtyF"(ptr noalias nocapture sret({{.*}}) %0) #0 { +// CHECK-LABEL-32: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases18stringAndSubstringSS_s0G0VtyF"(ptr noalias nocapture sret({{.*}}) %0) #0 { // CHECK: alloca %TSs // CHECK: alloca %TSs // CHECK: ret void @@ -202,10 +199,10 @@ public func testGetFunc() { let testGetPtr: @convention(thin) () -> BigStruct = bigStructGet } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} hidden swiftcc void @"$s22big_types_corner_cases7TestBigC4testyyF"(%T22big_types_corner_cases7TestBigC* swiftself %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} hidden swiftcc void @"$s22big_types_corner_cases7TestBigC4testyyF"(ptr swiftself %0) // CHECK: [[CALL1:%.*]] = call {{.*}} @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$sSayy22big_types_corner_cases9BigStructVcSgGMD" -// CHECK: [[CALL2:%.*]] = call i8** @"$sSayy22big_types_corner_cases9BigStructVcSgGSayxGSlsWl -// CHECK: call swiftcc void @"$sSlsE10firstIndex5where0B0QzSgSb7ElementQzKXE_tKF"(%swift.opaque* noalias nocapture sret({{.*}}) %{{[0-9]+}}, i8* bitcast ({{.*}}* @"$s22big_types_corner_cases7TestBig{{.*}}" to i8*), %swift.opaque* null, %swift.type* %{{[0-9]+}}, i8** [[CALL2]] +// CHECK: [[CALL2:%.*]] = call ptr @"$sSayy22big_types_corner_cases9BigStructVcSgGSayxGSlsWl +// CHECK: call swiftcc void @"$sSlsE10firstIndex5where0B0QzSgSb7ElementQzKXE_tKF"(ptr noalias nocapture sret({{.*}}) %{{[0-9]+}}, ptr @"$s22big_types_corner_cases7TestBig{{.*}}", ptr null, ptr %{{[0-9]+}}, ptr [[CALL2]] class TestBig { typealias Handler = (BigStruct) -> Void @@ -229,7 +226,7 @@ struct BigStructWithFunc { var foo: ((BigStruct) -> Void)? } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} hidden swiftcc void @"$s22big_types_corner_cases20UseBigStructWithFuncC5crashyyF"(%T22big_types_corner_cases20UseBigStructWithFuncC* swiftself %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} hidden swiftcc void @"$s22big_types_corner_cases20UseBigStructWithFuncC5crashyyF"(ptr swiftself %0) // CHECK: call swiftcc void @"$s22big_types_corner_cases20UseBigStructWithFuncC10callMethod // CHECK: ret void class UseBigStructWithFunc { @@ -289,8 +286,8 @@ public protocol QueryHandler: ProtoQueryHandler { public extension QueryHandler { -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_15queryyqd___tAA0E0Rd__lF"(%swift.opaque* noalias nocapture %0, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.QueryHandler, i8** {{.*}}.Query, %swift.opaque* noalias nocapture swiftself %1) -// CHECK: call swiftcc void {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}}) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_15queryyqd___tAA0E0Rd__lF"(ptr noalias nocapture %0, ptr{{.*}}, ptr{{.*}}, ptr {{.*}}.QueryHandler, ptr {{.*}}.Query, ptr noalias nocapture swiftself %1) +// CHECK: call swiftcc void {{.*}}(ptr noalias nocapture {{.*}}, ptr swiftself {{.*}}) // CHECK: ret void func forceHandle_1(query: Q) -> Void { guard let body = handle_1 as? (Q) -> Void else { @@ -299,9 +296,9 @@ public extension QueryHandler { body(query) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_25query8ReturnedQyd___AA9BigStructVSgtqd___tAA0E0Rd__lF"(%T22big_types_corner_cases9BigStructVSg* noalias nocapture sret({{.*}}) %0, %swift.opaque* noalias nocapture %1, %swift.opaque* noalias nocapture %2, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.QueryHandler, i8** {{.*}}.Query, %swift.opaque* noalias nocapture swiftself %3) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_25query8ReturnedQyd___AA9BigStructVSgtqd___tAA0E0Rd__lF"(ptr noalias nocapture sret({{.*}}) %0, ptr noalias nocapture %1, ptr noalias nocapture %2, ptr{{.*}}, ptr{{.*}}, ptr {{.*}}.QueryHandler, ptr {{.*}}.Query, ptr noalias nocapture swiftself %3) // CHECK: [[ALLOC:%.*]] = alloca %T22big_types_corner_cases9BigStructVSg -// CHECK: call swiftcc void {{.*}}(%T22big_types_corner_cases9BigStructVSg* noalias nocapture sret({{.*}}) [[ALLOC]], %swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}}) +// CHECK: call swiftcc void {{.*}}(ptr noalias nocapture sret({{.*}}) [[ALLOC]], ptr noalias nocapture {{.*}}, ptr noalias nocapture {{.*}}, ptr swiftself {{.*}}) // CHECK: ret void func forceHandle_2(query: Q) -> (Q.Returned, BigStruct?) { guard let body = handle_2 as? (Q) -> (Q.Returned, BigStruct?) else { @@ -310,12 +307,12 @@ public extension QueryHandler { return body(query) } -// CHECK-LABEL-64: define{{( dllexport)?}}{{( protected)?}} swiftcc { i64, i64 } @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_35query8ReturnedQyd___SbAA9BigStructVcSgtqd___tAA0E0Rd__lF"(%swift.opaque* noalias nocapture %0, %swift.opaque* noalias nocapture %1, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.QueryHandler, i8** {{.*}}.Query, %swift.opaque* noalias nocapture swiftself %2) -// CHECK-64: {{.*}} = call swiftcc { i64, i64 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}}) +// CHECK-LABEL-64: define{{( dllexport)?}}{{( protected)?}} swiftcc { i64, i64 } @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_35query8ReturnedQyd___SbAA9BigStructVcSgtqd___tAA0E0Rd__lF"(ptr noalias nocapture %0, ptr noalias nocapture %1, ptr{{.*}}, ptr{{.*}}, ptr {{.*}}.QueryHandler, ptr {{.*}}.Query, ptr noalias nocapture swiftself %2) +// CHECK-64: {{.*}} = call swiftcc { i64, i64 } {{.*}}(ptr noalias nocapture {{.*}}, ptr noalias nocapture {{.*}}, ptr swiftself {{.*}}) // CHECK-64: ret { i64, i64 } -// CHECK-LABEL-32: define{{( dllexport)?}}{{( protected)?}} swiftcc { i32, i32} @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_35query8ReturnedQyd___SbAA9BigStructVcSgtqd___tAA0E0Rd__lF"(%swift.opaque* noalias nocapture %0, %swift.opaque* noalias nocapture %1, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.QueryHandler, i8** {{.*}}.Query, %swift.opaque* noalias nocapture swiftself %2) -// CHECK-32: {{.*}} = call swiftcc { i32, i32 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}}) +// CHECK-LABEL-32: define{{( dllexport)?}}{{( protected)?}} swiftcc { i32, i32} @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_35query8ReturnedQyd___SbAA9BigStructVcSgtqd___tAA0E0Rd__lF"(ptr noalias nocapture %0, ptr noalias nocapture %1, ptr{{.*}}, ptr{{.*}}, ptr {{.*}}.QueryHandler, ptr {{.*}}.Query, ptr noalias nocapture swiftself %2) +// CHECK-32: {{.*}} = call swiftcc { i32, i32 } {{.*}}(ptr noalias nocapture {{.*}}, ptr noalias nocapture {{.*}}, ptr swiftself {{.*}}) // CHECK-32: ret { i32, i32 } func forceHandle_3(query: Q) -> (Q.Returned, Filter?) { guard let body = handle_3 as? (Q) -> (Q.Returned, Filter?) else { @@ -324,12 +321,12 @@ public extension QueryHandler { return body(query) } -// CHECK-LABEL-64: define{{( dllexport)?}}{{( protected)?}} swiftcc { i64, i64 } @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_45query8ReturnedQyd___SbAA9BigStructVcSgtqd___tKAA0E0Rd__lF"(%swift.opaque* noalias nocapture %0, %swift.opaque* noalias nocapture %1, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.QueryHandler, i8** {{.*}}.Query, %swift.opaque* noalias nocapture swiftself %2, %swift.error** swifterror %3) -// CHECK-64: {{.*}} = call swiftcc { i64, i64 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}}, %swift.error** noalias nocapture swifterror {{.*}}) +// CHECK-LABEL-64: define{{( dllexport)?}}{{( protected)?}} swiftcc { i64, i64 } @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_45query8ReturnedQyd___SbAA9BigStructVcSgtqd___tKAA0E0Rd__lF"(ptr noalias nocapture %0, ptr noalias nocapture %1, ptr{{.*}}, ptr{{.*}}, ptr {{.*}}.QueryHandler, ptr {{.*}}.Query, ptr noalias nocapture swiftself %2, ptr swifterror %3) +// CHECK-64: {{.*}} = call swiftcc { i64, i64 } {{.*}}(ptr noalias nocapture {{.*}}, ptr noalias nocapture {{.*}}, ptr swiftself {{.*}}, ptr noalias nocapture swifterror {{.*}}) // CHECK-64: ret { i64, i64 } -// CHECK-LABEL-32: define{{( dllexport)?}}{{( protected)?}} swiftcc { i32, i32} @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_45query8ReturnedQyd___SbAA9BigStructVcSgtqd___tKAA0E0Rd__lF"(%swift.opaque* noalias nocapture %0, %swift.opaque* noalias nocapture %1, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.QueryHandler, i8** {{.*}}.Query, %swift.opaque* noalias nocapture swiftself %2, %swift.error** swifterror %3) -// CHECK-32: {{.*}} = call swiftcc { i32, i32 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}}, %swift.error** noalias nocapture {{.*}}) +// CHECK-LABEL-32: define{{( dllexport)?}}{{( protected)?}} swiftcc { i32, i32} @"$s22big_types_corner_cases12QueryHandlerPAAE13forceHandle_45query8ReturnedQyd___SbAA9BigStructVcSgtqd___tKAA0E0Rd__lF"(ptr noalias nocapture %0, ptr noalias nocapture %1, ptr{{.*}}, ptr{{.*}}, ptr {{.*}}.QueryHandler, ptr {{.*}}.Query, ptr noalias nocapture swiftself %2, ptr swifterror %3) +// CHECK-32: {{.*}} = call swiftcc { i32, i32 } {{.*}}(ptr noalias nocapture {{.*}}, ptr noalias nocapture {{.*}}, ptr swiftself {{.*}}, ptr noalias nocapture {{.*}}) // CHECK-32: ret { i32, i32 } func forceHandle_4(query: Q) throws -> (Q.Returned, Filter?) { guard let body = handle_4 as? (Q) throws -> (Q.Returned, Filter?) else { diff --git a/test/IRGen/big_types_corner_cases_as_library.swift b/test/IRGen/big_types_corner_cases_as_library.swift index 1c361e5fccede..4d24122d201ce 100644 --- a/test/IRGen/big_types_corner_cases_as_library.swift +++ b/test/IRGen/big_types_corner_cases_as_library.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-type-layout %s -emit-ir -parse-as-library | %FileCheck %s -// RUN: %target-swift-frontend -disable-type-layout %s -emit-ir -parse-as-library +// RUN: %target-swift-frontend -disable-type-layout %s -emit-ir -parse-as-library | %FileCheck %s public struct BigStruct { var i0 : Int32 = 0 @@ -13,9 +12,8 @@ public struct BigStruct { var i8 : Int32 = 8 } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal %swift.opaque* @"$s33big_types_corner_cases_as_library9BigStructVwCP" -// CHECK: [[RETVAL:%.*]] = bitcast %T33big_types_corner_cases_as_library9BigStructV* {{.*}} to %swift.opaque* -// CHECK: ret %swift.opaque* [[RETVAL]] +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal ptr @"$s33big_types_corner_cases_as_library9BigStructVwCP" +// CHECK: ret ptr {{.*}} let bigStructGlobalArray : [BigStruct] = [ BigStruct() ] diff --git a/test/IRGen/big_types_corner_cases_tiny.swift b/test/IRGen/big_types_corner_cases_tiny.swift index 1126e3d075bb4..3907e86260804 100644 --- a/test/IRGen/big_types_corner_cases_tiny.swift +++ b/test/IRGen/big_types_corner_cases_tiny.swift @@ -1,12 +1,11 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s %S/big_types_corner_cases.swift -emit-ir | %FileCheck %s --check-prefix=CHECK -// RUN: %target-swift-frontend -primary-file %s %S/big_types_corner_cases.swift -emit-ir +// RUN: %target-swift-frontend -primary-file %s %S/big_types_corner_cases.swift -emit-ir | %FileCheck %s --check-prefix=CHECK // REQUIRES: optimized_stdlib // DO NOT ADD ANY MORE CODE TO THIS FILE! // CHECK-LABEL: define internal void @{{.*}}WZ // CHECK: [[ALLOC:%.*]] = alloca %T27big_types_corner_cases_tiny30LoadableStructWithBiggerStringV -// CHECK: call swiftcc void {{.*}}(%T27big_types_corner_cases_tiny30LoadableStructWithBiggerStringV* noalias nocapture sret({{.*}}) [[ALLOC]] +// CHECK: call swiftcc void {{.*}}(ptr noalias nocapture sret({{.*}}) [[ALLOC]] let model = ClassWithLoadableStructWithBiggerString().f() diff --git a/test/IRGen/builtin_isConcrete.sil b/test/IRGen/builtin_isConcrete.sil index b7d5174f933d5..55279b8e6d5cd 100644 --- a/test/IRGen/builtin_isConcrete.sil +++ b/test/IRGen/builtin_isConcrete.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -parse-sil %s -module-name Swift -parse-stdlib | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir -parse-sil %s -module-name Swift -parse-stdlib +// RUN: %target-swift-frontend -emit-ir -parse-sil %s -module-name Swift -parse-stdlib | %FileCheck %s import Builtin @@ -17,7 +16,7 @@ bb0(%0 : $@thin MyInt.Type): return %1 : $Builtin.Int1 } -// CHECK-LABEL: define{{( protected| dllexport)?}} swiftcc i1 @isConcrete_false(%swift.type* %T) {{.*}} { +// CHECK-LABEL: define{{( protected| dllexport)?}} swiftcc i1 @isConcrete_false(ptr %T) {{.*}} { // CHECK-NEXT: entry: // CHECK: ret i1 false // CHECK-NEXT: } diff --git a/test/IRGen/c_function_pointer.sil b/test/IRGen/c_function_pointer.sil index 72bca03b11561..8341d949849c5 100644 --- a/test/IRGen/c_function_pointer.sil +++ b/test/IRGen/c_function_pointer.sil @@ -1,15 +1,14 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -emit-ir %s +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize import Swift -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} void @c_native_function_pointer(void ()* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} void @c_native_function_pointer(ptr %0) sil @c_native_function_pointer : $@convention(c) (@convention(c) () -> ()) -> () { entry(%f : $@convention(c) () -> ()): return undef : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @call_with_native_c_function_pointer(i8* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @call_with_native_c_function_pointer(ptr %0) sil @call_with_native_c_function_pointer : $@convention(thin) (@convention(c) () -> ()) -> () { entry(%f : $@convention(c) () -> ()): %c = function_ref @c_native_function_pointer : $@convention(c) (@convention(c) () -> ()) -> () diff --git a/test/IRGen/class_constraint.sil b/test/IRGen/class_constraint.sil index 698c542b9635b..3a7ddb28824bc 100644 --- a/test/IRGen/class_constraint.sil +++ b/test/IRGen/class_constraint.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -primary-file %s | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir -primary-file %s +// RUN: %target-swift-frontend -emit-ir -primary-file %s | %FileCheck %s protocol P {} class A : P {} @@ -23,5 +22,5 @@ bb0(%0 : $T): %3 = tuple () return %3 : $() } -// CHECK: define {{.*}}void @foo(%T16class_constraint1AC* %0, %swift.type* %T) -// CHECK: store i8** @"$s16class_constraint1ACAA1PAAWP", +// CHECK: define {{.*}}void @foo(ptr %0, ptr %T) +// CHECK: store ptr @"$s16class_constraint1ACAA1PAAWP", diff --git a/test/IRGen/class_resilience.swift b/test/IRGen/class_resilience.swift index d2cf6578fb44a..460ad4a08c986 100644 --- a/test/IRGen/class_resilience.swift +++ b/test/IRGen/class_resilience.swift @@ -3,10 +3,8 @@ // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_struct.swiftmodule -module-name=resilient_struct %S/../Inputs/resilient_struct.swift // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_enum.swiftmodule -module-name=resilient_enum -I %t %S/../Inputs/resilient_enum.swift // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_class.swiftmodule -module-name=resilient_class -I %t %S/../Inputs/resilient_class.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -enable-objc-interop -I %t -emit-ir -enable-library-evolution %t/class_resilience.swift | %FileCheck %t/class_resilience.swift --check-prefixes=CHECK,CHECK-objc,CHECK-objc%target-ptrsize,CHECK-%target-ptrsize,CHECK-%target-cpu,CHECK-%target-import-type-objc-STABLE-ABI-%target-mandates-stable-abi,CHECK-%target-sdk-name -DINT=i%target-ptrsize -D#MDWORDS=7 -D#MDSIZE32=52 -D#MDSIZE64=80 -D#WORDSIZE=%target-alignment -// RUN: %target-swift-frontend -enable-objc-interop -I %t -emit-ir -enable-library-evolution %t/class_resilience.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-objc-interop -I %t -emit-ir -enable-library-evolution %t/class_resilience.swift | %FileCheck %t/class_resilience.swift --check-prefixes=CHECK,CHECK-native,CHECK-native%target-ptrsize,CHECK-%target-ptrsize,CHECK-%target-cpu,CHECK-native-STABLE-ABI-%target-mandates-stable-abi,CHECK-%target-sdk-name -DINT=i%target-ptrsize -D#MDWORDS=4 -D#MDSIZE32=40 -D#MDSIZE64=56 -D#WORDSIZE=%target-alignment -// RUN: %target-swift-frontend -disable-objc-interop -I %t -emit-ir -enable-library-evolution %t/class_resilience.swift +// RUN: %target-swift-frontend -enable-objc-interop -I %t -emit-ir -enable-library-evolution %t/class_resilience.swift | %FileCheck %t/class_resilience.swift --check-prefixes=CHECK,CHECK-objc,CHECK-objc%target-ptrsize,CHECK-%target-ptrsize,CHECK-%target-cpu,CHECK-%target-import-type-objc-STABLE-ABI-%target-mandates-stable-abi,CHECK-%target-sdk-name -DINT=i%target-ptrsize -D#MDWORDS=7 -D#MDSIZE32=52 -D#MDSIZE64=80 -D#WORDSIZE=%target-alignment +// RUN: %target-swift-frontend -disable-objc-interop -I %t -emit-ir -enable-library-evolution %t/class_resilience.swift | %FileCheck %t/class_resilience.swift --check-prefixes=CHECK,CHECK-native,CHECK-native%target-ptrsize,CHECK-%target-ptrsize,CHECK-%target-cpu,CHECK-native-STABLE-ABI-%target-mandates-stable-abi,CHECK-%target-sdk-name -DINT=i%target-ptrsize -D#MDWORDS=4 -D#MDSIZE32=40 -D#MDSIZE64=56 -D#WORDSIZE=%target-alignment // RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution -O %t/class_resilience.swift // CHECK: @"$s16class_resilience26ClassWithResilientPropertyC1s16resilient_struct4SizeVvpWvd" = hidden global [[INT]] 0 @@ -47,7 +45,7 @@ // -- parent: // CHECK-SAME: @"$s16class_resilienceMXM" // -- name: -// CHECK-SAME: [15 x i8]* [[RESILIENTCHILD_NAME]] +// CHECK-SAME: ptr [[RESILIENTCHILD_NAME]] // -- metadata accessor function: // CHECK-SAME: @"$s16class_resilience14ResilientChildCMa" // -- field descriptor: @@ -286,131 +284,115 @@ public class ClassWithResilientThenEmpty { // ClassWithResilientProperty.color getter -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s16class_resilience26ClassWithResilientPropertyC5colors5Int32Vvg"(%T16class_resilience26ClassWithResilientPropertyC* swiftself %0) -// CHECK: [[OFFSET:%.*]] = load [[INT]], [[INT]]* @"$s16class_resilience26ClassWithResilientPropertyC5colors5Int32VvpWvd" -// CHECK-NEXT: [[PTR:%.*]] = bitcast %T16class_resilience26ClassWithResilientPropertyC* %0 to i8* -// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, i8* [[PTR]], [[INT]] [[OFFSET]] -// CHECK-NEXT: [[FIELD_PTR:%.*]] = bitcast i8* [[FIELD_ADDR]] to %Ts5Int32V* -// CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_PTR]], i32 0, i32 0 -// CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, i32* [[FIELD_PAYLOAD]] +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s16class_resilience26ClassWithResilientPropertyC5colors5Int32Vvg"(ptr swiftself %0) +// CHECK: [[OFFSET:%.*]] = load [[INT]], ptr @"$s16class_resilience26ClassWithResilientPropertyC5colors5Int32VvpWvd" +// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[OFFSET]] +// CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[FIELD_ADDR]], i32 0, i32 0 +// CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, ptr [[FIELD_PAYLOAD]] // CHECK: ret i32 [[FIELD_VALUE]] // ClassWithResilientlySizedProperty.color getter -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s16class_resilience33ClassWithResilientlySizedPropertyC5colors5Int32Vvg"(%T16class_resilience33ClassWithResilientlySizedPropertyC* swiftself %0) -// CHECK: [[OFFSET:%.*]] = load [[INT]], [[INT]]* @"$s16class_resilience33ClassWithResilientlySizedPropertyC5colors5Int32VvpWvd" -// CHECK-NEXT: [[PTR:%.*]] = bitcast %T16class_resilience33ClassWithResilientlySizedPropertyC* %0 to i8* -// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, i8* [[PTR]], [[INT]] [[OFFSET]] -// CHECK-NEXT: [[FIELD_PTR:%.*]] = bitcast i8* [[FIELD_ADDR]] to %Ts5Int32V* -// CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_PTR]], i32 0, i32 0 -// CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, i32* [[FIELD_PAYLOAD]] +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s16class_resilience33ClassWithResilientlySizedPropertyC5colors5Int32Vvg"(ptr swiftself %0) +// CHECK: [[OFFSET:%.*]] = load [[INT]], ptr @"$s16class_resilience33ClassWithResilientlySizedPropertyC5colors5Int32VvpWvd" +// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[OFFSET]] +// CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[FIELD_ADDR]], i32 0, i32 0 +// CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, ptr [[FIELD_PAYLOAD]] // CHECK: ret i32 [[FIELD_VALUE]] // ClassWithIndirectResilientEnum.color getter -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s16class_resilience30ClassWithIndirectResilientEnumC5colors5Int32Vvg"(%T16class_resilience30ClassWithIndirectResilientEnumC* swiftself %0) -// CHECK: [[FIELD_PTR:%.*]] = getelementptr inbounds %T16class_resilience30ClassWithIndirectResilientEnumC, %T16class_resilience30ClassWithIndirectResilientEnumC* %0, i32 0, i32 2 -// CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_PTR]], i32 0, i32 0 -// CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, i32* [[FIELD_PAYLOAD]] +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s16class_resilience30ClassWithIndirectResilientEnumC5colors5Int32Vvg"(ptr swiftself %0) +// CHECK: [[FIELD_PTR:%.*]] = getelementptr inbounds %T16class_resilience30ClassWithIndirectResilientEnumC, ptr %0, i32 0, i32 2 +// CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[FIELD_PTR]], i32 0, i32 0 +// CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, ptr [[FIELD_PAYLOAD]] // CHECK: ret i32 [[FIELD_VALUE]] // ResilientChild.field getter -// CHECK-LABEL: define hidden swiftcc i32 @"$s16class_resilience14ResilientChildC5fields5Int32Vvg"(%T16class_resilience14ResilientChildC* swiftself %0) -// CHECK: [[OFFSET:%.*]] = load [[INT]], [[INT]]* @"$s16class_resilience14ResilientChildC5fields5Int32VvpWvd" -// CHECK-NEXT: [[PTR:%.*]] = bitcast %T16class_resilience14ResilientChildC* %0 to i8* -// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, i8* [[PTR]], [[INT]] [[OFFSET]] -// CHECK-NEXT: [[FIELD_PTR:%.*]] = bitcast i8* [[FIELD_ADDR]] to %Ts5Int32V* +// CHECK-LABEL: define hidden swiftcc i32 @"$s16class_resilience14ResilientChildC5fields5Int32Vvg"(ptr swiftself %0) +// CHECK: [[OFFSET:%.*]] = load [[INT]], ptr @"$s16class_resilience14ResilientChildC5fields5Int32VvpWvd" +// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[OFFSET]] // CHECK: call void @swift_beginAccess -// CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_PTR]], i32 0, i32 0 -// CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, i32* [[FIELD_PAYLOAD]] +// CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[FIELD_ADDR]], i32 0, i32 0 +// CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, ptr [[FIELD_PAYLOAD]] // CHECK-NEXT: call void @swift_endAccess // CHECK: ret i32 [[FIELD_VALUE]] // ResilientGenericChild.field getter -// CHECK-LABEL: define hidden swiftcc i32 @"$s16class_resilience21ResilientGenericChildC5fields5Int32Vvg"(%T16class_resilience21ResilientGenericChildC* swiftself %0) +// CHECK-LABEL: define hidden swiftcc i32 @"$s16class_resilience21ResilientGenericChildC5fields5Int32Vvg"(ptr swiftself %0) // FIXME: we could eliminate the unnecessary isa load by lazily emitting // metadata sources in EmitPolymorphicParameters -// CHECK: load %swift.type* +// CHECK: load ptr -// CHECK: [[ADDR:%.*]] = bitcast %T16class_resilience21ResilientGenericChildC* %0 to %swift.type** -// CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ADDR]] -// CHECK-NEXT: [[BASE:%.*]] = load [[INT]], [[INT]]* getelementptr inbounds ([[BOUNDS]], [[BOUNDS]]* @"$s16class_resilience21ResilientGenericChildCMo", i32 0, i32 0) +// CHECK: [[ISA:%.*]] = load ptr, ptr %0 +// CHECK-NEXT: [[BASE:%.*]] = load [[INT]], ptr @"$s16class_resilience21ResilientGenericChildCMo" // CHECK-NEXT: [[METADATA_OFFSET:%.*]] = add [[INT]] [[BASE]], {{4|8}} -// CHECK-NEXT: [[ISA_ADDR:%.*]] = bitcast %swift.type* [[ISA]] to i8* -// CHECK-NEXT: [[FIELD_OFFSET_TMP:%.*]] = getelementptr inbounds i8, i8* [[ISA_ADDR]], [[INT]] [[METADATA_OFFSET]] -// CHECK-NEXT: [[FIELD_OFFSET_ADDR:%.*]] = bitcast i8* [[FIELD_OFFSET_TMP]] to [[INT]]* -// CHECK-NEXT: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* [[FIELD_OFFSET_ADDR:%.*]] -// CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T16class_resilience21ResilientGenericChildC* %0 to i8* -// CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, i8* [[OBJECT]], [[INT]] [[FIELD_OFFSET]] -// CHECK-NEXT: [[FIELD_ADDR:%.*]] = bitcast i8* [[ADDR]] to %Ts5Int32V* +// CHECK-NEXT: [[FIELD_OFFSET_TMP:%.*]] = getelementptr inbounds i8, ptr [[ISA]], [[INT]] [[METADATA_OFFSET]] +// CHECK-NEXT: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr [[FIELD_OFFSET_ADDR:%.*]] +// CHECK-NEXT: [[ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[FIELD_OFFSET]] // CHECK: call void @swift_beginAccess -// CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_ADDR]], i32 0, i32 0 -// CHECK-NEXT: [[RESULT:%.*]] = load i32, i32* [[PAYLOAD_ADDR]] +// CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[ADDR]], i32 0, i32 0 +// CHECK-NEXT: [[RESULT:%.*]] = load i32, ptr [[PAYLOAD_ADDR]] // CHECK-NEXT: call void @swift_endAccess // CHECK: ret i32 [[RESULT]] // MyResilientChild.field getter -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s16class_resilience16MyResilientChildC5fields5Int32Vvg"(%T16class_resilience16MyResilientChildC* swiftself %0) -// CHECK: [[FIELD_ADDR:%.*]] = getelementptr inbounds %T16class_resilience16MyResilientChildC, %T16class_resilience16MyResilientChildC* %0, i32 0, i32 2 -// CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_ADDR]], i32 0, i32 0 -// CHECK-NEXT: [[RESULT:%.*]] = load i32, i32* [[PAYLOAD_ADDR]] +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s16class_resilience16MyResilientChildC5fields5Int32Vvg"(ptr swiftself %0) +// CHECK: [[FIELD_ADDR:%.*]] = getelementptr inbounds %T16class_resilience16MyResilientChildC, ptr %0, i32 0, i32 2 +// CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, ptr [[FIELD_ADDR]], i32 0, i32 0 +// CHECK-NEXT: [[RESULT:%.*]] = load i32, ptr [[PAYLOAD_ADDR]] // CHECK: ret i32 [[RESULT]] // ResilientGenericOutsideParent.genericExtensionMethod() -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %swift.type* @"$s15resilient_class29ResilientGenericOutsideParentC0B11_resilienceE22genericExtensionMethodxmyF"(%T15resilient_class29ResilientGenericOutsideParentC* swiftself %0) {{.*}} { -// CHECK: [[ISA_ADDR:%.*]] = bitcast %T15resilient_class29ResilientGenericOutsideParentC* %0 to %swift.type** -// CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] -// CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* getelementptr inbounds ([[BOUNDS]], [[BOUNDS]]* @"$s15resilient_class29ResilientGenericOutsideParentCMo", i32 0, i32 0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @"$s15resilient_class29ResilientGenericOutsideParentC0B11_resilienceE22genericExtensionMethodxmyF"(ptr swiftself %0) {{.*}} { +// CHECK: [[ISA:%.*]] = load ptr, ptr %0 +// CHECK: [[BASE:%.*]] = load [[INT]], ptr @"$s15resilient_class29ResilientGenericOutsideParentCMo" // CHECK-NEXT: [[GENERIC_PARAM_OFFSET:%.*]] = add [[INT]] [[BASE]], 0 -// CHECK-NEXT: [[ISA_TMP:%.*]] = bitcast %swift.type* [[ISA]] to i8* -// CHECK-NEXT: [[GENERIC_PARAM_TMP:%.*]] = getelementptr inbounds i8, i8* [[ISA_TMP]], [[INT]] [[GENERIC_PARAM_OFFSET]] -// CHECK-NEXT: [[GENERIC_PARAM_ADDR:%.*]] = bitcast i8* [[GENERIC_PARAM_TMP]] to %swift.type** -// CHECK-NEXT: [[GENERIC_PARAM:%.*]] = load %swift.type*, %swift.type** [[GENERIC_PARAM_ADDR]] -// CHECK: ret %swift.type* [[GENERIC_PARAM]] +// CHECK-NEXT: [[GENERIC_PARAM_TMP:%.*]] = getelementptr inbounds i8, ptr [[ISA]], [[INT]] [[GENERIC_PARAM_OFFSET]] +// CHECK-NEXT: [[GENERIC_PARAM:%.*]] = load ptr, ptr [[GENERIC_PARAM_TMP]] +// CHECK: ret ptr [[GENERIC_PARAM]] // ClassWithResilientProperty metadata accessor // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %swift.metadata_response @"$s16class_resilience26ClassWithResilientPropertyCMa"( -// CHECK: [[CACHE:%.*]] = load %swift.type*, %swift.type** getelementptr inbounds ({ %swift.type*, i8* }, { %swift.type*, i8* }* @"$s16class_resilience26ClassWithResilientPropertyCMl", i32 0, i32 0) -// CHECK-NEXT: [[COND:%.*]] = icmp eq %swift.type* [[CACHE]], null +// CHECK: [[CACHE:%.*]] = load ptr, ptr @"$s16class_resilience26ClassWithResilientPropertyCMl" +// CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, %swift.type_descriptor* bitcast ({{.*}} @"$s16class_resilience26ClassWithResilientPropertyCMn{{(\.ptrauth.*)?}}" to %swift.type_descriptor*)) +// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s16class_resilience26ClassWithResilientPropertyCMn{{(\.ptrauth.*)?}}") // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 // CHECK-NEXT: [[STATUS:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 1 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi %swift.type* [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] +// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 0, %entry ], [ [[STATUS]], %cacheIsNull ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[NEW_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[NEW_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] // ClassWithResilientProperty metadata initialization function -// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s16class_resilience26ClassWithResilientPropertyCMr"(%swift.type* %0, i8* %1, i8** %2) +// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s16class_resilience26ClassWithResilientPropertyCMr"(ptr %0, ptr %1, ptr %2) // CHECK: entry: -// CHECK-NEXT: [[FIELDS:%.*]] = alloca [3 x i8**] -// CHECK-NEXT: [[METADATA_ADDR:%.*]] = bitcast %swift.type* %0 to [[INT]]* -// CHECK-objc-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_ADDR]], [[INT]] {{10|13}} -// CHECK-native-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_ADDR]], [[INT]] {{7|10}} -// CHECK-NEXT: [[FIELDS_ADDR:%.*]] = bitcast [3 x i8**]* [[FIELDS]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 {{12|24}}, i8* [[FIELDS_ADDR]]) -// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [3 x i8**], [3 x i8**]* [[FIELDS]], i32 0, i32 0 +// CHECK-NEXT: [[FIELDS:%.*]] = alloca [3 x ptr] +// CHECK-objc-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] {{10|13}} +// CHECK-native-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] {{7|10}} +// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 {{12|24}}, ptr [[FIELDS]]) +// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [3 x ptr], ptr [[FIELDS]], i32 0, i32 0 // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s16resilient_struct4SizeVMa"([[INT]] 319) // CHECK-NEXT: [[SIZE_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 @@ -421,60 +403,60 @@ public class ClassWithResilientThenEmpty { // CHECK: dependency-satisfied: // -- ClassLayoutFlags = 0x100 (HasStaticVTable) -// CHECK-native: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 3, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) -// CHECK-DIRECT-objc-STABLE-ABI-TRUE: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 3, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) -// CHECK-DIRECT-objc-STABLE-ABI-FALSE:[[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 3, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) -// CHECK-INDIRECT-objc-STABLE-ABI-TRUE:[[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 3, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) +// CHECK-native: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 3, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) +// CHECK-DIRECT-objc-STABLE-ABI-TRUE: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 3, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) +// CHECK-DIRECT-objc-STABLE-ABI-FALSE:[[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 3, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) +// CHECK-INDIRECT-objc-STABLE-ABI-TRUE:[[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 3, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) // CHECK-NEXT: [[INITDEP_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NEXT: [[INITDEP_STATUS:%.*]] = extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq %swift.type* [[INITDEP_METADATA]], null +// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq ptr [[INITDEP_METADATA]], null // CHECK-NEXT: br i1 [[INITDEP_PRESENT]], label %dependency-satisfied1, label %metadata-dependencies.cont // CHECK: dependency-satisfied1: -// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* {{.*}} -// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @"$s16class_resilience26ClassWithResilientPropertyC1s16resilient_struct4SizeVvpWvd" +// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr {{.*}} +// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], ptr @"$s16class_resilience26ClassWithResilientPropertyC1s16resilient_struct4SizeVvpWvd" -// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* {{.*}} -// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @"$s16class_resilience26ClassWithResilientPropertyC5colors5Int32VvpWvd" +// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr {{.*}} +// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], ptr @"$s16class_resilience26ClassWithResilientPropertyC5colors5Int32VvpWvd" // CHECK: br label %metadata-dependencies.cont // CHECK: metadata-dependencies.cont: -// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi %swift.type* [ [[SIZE_METADATA]], %entry ], [ [[INITDEP_METADATA]], %dependency-satisfied ], [ null, %dependency-satisfied1 ] +// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi ptr [ [[SIZE_METADATA]], %entry ], [ [[INITDEP_METADATA]], %dependency-satisfied ], [ null, %dependency-satisfied1 ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 63, %entry ], [ [[INITDEP_STATUS]], %dependency-satisfied ], [ 0, %dependency-satisfied1 ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[PENDING_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[PENDING_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] // ClassWithResilientProperty method lookup function -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i8* @"$s16class_resilience26ClassWithResilientPropertyCMu"(%swift.type* %0, %swift.method_descriptor* %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @"$s16class_resilience26ClassWithResilientPropertyCMu"(ptr %0, ptr %1) // CHECK-NEXT: entry: -// CHECK-NEXT: [[RESULT:%.*]] = call i8* @swift_lookUpClassMethod(%swift.type* %0, %swift.method_descriptor* %1, %swift.type_descriptor* bitcast ({{.*}}* @"$s16class_resilience26ClassWithResilientPropertyCMn{{(\.ptrauth.*)?}}" to %swift.type_descriptor*)) -// CHECK-NEXT: ret i8* [[RESULT]] +// CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_lookUpClassMethod(ptr %0, ptr %1, ptr @"$s16class_resilience26ClassWithResilientPropertyCMn{{(\.ptrauth.*)?}}") +// CHECK-NEXT: ret ptr [[RESULT]] // CHECK-NEXT: } // ClassWithResilientlySizedProperty metadata accessor // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %swift.metadata_response @"$s16class_resilience33ClassWithResilientlySizedPropertyCMa"( -// CHECK: [[CACHE:%.*]] = load %swift.type*, %swift.type** getelementptr inbounds ({ %swift.type*, i8* }, { %swift.type*, i8* }* @"$s16class_resilience33ClassWithResilientlySizedPropertyCMl", i32 0, i32 0) -// CHECK-NEXT: [[COND:%.*]] = icmp eq %swift.type* [[CACHE]], null +// CHECK: [[CACHE:%.*]] = load ptr, ptr @"$s16class_resilience33ClassWithResilientlySizedPropertyCMl" +// CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, %swift.type_descriptor* bitcast ({{.*}} @"$s16class_resilience33ClassWithResilientlySizedPropertyCMn{{(\.ptrauth.*)?}}" to %swift.type_descriptor*)) +// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s16class_resilience33ClassWithResilientlySizedPropertyCMn{{(\.ptrauth.*)?}}") // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 // CHECK-NEXT: [[STATUS:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 1 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi %swift.type* [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] +// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 0, %entry ], [ [[STATUS]], %cacheIsNull ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[NEW_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[NEW_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] @@ -482,15 +464,13 @@ public class ClassWithResilientThenEmpty { // ClassWithResilientlySizedProperty metadata initialization function -// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s16class_resilience33ClassWithResilientlySizedPropertyCMr"(%swift.type* %0, i8* %1, i8** %2) +// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s16class_resilience33ClassWithResilientlySizedPropertyCMr"(ptr %0, ptr %1, ptr %2) // CHECK: entry: -// CHECK-NEXT: [[FIELDS:%.*]] = alloca [2 x i8**] -// CHECK-NEXT: [[METADATA_ADDR:%.*]] = bitcast %swift.type* %0 to [[INT]]* -// CHECK-objc-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_ADDR]], [[INT]] {{10|13}} -// CHECK-native-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_ADDR]], [[INT]] {{7|10}} -// CHECK-NEXT: [[FIELDS_ADDR:%.*]] = bitcast [2 x i8**]* [[FIELDS]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 {{8|16}}, i8* [[FIELDS_ADDR]]) -// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [2 x i8**], [2 x i8**]* [[FIELDS]], i32 0, i32 0 +// CHECK-NEXT: [[FIELDS:%.*]] = alloca [2 x ptr] +// CHECK-objc-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] {{10|13}} +// CHECK-native-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] {{7|10}} +// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 {{8|16}}, ptr [[FIELDS]]) +// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [2 x ptr], ptr [[FIELDS]], i32 0, i32 0 // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s16resilient_struct9RectangleVMa"([[INT]] 319) // CHECK-NEXT: [[SIZE_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 @@ -501,111 +481,105 @@ public class ClassWithResilientThenEmpty { // CHECK: dependency-satisfied: // -- ClassLayoutFlags = 0x100 (HasStaticVTable) -// CHECK-native: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 2, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) -// CHECK-DIRECT-objc-STABLE-ABI-TRUE: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 2, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) -// CHECK-DIRECT-objc-STABLE-ABI-FALSE:[[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 2, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) -// CHECK-INDIRECT-objc-STABLE-ABI-TRUE:[[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 2, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) +// CHECK-native: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 2, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) +// CHECK-DIRECT-objc-STABLE-ABI-TRUE: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 2, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) +// CHECK-DIRECT-objc-STABLE-ABI-FALSE:[[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 2, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) +// CHECK-INDIRECT-objc-STABLE-ABI-TRUE:[[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 2, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) // CHECK-NEXT: [[INITDEP_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NEXT: [[INITDEP_STATUS:%.*]] = extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq %swift.type* [[INITDEP_METADATA]], null +// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq ptr [[INITDEP_METADATA]], null // CHECK-NEXT: br i1 [[INITDEP_PRESENT]], label %dependency-satisfied1, label %metadata-dependencies.cont // CHECK: dependency-satisfied1: -// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* {{.*}} -// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @"$s16class_resilience33ClassWithResilientlySizedPropertyC1r16resilient_struct9RectangleVvpWvd" +// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr {{.*}} +// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], ptr @"$s16class_resilience33ClassWithResilientlySizedPropertyC1r16resilient_struct9RectangleVvpWvd" -// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* {{.*}} -// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @"$s16class_resilience33ClassWithResilientlySizedPropertyC5colors5Int32VvpWvd" +// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr {{.*}} +// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], ptr @"$s16class_resilience33ClassWithResilientlySizedPropertyC5colors5Int32VvpWvd" // CHECK: br label %metadata-dependencies.cont // CHECK: metadata-dependencies.cont: -// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi %swift.type* [ [[SIZE_METADATA]], %entry ], [ [[INITDEP_METADATA]], %dependency-satisfied ], [ null, %dependency-satisfied1 ] +// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi ptr [ [[SIZE_METADATA]], %entry ], [ [[INITDEP_METADATA]], %dependency-satisfied ], [ null, %dependency-satisfied1 ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 63, %entry ], [ [[INITDEP_STATUS]], %dependency-satisfied ], [ 0, %dependency-satisfied1 ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[PENDING_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[PENDING_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] // ClassWithResilientlySizedProperty method lookup function -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i8* @"$s16class_resilience33ClassWithResilientlySizedPropertyCMu"(%swift.type* %0, %swift.method_descriptor* %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @"$s16class_resilience33ClassWithResilientlySizedPropertyCMu"(ptr %0, ptr %1) // CHECK-NEXT: entry: -// CHECK-NEXT: [[RESULT:%.*]] = call i8* @swift_lookUpClassMethod(%swift.type* %0, %swift.method_descriptor* %1, %swift.type_descriptor* bitcast ({{.*}}* @"$s16class_resilience33ClassWithResilientlySizedPropertyCMn{{(\.ptrauth.*)?}}" to %swift.type_descriptor*)) -// CHECK-NEXT: ret i8* [[RESULT]] +// CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_lookUpClassMethod(ptr %0, ptr %1, ptr @"$s16class_resilience33ClassWithResilientlySizedPropertyCMn{{(\.ptrauth.*)?}}") +// CHECK-NEXT: ret ptr [[RESULT]] // CHECK-NEXT: } // ResilientChild metadata initialization function -// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s16class_resilience14ResilientChildCMr"(%swift.type* %0, i8* %1, i8** %2) +// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s16class_resilience14ResilientChildCMr"(ptr %0, ptr %1, ptr %2) // Initialize field offset vector... -// CHECK: call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* %0, [[INT]] 0, [[INT]] 1, i8*** {{.*}}, [[INT]]* {{.*}}) +// CHECK: call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr %0, [[INT]] 0, [[INT]] 1, ptr {{.*}}, ptr {{.*}}) // CHECK: ret %swift.metadata_response // ResilientChild method lookup function -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i8* @"$s16class_resilience14ResilientChildCMu"(%swift.type* %0, %swift.method_descriptor* %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @"$s16class_resilience14ResilientChildCMu"(ptr %0, ptr %1) // CHECK-NEXT: entry: -// CHECK-NEXT: [[RESULT:%.*]] = call i8* @swift_lookUpClassMethod(%swift.type* %0, %swift.method_descriptor* %1, %swift.type_descriptor* bitcast ({{.*}}* @"$s16class_resilience14ResilientChildCMn{{(\.ptrauth.*)?}}" to %swift.type_descriptor*)) -// CHECK-NEXT: ret i8* [[RESULT]] +// CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_lookUpClassMethod(ptr %0, ptr %1, ptr @"$s16class_resilience14ResilientChildCMn{{(\.ptrauth.*)?}}") +// CHECK-NEXT: ret ptr [[RESULT]] // CHECK-NEXT: } // ResilientChild.field getter dispatch thunk -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s16class_resilience14ResilientChildC5fields5Int32VvgTj"(%T16class_resilience14ResilientChildC* swiftself %0) -// CHECK: [[ISA_ADDR:%.*]] = bitcast %T16class_resilience14ResilientChildC* %0 to %swift.type** -// CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] -// CHECK-NEXT: [[BASE_ADDR:%.*]] = load [[INT]], [[INT]]* getelementptr inbounds ([[BOUNDS]], [[BOUNDS]]* @"$s16class_resilience14ResilientChildCMo", i32 0, i32 0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @"$s16class_resilience14ResilientChildC5fields5Int32VvgTj"(ptr swiftself %0) +// CHECK: [[ISA:%.*]] = load ptr, ptr %0 +// CHECK-NEXT: [[BASE_ADDR:%.*]] = load [[INT]], ptr @"$s16class_resilience14ResilientChildCMo" // CHECK-NEXT: [[BASE:%.*]] = add [[INT]] [[BASE_ADDR]], {{4|8}} -// CHECK-NEXT: [[METADATA_BYTES:%.*]] = bitcast %swift.type* [[ISA]] to i8* -// CHECK-NEXT: [[VTABLE_OFFSET_TMP:%.*]] = getelementptr inbounds i8, i8* [[METADATA_BYTES]], [[INT]] [[BASE]] -// CHECK-NEXT: [[VTABLE_OFFSET_ADDR:%.*]] = bitcast i8* [[VTABLE_OFFSET_TMP]] to i32 (%T16class_resilience14ResilientChildC*)** -// CHECK-NEXT: [[METHOD:%.*]] = load i32 (%T16class_resilience14ResilientChildC*)*, i32 (%T16class_resilience14ResilientChildC*)** [[VTABLE_OFFSET_ADDR]] -// CHECK-arm64e-NEXT: ptrtoint i32 (%T16class_resilience14ResilientChildC*)** [[VTABLE_OFFSET_ADDR]] to i64 +// CHECK-NEXT: [[VTABLE_OFFSET_TMP:%.*]] = getelementptr inbounds i8, ptr [[ISA]], [[INT]] [[BASE]] +// CHECK-NEXT: [[METHOD:%.*]] = load ptr, ptr [[VTABLE_OFFSET_TMP]] +// CHECK-arm64e-NEXT: ptrtoint ptr [[VTABLE_OFFSET_TMP]] to i64 // CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend -// CHECK-NEXT: [[RESULT:%.*]] = call swiftcc i32 [[METHOD]](%T16class_resilience14ResilientChildC* swiftself %0) +// CHECK-NEXT: [[RESULT:%.*]] = call swiftcc i32 [[METHOD]](ptr swiftself %0) // CHECK-NEXT: ret i32 [[RESULT]] // ResilientChild.field setter dispatch thunk -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience14ResilientChildC5fields5Int32VvsTj"(i32 %0, %T16class_resilience14ResilientChildC* swiftself %1) -// CHECK: [[ISA_ADDR:%.*]] = bitcast %T16class_resilience14ResilientChildC* %1 to %swift.type** -// CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] -// CHECK-NEXT: [[BASE:%.*]] = load [[INT]], [[INT]]* getelementptr inbounds ([[BOUNDS]], [[BOUNDS]]* @"$s16class_resilience14ResilientChildCMo", i32 0, i32 0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience14ResilientChildC5fields5Int32VvsTj"(i32 %0, ptr swiftself %1) +// CHECK: [[ISA:%.*]] = load ptr, ptr %1 +// CHECK-NEXT: [[BASE:%.*]] = load [[INT]], ptr @"$s16class_resilience14ResilientChildCMo" // CHECK-NEXT: [[METADATA_OFFSET:%.*]] = add [[INT]] [[BASE]], {{8|16}} -// CHECK-NEXT: [[METADATA_BYTES:%.*]] = bitcast %swift.type* [[ISA]] to i8* -// CHECK-NEXT: [[VTABLE_OFFSET_TMP:%.*]] = getelementptr inbounds i8, i8* [[METADATA_BYTES]], [[INT]] [[METADATA_OFFSET]] -// CHECK-NEXT: [[VTABLE_OFFSET_ADDR:%.*]] = bitcast i8* [[VTABLE_OFFSET_TMP]] to void (i32, %T16class_resilience14ResilientChildC*)** -// CHECK-NEXT: [[METHOD:%.*]] = load void (i32, %T16class_resilience14ResilientChildC*)*, void (i32, %T16class_resilience14ResilientChildC*)** [[VTABLE_OFFSET_ADDR]] -// CHECK-arm64e-NEXT: ptrtoint void (i32, %T16class_resilience14ResilientChildC*)** [[VTABLE_OFFSET_ADDR]] to i64 +// CHECK-NEXT: [[VTABLE_OFFSET_TMP:%.*]] = getelementptr inbounds i8, ptr [[ISA]], [[INT]] [[METADATA_OFFSET]] +// CHECK-NEXT: [[METHOD:%.*]] = load ptr, ptr [[VTABLE_OFFSET_TMP]] +// CHECK-arm64e-NEXT: ptrtoint ptr [[VTABLE_OFFSET_TMP]] to i64 // CHECK-arm64e-NEXT: call i64 @llvm.ptrauth.blend -// CHECK-NEXT: call swiftcc void [[METHOD]](i32 %0, %T16class_resilience14ResilientChildC* swiftself %1) +// CHECK-NEXT: call swiftcc void [[METHOD]](i32 %0, ptr swiftself %1) // CHECK-NEXT: ret void // ResilientGenericChild metadata initialization function -// CHECK-LABEL: define internal %swift.type* @"$s16class_resilience21ResilientGenericChildCMi"(%swift.type_descriptor* %0, i8** %1, i8* %2) -// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_descriptor* {{.*}}, i8** %1, i8* %2) -// CHECK: ret %swift.type* [[METADATA]] +// CHECK-LABEL: define internal ptr @"$s16class_resilience21ResilientGenericChildCMi"(ptr %0, ptr %1, ptr %2) +// CHECK: [[METADATA:%.*]] = call ptr @swift_allocateGenericClassMetadata(ptr {{.*}}, ptr %1, ptr %2) +// CHECK: ret ptr [[METADATA]] // CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s16class_resilience21ResilientGenericChildCMr" -// CHECK-SAME: (%swift.type* [[METADATA:%.*]], i8* %0, i8** %1) +// CHECK-SAME: (ptr [[METADATA:%.*]], ptr %0, ptr %1) -// CHECK: call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* [[METADATA]], [[INT]] 0, +// CHECK: call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr [[METADATA]], [[INT]] 0, // CHECK: ret %swift.metadata_response // ResilientGenericChild method lookup function -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i8* @"$s16class_resilience21ResilientGenericChildCMu"(%swift.type* %0, %swift.method_descriptor* %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @"$s16class_resilience21ResilientGenericChildCMu"(ptr %0, ptr %1) // CHECK-NEXT: entry: -// CHECK-NEXT: [[RESULT:%.*]] = call i8* @swift_lookUpClassMethod(%swift.type* %0, %swift.method_descriptor* %1, %swift.type_descriptor* bitcast ({{.*}}* @"$s16class_resilience21ResilientGenericChildCMn{{(\.ptrauth.*)?}}" to %swift.type_descriptor*)) -// CHECK-NEXT: ret i8* [[RESULT]] +// CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_lookUpClassMethod(ptr %0, ptr %1, ptr @"$s16class_resilience21ResilientGenericChildCMn{{(\.ptrauth.*)?}}") +// CHECK-NEXT: ret ptr [[RESULT]] // CHECK-NEXT: } diff --git a/test/IRGen/class_update_callback_with_stub.swift b/test/IRGen/class_update_callback_with_stub.swift index 70efdbf07bce6..3c2c1d566e284 100644 --- a/test/IRGen/class_update_callback_with_stub.swift +++ b/test/IRGen/class_update_callback_with_stub.swift @@ -3,8 +3,7 @@ // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_struct.swiftmodule -I %t %S/../Inputs/resilient_struct.swift // RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -emit-module-path %t/resilient_class.swiftmodule -enable-library-evolution %S/../Inputs/resilient_class.swift // RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -emit-module-path %t/resilient_objc_class.swiftmodule -enable-library-evolution %S/../Inputs/resilient_objc_class.swift -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %use_no_opaque_pointers -I %t -emit-ir -enable-library-evolution -target %target-next-stable-abi-triple %s > %t/out -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -I %t -emit-ir -enable-library-evolution -target %target-next-stable-abi-triple %s +// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -I %t -emit-ir -enable-library-evolution -target %target-next-stable-abi-triple %s > %t/out // RUN: %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-%target-runtime -DINT=i%target-ptrsize < %t/out // RUN: %FileCheck %s --check-prefix=NEGATIVE < %t/out @@ -64,21 +63,21 @@ import resilient_objc_class // CHECK-SAME: internal global %objc_full_class_stub { // CHECK-SAME: [[INT]] 0, // CHECK-SAME: [[INT]] 1, -// CHECK-SAME: %objc_class* (%objc_class*, i8*)* {{.*}}@"$s31class_update_callback_with_stub17ResilientSubclassCMU{{(\.ptrauth)?}}" +// CHECK-SAME: ptr {{.*}}@"$s31class_update_callback_with_stub17ResilientSubclassCMU{{(\.ptrauth)?}}" // CHECK-SAME: } // CHECK-LABEL: @"$s31class_update_callback_with_stub25ResilientNSObjectSubclassCMt" = // CHECK-SAME: internal global %objc_full_class_stub { // CHECK-SAME: [[INT]] 0, // CHECK-SAME: [[INT]] 1, -// CHECK-SAME: %objc_class* (%objc_class*, i8*)* {{.*}}@"$s31class_update_callback_with_stub25ResilientNSObjectSubclassCMU{{(\.ptrauth)?}}" +// CHECK-SAME: ptr {{.*}}@"$s31class_update_callback_with_stub25ResilientNSObjectSubclassCMU{{(\.ptrauth)?}}" // CHECK-SAME: } // CHECK-LABEL: @"$s31class_update_callback_with_stub27FixedLayoutNSObjectSubclassCMt" = // CHECK-SAME: internal global %objc_full_class_stub { // CHECK-SAME: [[INT]] 0, // CHECK-SAME: [[INT]] 1, -// CHECK-SAME: %objc_class* (%objc_class*, i8*)* {{.*}}@"$s31class_update_callback_with_stub27FixedLayoutNSObjectSubclassCMU{{(\.ptrauth)?}}" +// CHECK-SAME: ptr {{.*}}@"$s31class_update_callback_with_stub27FixedLayoutNSObjectSubclassCMU{{(\.ptrauth)?}}" // CHECK-SAME: } @@ -124,8 +123,8 @@ import resilient_objc_class // -- Address point for class stubs -// CHECK: @"$s31class_update_callback_with_stub17ResilientSubclassCMs" = alias %objc_class_stub, bitcast (i8* getelementptr inbounds (i8, i8* bitcast (%objc_full_class_stub* @"$s31class_update_callback_with_stub17ResilientSubclassCMt" to i8*), [[INT]] {{4|8}}) to %objc_class_stub*) -// CHECK: @"$s31class_update_callback_with_stub25ResilientNSObjectSubclassCMs" = alias %objc_class_stub, bitcast (i8* getelementptr inbounds (i8, i8* bitcast (%objc_full_class_stub* @"$s31class_update_callback_with_stub25ResilientNSObjectSubclassCMt" to i8*), [[INT]] {{4|8}}) to %objc_class_stub*) +// CHECK: @"$s31class_update_callback_with_stub17ResilientSubclassCMs" = alias %objc_class_stub, getelementptr inbounds (i8, ptr @"$s31class_update_callback_with_stub17ResilientSubclassCMt", [[INT]] {{4|8}}) +// CHECK: @"$s31class_update_callback_with_stub25ResilientNSObjectSubclassCMs" = alias %objc_class_stub, getelementptr inbounds (i8, ptr @"$s31class_update_callback_with_stub25ResilientNSObjectSubclassCMt", [[INT]] {{4|8}}) // -- Class symbol for NSObject-derived class points at the class stub @@ -134,20 +133,18 @@ import resilient_objc_class // -- Metadata update callbacks referenced from class stubs -// CHECK-LABEL: define internal %objc_class* @"$s31class_update_callback_with_stub17ResilientSubclassCMU"(%objc_class* %0, i8* %1) +// CHECK-LABEL: define internal ptr @"$s31class_update_callback_with_stub17ResilientSubclassCMU"(ptr %0, ptr %1) // CHECK: entry: // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s31class_update_callback_with_stub17ResilientSubclassCMa"([[INT]] 0) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 -// CHECK-NEXT: [[CLASS:%.*]] = bitcast %swift.type* [[METADATA]] to %objc_class* -// CHECK-NEXT: ret %objc_class* [[CLASS]] +// CHECK-NEXT: ret ptr [[METADATA]] // CHECK-NEXT: } -// CHECK-LABEL: define internal %objc_class* @"$s31class_update_callback_with_stub25ResilientNSObjectSubclassCMU"(%objc_class* %0, i8* %1) +// CHECK-LABEL: define internal ptr @"$s31class_update_callback_with_stub25ResilientNSObjectSubclassCMU"(ptr %0, ptr %1) // CHECK: entry: // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s31class_update_callback_with_stub25ResilientNSObjectSubclassCMa"([[INT]] 0) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 -// CHECK-NEXT: [[CLASS:%.*]] = bitcast %swift.type* [[METADATA]] to %objc_class* -// CHECK-NEXT: ret %objc_class* [[CLASS]] +// CHECK-NEXT: ret ptr [[METADATA]] // CHECK-NEXT: } open class ResilientSubclass : ResilientOutsideParent {} diff --git a/test/IRGen/concrete_inherits_generic_base.swift b/test/IRGen/concrete_inherits_generic_base.swift index 7ef747516b933..134da9afa533a 100644 --- a/test/IRGen/concrete_inherits_generic_base.swift +++ b/test/IRGen/concrete_inherits_generic_base.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name foo -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -module-name foo -emit-ir %s +// RUN: %target-swift-frontend -module-name foo -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize // CHECK: %swift.type = type { [[INT]] } @@ -21,20 +20,20 @@ class Base { } // CHECK-LABEL: define hidden swiftcc %swift.metadata_response @"$s3foo12SuperDerivedCMa"( -// CHECK: [[CACHE:%.*]] = load %swift.type*, %swift.type** getelementptr inbounds ({ %swift.type*, i8* }, { %swift.type*, i8* }* @"$s3foo12SuperDerivedCMl", i32 0, i32 0) -// CHECK-NEXT: [[COND:%.*]] = icmp eq %swift.type* [[CACHE]], null +// CHECK: [[CACHE:%.*]] = load ptr, ptr @"$s3foo12SuperDerivedCMl" +// CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, %swift.type_descriptor* bitcast ({{.*}} @"$s3foo12SuperDerivedCMn" to %swift.type_descriptor*)) +// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s3foo12SuperDerivedCMn") // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 // CHECK-NEXT: [[STATUS:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 1 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi %swift.type* [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] +// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 0, %entry ], [ [[STATUS]], %cacheIsNull ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[NEW_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[NEW_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] @@ -42,20 +41,20 @@ class SuperDerived: Derived { } // CHECK-LABEL: define hidden swiftcc %swift.metadata_response @"$s3foo7DerivedCMa"( -// CHECK: [[CACHE:%.*]] = load %swift.type*, %swift.type** getelementptr inbounds ({ %swift.type*, i8* }, { %swift.type*, i8* }* @"$s3foo7DerivedCMl", i32 0, i32 0) -// CHECK-NEXT: [[COND:%.*]] = icmp eq %swift.type* [[CACHE]], null +// CHECK: [[CACHE:%.*]] = load ptr, ptr @"$s3foo7DerivedCMl" +// CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, %swift.type_descriptor* bitcast ({{.*}} @"$s3foo7DerivedCMn" to %swift.type_descriptor*)) +// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s3foo7DerivedCMn") // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 // CHECK-NEXT: [[STATUS:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 1 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi %swift.type* [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] +// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 0, %entry ], [ [[STATUS]], %cacheIsNull ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[NEW_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[NEW_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] @@ -82,6 +81,6 @@ presentBase(Derived(x: "two")) presentBase(Base(x: "two")) presentBase(Base(x: 2)) -// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s3foo12SuperDerivedCMr"(%swift.type* %0, i8* %1, i8** %2) +// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s3foo12SuperDerivedCMr"(ptr %0, ptr %1, ptr %2) // -- ClassLayoutFlags = 0x100 (HasStaticVTable) -// CHECK: call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* %0, [[INT]] 256, {{.*}}) +// CHECK: call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr %0, [[INT]] 256, {{.*}}) diff --git a/test/IRGen/conditional_conformances_class_with_defaulted_method.swift b/test/IRGen/conditional_conformances_class_with_defaulted_method.swift index c463c59d1034c..1118b4ba4803d 100644 --- a/test/IRGen/conditional_conformances_class_with_defaulted_method.swift +++ b/test/IRGen/conditional_conformances_class_with_defaulted_method.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s -module-name x | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir %s -module-name x +// RUN: %target-swift-frontend -emit-ir %s -module-name x | %FileCheck %s // rdar://problem/40078863 - witness signatures get adjusted and the // ProtocolConformances accompanying them did not, resulting in an extra witness @@ -13,4 +12,4 @@ extension Foo { } class Box {} extension Box: Foo where T: Foo {} -// CHECK-LABEL: define internal swiftcc void @"$s1x3BoxCyqd__GAA3FooA2aEP3baryyFTW"(%T1x3BoxC.0** noalias nocapture swiftself dereferenceable({{[48]}}) %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define internal swiftcc void @"$s1x3BoxCyqd__GAA3FooA2aEP3baryyFTW"(ptr noalias nocapture swiftself dereferenceable({{[48]}}) %0, ptr %Self, ptr %SelfWitnessTable) diff --git a/test/IRGen/conformance_resilience.swift b/test/IRGen/conformance_resilience.swift index c27a765d360ba..5a1fc4b996bae 100644 --- a/test/IRGen/conformance_resilience.swift +++ b/test/IRGen/conformance_resilience.swift @@ -1,29 +1,28 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -static -enable-library-evolution -emit-module-path=%t/resilient_protocol.swiftmodule -module-name=resilient_protocol %S/../Inputs/resilient_protocol.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -enable-library-evolution %s | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %s +// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %s | %FileCheck %s -DINT=i%target-ptrsize // RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution -O %s import resilient_protocol -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22conformance_resilience14useConformanceyyx18resilient_protocol22OtherResilientProtocolRzlF"(%swift.opaque* noalias nocapture %0, %swift.type* %T, i8** %T.OtherResilientProtocol) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22conformance_resilience14useConformanceyyx18resilient_protocol22OtherResilientProtocolRzlF"(ptr noalias nocapture %0, ptr %T, ptr %T.OtherResilientProtocol) public func useConformance(_: T) {} -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22conformance_resilience14getConformanceyy18resilient_protocol7WrapperVyxGlF"(%swift.opaque* noalias nocapture %0, %swift.type* %T) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22conformance_resilience14getConformanceyy18resilient_protocol7WrapperVyxGlF"(ptr noalias nocapture %0, ptr %T) public func getConformance(_ w: Wrapper) { - // CHECK: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s18resilient_protocol7WrapperVMa"([[INT]] 0, %swift.type* %T) + // CHECK: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s18resilient_protocol7WrapperVMa"([[INT]] 0, ptr %T) // CHECK: [[META:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 - // CHECK: [[WTABLE:%.*]] = call i8** @swift_getWitnessTable(%swift.protocol_conformance_descriptor* @"$s18resilient_protocol7WrapperVyxGAA22OtherResilientProtocolAAMc", %swift.type* [[META]], i8*** undef) - // CHECK: call swiftcc void @"$s22conformance_resilience14useConformanceyyx18resilient_protocol22OtherResilientProtocolRzlF"(%swift.opaque* noalias nocapture %0, %swift.type* [[META]], i8** [[WTABLE]]) + // CHECK: [[WTABLE:%.*]] = call ptr @swift_getWitnessTable(ptr @"$s18resilient_protocol7WrapperVyxGAA22OtherResilientProtocolAAMc", ptr [[META]], ptr undef) + // CHECK: call swiftcc void @"$s22conformance_resilience14useConformanceyyx18resilient_protocol22OtherResilientProtocolRzlF"(ptr noalias nocapture %0, ptr [[META]], ptr [[WTABLE]]) // CHECK: ret void useConformance(w) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22conformance_resilience14getConformanceyy18resilient_protocol15ConcreteWrapperVF"(%swift.opaque* noalias nocapture %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s22conformance_resilience14getConformanceyy18resilient_protocol15ConcreteWrapperVF"(ptr noalias nocapture %0) public func getConformance(_ w: ConcreteWrapper) { // CHECK: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s18resilient_protocol15ConcreteWrapperVMa"([[INT]] 0) // CHECK: [[META:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 - // CHECK: call swiftcc void @"$s22conformance_resilience14useConformanceyyx18resilient_protocol22OtherResilientProtocolRzlF"(%swift.opaque* noalias nocapture %0, %swift.type* [[META]], i8** @"$s18resilient_protocol15ConcreteWrapperVAA22OtherResilientProtocolAAWP") + // CHECK: call swiftcc void @"$s22conformance_resilience14useConformanceyyx18resilient_protocol22OtherResilientProtocolRzlF"(ptr noalias nocapture %0, ptr [[META]], ptr @"$s18resilient_protocol15ConcreteWrapperVAA22OtherResilientProtocolAAWP") // CHECK: ret void useConformance(w) } diff --git a/test/IRGen/dependent_reabstraction.swift b/test/IRGen/dependent_reabstraction.swift index a019216f06c51..c0250b8f00b17 100644 --- a/test/IRGen/dependent_reabstraction.swift +++ b/test/IRGen/dependent_reabstraction.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir %s +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s func markUsed(_ t: T) {} @@ -9,7 +8,7 @@ protocol A { } struct X : A { - // CHECK-LABEL: define internal swiftcc void @"$s23dependent_reabstraction1XVyxGAA1AA2aEP1byy1BQzFTW"(%swift.type** noalias nocapture dereferenceable({{.*}}) %0, %T23dependent_reabstraction1XV* noalias nocapture swiftself %1, %swift.type* %Self, i8** %SelfWitnessTable) + // CHECK-LABEL: define internal swiftcc void @"$s23dependent_reabstraction1XVyxGAA1AA2aEP1byy1BQzFTW"(ptr noalias nocapture dereferenceable({{.*}}) %0, ptr noalias nocapture swiftself %1, ptr %Self, ptr %SelfWitnessTable) func b(_ b: X.Type) { let x: Any = b markUsed(b as X.Type) diff --git a/test/IRGen/deserialize-clang-importer-witness-tables.swift b/test/IRGen/deserialize-clang-importer-witness-tables.swift index ad3fc2ec4c7b4..b3120e94d793e 100644 --- a/test/IRGen/deserialize-clang-importer-witness-tables.swift +++ b/test/IRGen/deserialize-clang-importer-witness-tables.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -swift-version 4 -emit-module -o %t/regex.swiftmodule %S/Inputs/deserialize-clang-importer-witness-tables/regex.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -swift-version 4 -emit-ir %s -I %t | %FileCheck %s -// RUN: %target-swift-frontend -swift-version 4 -emit-ir %s -I %t +// RUN: %target-swift-frontend -swift-version 4 -emit-ir %s -I %t | %FileCheck %s // REQUIRES: objc_interop import regex @@ -11,7 +10,7 @@ public func foo(line: String) { // below. Ensure that a local copy of the definition was deserialized // and lowered to IR. // CHECK-LABEL: define {{.*}} void @"$sSo26NSRegularExpressionOptionsVs10SetAlgebraSCsACPxycfCTW" - // CHECK-LABEL: define {{.*}} i8** @"$sSo26NSRegularExpressionOptionsVABSQSCWl"() + // CHECK-LABEL: define {{.*}} ptr @"$sSo26NSRegularExpressionOptionsVABSQSCWl"() let versionRegex = try! RegEx(pattern: "Apple") _ = versionRegex.firstMatch(in: line) } diff --git a/test/IRGen/disable-instantiation-cache.swift b/test/IRGen/disable-instantiation-cache.swift index aa8cfa5d7458e..a4c1ea734416b 100644 --- a/test/IRGen/disable-instantiation-cache.swift +++ b/test/IRGen/disable-instantiation-cache.swift @@ -1,8 +1,6 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name main %s -emit-ir | %FileCheck %s --check-prefix=CHECK-CACHE -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name main %s -emit-ir -disable-preallocated-instantiation-caches | %FileCheck %s --check-prefix=CHECK-NOCACHE -// RUN: %target-swift-frontend -module-name main %s -emit-ir -// RUN: %target-swift-frontend -module-name main %s -emit-ir -disable-preallocated-instantiation-caches +// RUN: %target-swift-frontend -module-name main %s -emit-ir | %FileCheck %s --check-prefix=CHECK-CACHE +// RUN: %target-swift-frontend -module-name main %s -emit-ir -disable-preallocated-instantiation-caches | %FileCheck %s --check-prefix=CHECK-NOCACHE public class Generic { @@ -20,16 +18,16 @@ public struct MyStruct: MyProtocol { } // "metadata instantiation cache for protocol conformance descriptor for main.MyStruct : main.MyProtocol in main" -// CHECK-CACHE: @"$s4main8MyStructVyxGAA0B8ProtocolAAMcMK" = internal global [{{.*}} x i8*] zeroinitializer +// CHECK-CACHE: @"$s4main8MyStructVyxGAA0B8ProtocolAAMcMK" = internal global [{{.*}} x ptr] zeroinitializer // CHECK-CACHE: @"$s4main8MyStructVyxGAA0B8ProtocolAAMc" = {{.*}} @"$s4main8MyStructVyxGAA0B8ProtocolAAMcMK" {{.*}} // CHECK-NOCACHE-NOT: @"$s4main8MyStructVyxGAA0B8ProtocolAAMcMK" // "type metadata instantiation cache for main.Generic" -// CHECK-CACHE: @"$s4main7GenericCMI" = internal global [{{.*}} x i8*] zeroinitializer +// CHECK-CACHE: @"$s4main7GenericCMI" = internal global [{{.*}} x ptr] zeroinitializer // CHECK-CACHE: @"$s4main7GenericCMn" = {{.*}} @"$s4main7GenericCMI" {{.*}} // CHECK-NOCACHE-NOT: @"$s4main7GenericCMI" // "type metadata instantiation cache for main.MyStruct" -// CHECK-CACHE: @"$s4main8MyStructVMI" = internal global [{{.*}} x i8*] zeroinitializer +// CHECK-CACHE: @"$s4main8MyStructVMI" = internal global [{{.*}} x ptr] zeroinitializer // CHECK-CACHE: @"$s4main8MyStructVMn" = {{.*}} @"$s4main8MyStructVMI" {{.*}} // CHECK-NOCACHE-NOT: @"$s4main8MyStructVMI" diff --git a/test/IRGen/dllimport.swift b/test/IRGen/dllimport.swift index 5d78dfbdaf4fc..9c9b1211437d1 100644 --- a/test/IRGen/dllimport.swift +++ b/test/IRGen/dllimport.swift @@ -1,7 +1,5 @@ -// RUN: %swift %use_no_opaque_pointers -Xllvm -sil-disable-pass=GenericSpecializer -target thumbv7--windows-itanium -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllimport %s -o - -enable-source-import -I %S | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-NO-OPT -// RUN: %swift -Xllvm -sil-disable-pass=GenericSpecializer -target thumbv7--windows-itanium -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllimport %s -o - -enable-source-import -I %S -// RUN: %swift %use_no_opaque_pointers -Xllvm -sil-disable-pass=GenericSpecializer -target thumbv7--windows-itanium -O -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllimport -primary-file %s -o - -enable-source-import -I %S | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-OPT -// RUN: %swift -Xllvm -sil-disable-pass=GenericSpecializer -target thumbv7--windows-itanium -O -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllimport -primary-file %s -o - -enable-source-import -I %S +// RUN: %swift -Xllvm -sil-disable-pass=GenericSpecializer -target thumbv7--windows-itanium -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllimport %s -o - -enable-source-import -I %S | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-NO-OPT +// RUN: %swift -Xllvm -sil-disable-pass=GenericSpecializer -target thumbv7--windows-itanium -O -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllimport -primary-file %s -o - -enable-source-import -I %S | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-OPT // REQUIRES: CODEGENERATOR=ARM @@ -38,16 +36,16 @@ public func g() { blackhole({ () -> () in }) } -// CHECK-NO-OPT-DAG: declare dllimport %swift.refcounted* @swift_allocObject(%swift.type*, 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 ptr @swift_allocObject(ptr, i32, i32) +// CHECK-NO-OPT-DAG: declare dllimport void @swift_release(ptr) +// CHECK-NO-OPT-DAG: declare dllimport ptr @swift_retain(ptr returned) // CHECK-NO-OPT-DAG: @"$s9dllexport1pMp" = external dllimport global %swift.protocol -// CHECK-NO-OPT-DAG: declare dllimport swiftcc i8* @"$s9dllexport2ciAA1cCvau"() -// CHECK-NO-OPT-DAG: declare dllimport swiftcc %swift.refcounted* @"$s9dllexport1cCfd"(%T9dllexport1cC* swiftself) -// CHECK-NO-OPT-DAG: declare dllimport void @swift_deallocClassInstance(%swift.refcounted*, i32, i32) - -// CHECK-OPT-DAG: declare dllimport %swift.refcounted* @swift_retain(%swift.refcounted* returned) local_unnamed_addr -// CHECK-OPT-DAG: @"\01__imp_{{_?}}$s9dllexport1pMp" = external externally_initialized constant %swift.protocol* -// CHECK-OPT-DAG: declare dllimport swiftcc i8* @"$s9dllexport2ciAA1cCvau"() -// CHECK-OPT-DAG: declare dllimport void @swift_deallocClassInstance(%swift.refcounted*, i32, i32) -// CHECK-OPT-DAG: declare dllimport swiftcc %swift.refcounted* @"$s9dllexport1cCfd"(%T9dllexport1cC* swiftself) +// CHECK-NO-OPT-DAG: declare dllimport swiftcc ptr @"$s9dllexport2ciAA1cCvau"() +// CHECK-NO-OPT-DAG: declare dllimport swiftcc ptr @"$s9dllexport1cCfd"(ptr swiftself) +// CHECK-NO-OPT-DAG: declare dllimport void @swift_deallocClassInstance(ptr, i32, i32) + +// CHECK-OPT-DAG: declare dllimport ptr @swift_retain(ptr returned) local_unnamed_addr +// CHECK-OPT-DAG: @"\01__imp_{{_?}}$s9dllexport1pMp" = external externally_initialized constant ptr +// CHECK-OPT-DAG: declare dllimport swiftcc ptr @"$s9dllexport2ciAA1cCvau"() +// CHECK-OPT-DAG: declare dllimport void @swift_deallocClassInstance(ptr, i32, i32) +// CHECK-OPT-DAG: declare dllimport swiftcc ptr @"$s9dllexport1cCfd"(ptr swiftself) diff --git a/test/IRGen/dynamic_replaceable.sil b/test/IRGen/dynamic_replaceable.sil index a16acdacc02b9..9e4022a38ee77 100644 --- a/test/IRGen/dynamic_replaceable.sil +++ b/test/IRGen/dynamic_replaceable.sil @@ -1,7 +1,5 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers %s -emit-ir -disable-objc-interop | %FileCheck %s --check-prefix=CHECK --check-prefix=COMPAT -// RUN: %target-swift-frontend %use_no_opaque_pointers %s -emit-ir -disable-objc-interop -target x86_64-apple-macosx10.15 | %FileCheck %s --check-prefix=CHECK --check-prefix=NONCOMPAT -// RUN: %target-swift-frontend %s -emit-ir -disable-objc-interop -// RUN: %target-swift-frontend %s -emit-ir -disable-objc-interop -target x86_64-apple-macosx10.15 +// RUN: %target-swift-frontend %s -emit-ir -disable-objc-interop | %FileCheck %s --check-prefix=CHECK --check-prefix=COMPAT +// RUN: %target-swift-frontend %s -emit-ir -disable-objc-interop -target x86_64-apple-macosx10.15 | %FileCheck %s --check-prefix=CHECK --check-prefix=NONCOMPAT // REQUIRES: objc_interop @@ -9,8 +7,8 @@ // The arm64e test is in ptrauth-dynamic_replaceable.sil. // UNSUPPORTED: CPU=arm64e -// CHECK: @test_dynamically_replaceableTX = global %swift.dyn_repl_link_entry { i8* bitcast (void ()* @test_dynamically_replaceable to i8*), %swift.dyn_repl_link_entry* null } -// CHECK: @test_dynamically_replaceableTx = constant %swift.dyn_repl_key { i32{{.*}}%swift.dyn_repl_link_entry* @test_dynamically_replaceableTX{{.*}}, i32 0 }, section "__TEXT,__const" +// CHECK: @test_dynamically_replaceableTX = global %swift.dyn_repl_link_entry { ptr @test_dynamically_replaceable, ptr null } +// CHECK: @test_dynamically_replaceableTx = constant %swift.dyn_repl_key { i32{{.*}}ptr @test_dynamically_replaceableTX{{.*}}, i32 0 }, section "__TEXT,__const" // CHECK: @test_replacementTX = global %swift.dyn_repl_link_entry zeroinitializer // CHECK: @"\01l_unnamed_dynamic_replacements" = private constant { i32, i32, [1 x { i32, i32, i32, i32 }] } @@ -18,9 +16,9 @@ // CHECK-SAME: i32 1, // CHECK-SAME: [1 x { i32, i32, i32, i32 }] // CHECK-SAME: [{ i32, i32, i32, i32 } -// CHECK-SAME: %swift.dyn_repl_key* @test_dynamically_replaceableTx +// CHECK-SAME: ptr @test_dynamically_replaceableTx // CHECK-SAME: @test_replacement -// CHECK-SAME: %swift.dyn_repl_link_entry* @test_replacementTX +// CHECK-SAME: ptr @test_replacementTX // CHECK-SAME: i32 0 }] }, section "__TEXT,__const" // CHECK: @"\01l_auto_dynamic_replacements" = private constant { i32, i32, [2 x i32] } @@ -30,13 +28,12 @@ // CHECK-LABEL: define swiftcc void @test_dynamically_replaceable() // CHECK-NEXT: entry: -// COMPAT-NEXT: [[FUN_PTR:%.*]] = call i8* @swift_getFunctionReplacement{{.*}}(i8** getelementptr inbounds (%swift.dyn_repl_link_entry, %swift.dyn_repl_link_entry* @test_dynamically_replaceableTX, i32 0, i32 0), i8* bitcast (void ()* @test_dynamically_replaceable to i8*)) -// NONCOMPAT-NEXT: [[FUN_PTR:%.*]] = call i8* @swift_getFunctionReplacement(i8** getelementptr inbounds (%swift.dyn_repl_link_entry, %swift.dyn_repl_link_entry* @test_dynamically_replaceableTX, i32 0, i32 0), i8* bitcast (void ()* @test_dynamically_replaceable to i8*)) -// CHECK-NEXT: [[CMP:%.*]] = icmp eq i8* [[FUN_PTR]], null +// COMPAT-NEXT: [[FUN_PTR:%.*]] = call ptr @swift_getFunctionReplacement{{.*}}(ptr @test_dynamically_replaceableTX, ptr @test_dynamically_replaceable) +// NONCOMPAT-NEXT: [[FUN_PTR:%.*]] = call ptr @swift_getFunctionReplacement(ptr @test_dynamically_replaceableTX, ptr @test_dynamically_replaceable) +// CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[FUN_PTR]], null // CHECK-NEXT: br i1 [[CMP]], label %[[ORIGBB:[a-z_]*]], label %[[FWBB:[a-z_]*]] // CHECK: [[FWBB]]: -// CHECK-NEXT: [[TYPED_PTR:%.*]] = bitcast i8* [[FUN_PTR]] to void ()* -// CHECK-NEXT: tail call swiftcc void [[TYPED_PTR]]() +// CHECK-NEXT: tail call swiftcc void [[FUN_PTR]]() // CHECK-NEXT: ret void // CHECK: [[ORIGBB]]: // CHECK-NEXT: ret void @@ -57,10 +54,9 @@ bb0: // The thunk that implement the prev_dynamic_function_ref lookup. // CHECK-LABEL: define swiftcc void @test_replacementTI() // CHECK: entry: -// COMPAT: [[FUN_PTR:%.*]] = call i8* @swift_getOrigOfReplaceable{{.*}}(i8** getelementptr inbounds (%swift.dyn_repl_link_entry, %swift.dyn_repl_link_entry* @test_replacementTX, i32 0, i32 0)) -// NONCOMPAT: [[FUN_PTR:%.*]] = call i8* @swift_getOrigOfReplaceable(i8** getelementptr inbounds (%swift.dyn_repl_link_entry, %swift.dyn_repl_link_entry* @test_replacementTX, i32 0, i32 0)) -// CHECK: [[TYPED_PTR:%.*]] = bitcast i8* [[FUN_PTR]] to void ()* -// CHECK: call swiftcc void [[TYPED_PTR]]() +// COMPAT: [[FUN_PTR:%.*]] = call ptr @swift_getOrigOfReplaceable{{.*}}(ptr @test_replacementTX) +// NONCOMPAT: [[FUN_PTR:%.*]] = call ptr @swift_getOrigOfReplaceable(ptr @test_replacementTX) +// CHECK: call swiftcc void [[FUN_PTR]]() // CHECK: ret void // CHECK: } sil [dynamic_replacement_for "test_dynamically_replaceable"] @test_replacement : $@convention(thin) () -> () { diff --git a/test/IRGen/dynamic_self_cast.swift b/test/IRGen/dynamic_self_cast.swift index 92be3653b85b3..79dc4e962578a 100644 --- a/test/IRGen/dynamic_self_cast.swift +++ b/test/IRGen/dynamic_self_cast.swift @@ -1,87 +1,78 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -disable-objc-interop %s | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir -disable-objc-interop %s +// RUN: %target-swift-frontend -emit-ir -disable-objc-interop %s | %FileCheck %s // Note: -disable-objc-interop is used to give consistent results on Darwin // and Linux, avoiding differences like %swift.refcounted -vs- %objc_object, // etc. public class SelfCasts { - // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc %T17dynamic_self_cast9SelfCastsC* @"$s17dynamic_self_cast9SelfCastsC02toD0yACXDACFZ"(%T17dynamic_self_cast9SelfCastsC* %0, %swift.type* swiftself %1) - // CHECK: [[ARG:%.*]] = bitcast %T17dynamic_self_cast9SelfCastsC* %0 to i8* - // CHECK: [[METATYPE:%.*]] = bitcast %swift.type* %1 to i8* - // CHECK: call i8* @swift_dynamicCastClassUnconditional(i8* [[ARG]], i8* [[METATYPE]], i8* null, i32 0, i32 0) + // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc ptr @"$s17dynamic_self_cast9SelfCastsC02toD0yACXDACFZ"(ptr %0, ptr swiftself %1) + // CHECK: call ptr @swift_dynamicCastClassUnconditional(ptr %0, ptr %1, ptr null, i32 0, i32 0) // CHECK: ret public static func toSelf(_ s: SelfCasts) -> Self { return s as! Self } - // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc %T17dynamic_self_cast9SelfCastsC* @"$s17dynamic_self_cast9SelfCastsC09genericToD0yACXDxlFZ"(%swift.opaque* noalias nocapture %0, %swift.type* %T, %swift.type* swiftself %1) - // CHECK: call zeroext i1 @swift_dynamicCast(%swift.opaque* {{%.*}}, %swift.opaque* {{%.*}}, %swift.type* %T, %swift.type* %1, {{.*}}) + // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc ptr @"$s17dynamic_self_cast9SelfCastsC09genericToD0yACXDxlFZ"(ptr noalias nocapture %0, ptr %T, ptr swiftself %1) + // CHECK: call zeroext i1 @swift_dynamicCast(ptr {{%.*}}, ptr {{%.*}}, ptr %T, ptr %1, {{.*}}) // CHECK: ret public static func genericToSelf(_ s: T) -> Self { return s as! Self } - // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc %T17dynamic_self_cast9SelfCastsC* @"$s17dynamic_self_cast9SelfCastsC014classGenericToD0yACXDxRlzClFZ"(%swift.refcounted* %0, %swift.type* %T, %swift.type* swiftself %1) - // CHECK: [[ARG:%.*]] = bitcast %swift.refcounted* %0 to i8* - // CHECK: [[METATYPE:%.*]] = bitcast %swift.type* %1 to i8* - // CHECK: call i8* @swift_dynamicCastClassUnconditional(i8* [[ARG]], i8* [[METATYPE]], i8* null, i32 0, i32 0) + // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc ptr @"$s17dynamic_self_cast9SelfCastsC014classGenericToD0yACXDxRlzClFZ"(ptr %0, ptr %T, ptr swiftself %1) + // CHECK: call ptr @swift_dynamicCastClassUnconditional(ptr %0, ptr %1, ptr null, i32 0, i32 0) // CHECK: ret public static func classGenericToSelf(_ s: T) -> Self { return s as! Self } - // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc void @"$s17dynamic_self_cast9SelfCastsC011genericFromD0xylFZ"(%swift.opaque* noalias nocapture sret({{.*}}) %0, %swift.type* %T, %swift.type* swiftself %1) - // CHECK: call zeroext i1 @swift_dynamicCast(%swift.opaque* {{%.*}}, %swift.opaque* {{%.*}}, %swift.type* %1, %swift.type* %T, {{.*}}) + // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc void @"$s17dynamic_self_cast9SelfCastsC011genericFromD0xylFZ"(ptr noalias nocapture sret({{.*}}) %0, ptr %T, ptr swiftself %1) + // CHECK: call zeroext i1 @swift_dynamicCast(ptr {{%.*}}, ptr {{%.*}}, ptr %1, ptr %T, {{.*}}) // CHECK: ret public static func genericFromSelf() -> T { let s = Self() return s as! T } - // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc %swift.refcounted* @"$s17dynamic_self_cast9SelfCastsC016classGenericFromD0xyRlzClFZ"(%swift.type* %T, %swift.type* swiftself %0) - // CHECK: call zeroext i1 @swift_dynamicCast(%swift.opaque* {{%.*}}, %swift.opaque* {{%.*}}, %swift.type* %0, %swift.type* %T, {{.*}}) + // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc ptr @"$s17dynamic_self_cast9SelfCastsC016classGenericFromD0xyRlzClFZ"(ptr %T, ptr swiftself %0) + // CHECK: call zeroext i1 @swift_dynamicCast(ptr {{%.*}}, ptr {{%.*}}, ptr %0, ptr %T, {{.*}}) // CHECK: ret public static func classGenericFromSelf() -> T { let s = Self() return s as! T } - // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc {{i32|i64}} @"$s17dynamic_self_cast9SelfCastsC02toD11ConditionalyACXDSgACFZ"(%T17dynamic_self_cast9SelfCastsC* %0, %swift.type* swiftself %1) - // CHECK: [[ARG:%.*]] = bitcast %T17dynamic_self_cast9SelfCastsC* %0 to i8* - // CHECK: [[METATYPE:%.*]] = bitcast %swift.type* %1 to i8* - // CHECK: call i8* @swift_dynamicCastClass(i8* [[ARG]], i8* [[METATYPE]]) + // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc {{i32|i64}} @"$s17dynamic_self_cast9SelfCastsC02toD11ConditionalyACXDSgACFZ"(ptr %0, ptr swiftself %1) + // CHECK: call ptr @swift_dynamicCastClass(ptr %0, ptr %1) // CHECK: ret public static func toSelfConditional(_ s: SelfCasts) -> Self? { return s as? Self } - // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc {{i32|i64}} @"$s17dynamic_self_cast9SelfCastsC09genericToD11ConditionalyACXDSgxlFZ"(%swift.opaque* noalias nocapture %0, %swift.type* %T, %swift.type* swiftself %1) - // CHECK: call zeroext i1 @swift_dynamicCast(%swift.opaque* {{%.*}}, %swift.opaque* {{%.*}}, %swift.type* %T, %swift.type* %1, {{.*}}) + // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc {{i32|i64}} @"$s17dynamic_self_cast9SelfCastsC09genericToD11ConditionalyACXDSgxlFZ"(ptr noalias nocapture %0, ptr %T, ptr swiftself %1) + // CHECK: call zeroext i1 @swift_dynamicCast(ptr {{%.*}}, ptr {{%.*}}, ptr %T, ptr %1, {{.*}}) // CHECK: ret public static func genericToSelfConditional(_ s: T) -> Self? { return s as? Self } - // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc {{i32|i64}} @"$s17dynamic_self_cast9SelfCastsC014classGenericToD11ConditionalyACXDSgxRlzClFZ"(%swift.refcounted* %0, %swift.type* %T, %swift.type* swiftself %1) - // CHECK: [[ARG:%.*]] = bitcast %swift.refcounted* %0 to i8* - // CHECK: [[METATYPE:%.*]] = bitcast %swift.type* %1 to i8* - // CHECK: call i8* @swift_dynamicCastClass(i8* [[ARG]], i8* [[METATYPE]]) + // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc {{i32|i64}} @"$s17dynamic_self_cast9SelfCastsC014classGenericToD11ConditionalyACXDSgxRlzClFZ"(ptr %0, ptr %T, ptr swiftself %1) + // CHECK: call ptr @swift_dynamicCastClass(ptr %0, ptr %1) // CHECK: ret public static func classGenericToSelfConditional(_ s: T) -> Self? { return s as? Self } - // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc void @"$s17dynamic_self_cast9SelfCastsC011genericFromD11ConditionalxSgylFZ"(%swift.opaque* noalias nocapture sret({{.*}}) %0, %swift.type* %T, %swift.type* swiftself %1) - // CHECK: call zeroext i1 @swift_dynamicCast(%swift.opaque* {{%.*}}, %swift.opaque* {{%.*}}, %swift.type* %1, %swift.type* %T, {{.*}}) + // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc void @"$s17dynamic_self_cast9SelfCastsC011genericFromD11ConditionalxSgylFZ"(ptr noalias nocapture sret({{.*}}) %0, ptr %T, ptr swiftself %1) + // CHECK: call zeroext i1 @swift_dynamicCast(ptr {{%.*}}, ptr {{%.*}}, ptr %1, ptr %T, {{.*}}) // CHECK: ret public static func genericFromSelfConditional() -> T? { let s = Self() return s as? T } - // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc {{i32|i64}} @"$s17dynamic_self_cast9SelfCastsC016classGenericFromD11ConditionalxSgyRlzClFZ"(%swift.type* %T, %swift.type* swiftself %0) - // CHECK: call zeroext i1 @swift_dynamicCast(%swift.opaque* {{%.*}}, %swift.opaque* {{%.*}}, %swift.type* %0, %swift.type* %T, {{.*}}) + // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc {{i32|i64}} @"$s17dynamic_self_cast9SelfCastsC016classGenericFromD11ConditionalxSgyRlzClFZ"(ptr %T, ptr swiftself %0) + // CHECK: call zeroext i1 @swift_dynamicCast(ptr {{%.*}}, ptr {{%.*}}, ptr %0, ptr %T, {{.*}}) // CHECK: ret public static func classGenericFromSelfConditional() -> T? { let s = Self() diff --git a/test/IRGen/enum_derived.swift b/test/IRGen/enum_derived.swift index 1710d73f3928d..02f91193ec81d 100644 --- a/test/IRGen/enum_derived.swift +++ b/test/IRGen/enum_derived.swift @@ -1,9 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -module-name def_enum -o %t %S/Inputs/def_enum.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -O -primary-file %s -emit-ir | %FileCheck -check-prefix=CHECK -check-prefix=CHECK-NORMAL %s -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -O -primary-file %s -enable-testing -emit-ir | %FileCheck -check-prefix=CHECK -check-prefix=CHECK-TESTABLE %s -// RUN: %target-swift-frontend -I %t -O -primary-file %s -emit-ir -// RUN: %target-swift-frontend -I %t -O -primary-file %s -enable-testing -emit-ir +// RUN: %target-swift-frontend -I %t -O -primary-file %s -emit-ir | %FileCheck -check-prefix=CHECK -check-prefix=CHECK-NORMAL %s +// RUN: %target-swift-frontend -I %t -O -primary-file %s -enable-testing -emit-ir | %FileCheck -check-prefix=CHECK -check-prefix=CHECK-TESTABLE %s import def_enum @@ -31,7 +29,7 @@ enum E { // CHECK-NORMAL-LABEL:define hidden swiftcc void @"$s12enum_derived1EO4hash4intoys6HasherVz_tF" // CHECK-TESTABLE-LABEL:define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s12enum_derived1EO4hash4intoys6HasherVz_tF" // CHECK: [[V:%.*]] = zext i8 %1 to i{{.*}} -// CHECK: tail call swiftcc void @"$ss6HasherV8_combineyySuF"(i{{.*}} [[V]], %Ts6HasherV* +// CHECK: tail call swiftcc void @"$ss6HasherV8_combineyySuF"(i{{.*}} [[V]], ptr // CHECK: ret void // Check for the presence of the hashValue getter, calling Hasher.init() and @@ -39,8 +37,8 @@ enum E { // CHECK-NORMAL-LABEL:define hidden swiftcc i{{.*}} @"$s12enum_derived1EO9hashValueSivg"(i8 %0) // CHECK-TESTABLE-LABEL:define{{( dllexport)?}}{{( protected)?}} swiftcc i{{.*}} @"$s12enum_derived1EO9hashValueSivg"(i8 %0) -// CHECK: call swiftcc void @"$ss6HasherV5_seedABSi_tcfC"(%Ts6HasherV* {{.*}}) -// CHECK: call swiftcc i{{[0-9]+}} @"$ss6HasherV9_finalizeSiyF"(%Ts6HasherV* {{.*}}) +// CHECK: call swiftcc void @"$ss6HasherV5_seedABSi_tcfC"(ptr {{.*}}) +// CHECK: call swiftcc i{{[0-9]+}} @"$ss6HasherV9_finalizeSiyF"(ptr {{.*}}) // CHECK: ret i{{[0-9]+}} %{{[0-9]+}} // Derived conformances from extensions @@ -50,8 +48,8 @@ extension def_enum.TrafficLight : Error {} extension def_enum.Term : Error {} -// CHECK-NORMAL-LABEL: define hidden {{.*}}i64 @"$s12enum_derived7PhantomO8rawValues5Int64Vvg"(i8 %0, %swift.type* nocapture readnone %T) local_unnamed_addr -// CHECK-TESTABLE-LABEL: define{{( dllexport)?}}{{( protected)?}} {{.*}}i64 @"$s12enum_derived7PhantomO8rawValues5Int64Vvg"(i8 %0, %swift.type* nocapture readnone %T) +// CHECK-NORMAL-LABEL: define hidden {{.*}}i64 @"$s12enum_derived7PhantomO8rawValues5Int64Vvg"(i8 %0, ptr nocapture readnone %T) local_unnamed_addr +// CHECK-TESTABLE-LABEL: define{{( dllexport)?}}{{( protected)?}} {{.*}}i64 @"$s12enum_derived7PhantomO8rawValues5Int64Vvg"(i8 %0, ptr nocapture readnone %T) enum Phantom : Int64 { case Up diff --git a/test/IRGen/enum_singleton.swift b/test/IRGen/enum_singleton.swift index f64a07120c3b0..0df76406a196b 100644 --- a/test/IRGen/enum_singleton.swift +++ b/test/IRGen/enum_singleton.swift @@ -1,7 +1,5 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s --check-prefix=CHECK -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -O %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-OPT -// RUN: %target-swift-frontend -emit-ir %s -// RUN: %target-swift-frontend -emit-ir -O %s +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s --check-prefix=CHECK +// RUN: %target-swift-frontend -emit-ir -O %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-OPT public enum Payload { case c1(Bool) @@ -18,19 +16,19 @@ public enum SingletonEnum { // CHECK: ret void // CHECK: } -// CHECK: define internal %swift.opaque* @"$s14enum_singleton13SingletonEnumOwcp" -// CHECK-OPT: [[R0:%.*]] = tail call %swift.opaque* @"{{.*}}OwcpTm" -// CHECK-OPT: ret %swift.opaque* [[R0]] +// CHECK: define internal ptr @"$s14enum_singleton13SingletonEnumOwcp" +// CHECK-OPT: [[R0:%.*]] = tail call ptr @"{{.*}}OwcpTm" +// CHECK-OPT: ret ptr [[R0]] // CHECK: } -// CHECK: define internal %swift.opaque* @"$s14enum_singleton13SingletonEnumOwca" -// CHECK-OPT: [[R1:%.*]] = tail call %swift.opaque* @"{{.*}}OwcaTm" -// CHECK-OPT: ret %swift.opaque* [[R1]] +// CHECK: define internal ptr @"$s14enum_singleton13SingletonEnumOwca" +// CHECK-OPT: [[R1:%.*]] = tail call ptr @"{{.*}}OwcaTm" +// CHECK-OPT: ret ptr [[R1]] // CHECK: } -// CHECK: define internal %swift.opaque* @"$s14enum_singleton13SingletonEnumOwta" -// CHECK-OPT: [[R2:%.*]] = tail call %swift.opaque* @"{{.*}}OwtaTm" -// CHECK-OPT: ret %swift.opaque* [[R2]] +// CHECK: define internal ptr @"$s14enum_singleton13SingletonEnumOwta" +// CHECK-OPT: [[R2:%.*]] = tail call ptr @"{{.*}}OwtaTm" +// CHECK-OPT: ret ptr [[R2]] // CHECK: } // CHECK: define internal i32 @"$s14enum_singleton13SingletonEnumOwet" diff --git a/test/IRGen/error_self_conformance.sil b/test/IRGen/error_self_conformance.sil index 4a4275280dcc1..7a7139fd26513 100644 --- a/test/IRGen/error_self_conformance.sil +++ b/test/IRGen/error_self_conformance.sil @@ -1,16 +1,14 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -emit-ir %s +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize import Swift sil @take_any_error : $@convention(thin) (@in T) -> () -// CHECK-LABEL: swiftcc void @test(%swift.error** +// CHECK-LABEL: swiftcc void @test(ptr sil @test : $@convention(thin) (@in Error) -> () { entry(%0 : $*Error): - // CHECK: [[VALUE:%.*]] = bitcast %swift.error** %0 to %swift.opaque* - // CHECK-NEXT: [[ERROR_METADATA:%.*]] = call {{.*}}@"$ss5Error_pMD" - // CHECK-NEXT: call swiftcc void @take_any_error(%swift.opaque* noalias nocapture [[VALUE]], %swift.type* [[ERROR_METADATA]], i8** @"$ss5ErrorWS") + // CHECK: [[ERROR_METADATA:%.*]] = call {{.*}}@"$ss5Error_pMD" + // CHECK-NEXT: call swiftcc void @take_any_error(ptr noalias nocapture %0, ptr [[ERROR_METADATA]], ptr @"$ss5ErrorWS") // CHECK-NEXT: ret void %take = function_ref @take_any_error : $@convention(thin) (@in T) -> () apply %take(%0) : $@convention(thin) (@in T) -> () diff --git a/test/IRGen/expressions.swift b/test/IRGen/expressions.swift index 9eddc9634d7dd..635bc63433761 100644 --- a/test/IRGen/expressions.swift +++ b/test/IRGen/expressions.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir -parse-stdlib -disable-access-control | %FileCheck %s -// RUN: %target-swift-frontend -primary-file %s -emit-ir -parse-stdlib -disable-access-control +// RUN: %target-swift-frontend -primary-file %s -emit-ir -parse-stdlib -disable-access-control | %FileCheck %s // REQUIRES: PTRSIZE=64 @@ -7,14 +6,14 @@ import Swift // CHECK: define hidden [[stringLayout:[^@]*]] @"$s11expressions17TestStringLiteralSSyF"() {{.*}} { -// CHECK: call [[stringLayout]] @{{.*}}_builtinStringLiteral{{.*}}(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @".str.21.this is just a\0A\0A test", i64 0, i64 0), i64 21, i1 true) +// CHECK: call [[stringLayout]] @{{.*}}_builtinStringLiteral{{.*}}(ptr @".str.21.this is just a\0A\0A test", i64 21, i1 true) func TestStringLiteral() -> String { return "this is just a\n\u{0a} test" } // CHECK: define hidden [[stringLayout]] @"$s11expressions18TestStringLiteral2SSyF"() {{.*}} { -// CHECK: call [[stringLayout]] @{{.*}}_builtinStringLiteral{{.*}}(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @".str.19.non-ASCII string \C2\B5", i64 0, i64 0), i64 19, i1 false) +// CHECK: call [[stringLayout]] @{{.*}}_builtinStringLiteral{{.*}}(ptr @".str.19.non-ASCII string \C2\B5", i64 19, i1 false) func TestStringLiteral2() -> String { return "non-ASCII string \u{00B5}" } diff --git a/test/IRGen/fixed_layout_class.swift b/test/IRGen/fixed_layout_class.swift index 99a2ccde8f2c6..202dc9e4af623 100644 --- a/test/IRGen/fixed_layout_class.swift +++ b/test/IRGen/fixed_layout_class.swift @@ -4,111 +4,99 @@ // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_enum.swiftmodule -module-name=resilient_enum -I %t %S/../Inputs/resilient_enum.swift // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_class.swiftmodule -module-name=resilient_class -I %t %S/../Inputs/resilient_class.swift // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/fixed_layout_class.swiftmodule -module-name=fixed_layout_class -I %t %S/../Inputs/fixed_layout_class.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -enable-library-evolution %t/class_resilience.swift | %FileCheck %t/class_resilience.swift --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-%target-runtime -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %t/class_resilience.swift +// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %t/class_resilience.swift | %FileCheck %t/class_resilience.swift --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-%target-runtime -DINT=i%target-ptrsize // RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution -O %t/class_resilience.swift // This tests @_fixed_layout classes in resilient modules. import fixed_layout_class -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience20useRootClassPropertyyy013fixed_layout_A0026OutsideParentWithResilientF0CF"(%T18fixed_layout_class34OutsideParentWithResilientPropertyC* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience20useRootClassPropertyyy013fixed_layout_A0026OutsideParentWithResilientF0CF"(ptr %0) public func useRootClassProperty(_ o: OutsideParentWithResilientProperty) { - // CHECK: getelementptr inbounds %T18fixed_layout_class34OutsideParentWithResilientPropertyC, %T18fixed_layout_class34OutsideParentWithResilientPropertyC* %0, i32 0, i32 1 + // CHECK: getelementptr inbounds %T18fixed_layout_class34OutsideParentWithResilientPropertyC, ptr %0, i32 0, i32 1 let a = o.p - // CHECK: load [[INT]], [[INT]]* @"$s18fixed_layout_class34OutsideParentWithResilientPropertyC1s16resilient_struct4SizeVvpWvd" + // CHECK: load [[INT]], ptr @"$s18fixed_layout_class34OutsideParentWithResilientPropertyC1s16resilient_struct4SizeVvpWvd" let b = o.s - // CHECK: load [[INT]], [[INT]]* @"$s18fixed_layout_class34OutsideParentWithResilientPropertyC5colors5Int32VvpWvd" + // CHECK: load [[INT]], ptr @"$s18fixed_layout_class34OutsideParentWithResilientPropertyC5colors5Int32VvpWvd" let c = o.color // CHECK: ret void } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience19useSubclassPropertyyy013fixed_layout_A012OutsideChildCF"(%T18fixed_layout_class12OutsideChildC* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience19useSubclassPropertyyy013fixed_layout_A012OutsideChildCF"(ptr %0) public func useSubclassProperty(_ o: OutsideChild) { - // CHECK: getelementptr inbounds %T18fixed_layout_class13OutsideParentC, %T18fixed_layout_class13OutsideParentC* {{%[0-9]+}}, i32 0, i32 1 + // CHECK: getelementptr inbounds %T18fixed_layout_class13OutsideParentC, ptr {{%[0-9]+}}, i32 0, i32 1 let a = o.property - // CHECK: getelementptr inbounds %T18fixed_layout_class12OutsideChildC, %T18fixed_layout_class12OutsideChildC* %0, i32 0, i32 2 + // CHECK: getelementptr inbounds %T18fixed_layout_class12OutsideChildC, ptr %0, i32 0, i32 2 let b = o.childProperty // CHECK: ret void } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience27useGenericRootClassPropertyyy013fixed_layout_A00D13OutsideParentCyxGlF"(%T18fixed_layout_class20GenericOutsideParentC* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience27useGenericRootClassPropertyyy013fixed_layout_A00D13OutsideParentCyxGlF"(ptr %0) public func useGenericRootClassProperty(_ o: GenericOutsideParent) { // -- we load the base offset twice, first to get the generic parameter out and // then for the property itself. - // CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* getelementptr inbounds ({ [[INT]], i32, i32 }, { [[INT]], i32, i32 }* @"$s18fixed_layout_class20GenericOutsideParentCMo", i32 0, i32 0) + // CHECK: [[BASE:%.*]] = load [[INT]], ptr @"$s18fixed_layout_class20GenericOutsideParentCMo" - // CHECK: [[METADATA_ADDR:%.*]] = bitcast %T18fixed_layout_class20GenericOutsideParentC* %0 to %swift.type** - // CHECK: [[METADATA:%.*]] = load %swift.type*, %swift.type** [[METADATA_ADDR]] + // CHECK: [[METADATA:%.*]] = load ptr, ptr %0 - // CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* getelementptr inbounds ({ [[INT]], i32, i32 }, { [[INT]], i32, i32 }* @"$s18fixed_layout_class20GenericOutsideParentCMo", i32 0, i32 0) + // CHECK: [[BASE:%.*]] = load [[INT]], ptr @"$s18fixed_layout_class20GenericOutsideParentCMo" // CHECK: [[FIELD_OFFSET_OFFSET:%.*]] = add [[INT]] [[BASE]], {{4|8}} - // CHECK: [[METADATA_ADDR:%.*]] = bitcast %swift.type* [[METADATA]] to i8* - // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i8, i8* [[METADATA_ADDR]], [[INT]] [[FIELD_OFFSET_OFFSET]] - // CHECK: [[FIELD_OFFSET_PTR:%.*]] = bitcast i8* [[FIELD_OFFSET_ADDR]] to [[INT]]* - // CHECK: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* [[FIELD_OFFSET_PTR]] + // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i8, ptr [[METADATA]], [[INT]] [[FIELD_OFFSET_OFFSET]] + // CHECK: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr [[FIELD_OFFSET_ADDR]] let a = o.property // CHECK: ret void } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience27useGenericRootClassPropertyyy013fixed_layout_A00D13OutsideParentCySiGF"(%T18fixed_layout_class20GenericOutsideParentCySiG* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience27useGenericRootClassPropertyyy013fixed_layout_A00D13OutsideParentCySiGF"(ptr %0) public func useGenericRootClassProperty(_ o: GenericOutsideParent) { - // CHECK: getelementptr inbounds %T18fixed_layout_class20GenericOutsideParentCySiG, %T18fixed_layout_class20GenericOutsideParentCySiG* %0, i32 0, i32 1 + // CHECK: getelementptr inbounds %T18fixed_layout_class20GenericOutsideParentCySiG, ptr %0, i32 0, i32 1 let a = o.property // CHECK: ret void } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience26useGenericSubclassPropertyyy013fixed_layout_A00D12OutsideChildCyxGlF"(%T18fixed_layout_class19GenericOutsideChildC* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience26useGenericSubclassPropertyyy013fixed_layout_A00D12OutsideChildCyxGlF"(ptr %0) public func useGenericSubclassProperty(_ o: GenericOutsideChild) { // -- we load the base offset twice, first to get the generic parameter out and // then for the property itself. - // CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* getelementptr inbounds ({ [[INT]], i32, i32 }, { [[INT]], i32, i32 }* @"$s18fixed_layout_class19GenericOutsideChildCMo", i32 0, i32 0) + // CHECK: [[BASE:%.*]] = load [[INT]], ptr @"$s18fixed_layout_class19GenericOutsideChildCMo" - // CHECK: [[UPCAST:%.*]] = bitcast %T18fixed_layout_class19GenericOutsideChildC* %0 to %T18fixed_layout_class20GenericOutsideParentC* - // CHECK: [[METADATA_ADDR:%.*]] = bitcast %T18fixed_layout_class20GenericOutsideParentC* [[UPCAST]] to %swift.type** - // CHECK: [[METADATA:%.*]] = load %swift.type*, %swift.type** [[METADATA_ADDR]] + // CHECK: [[METADATA:%.*]] = load ptr, ptr %0 - // CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* getelementptr inbounds ({ [[INT]], i32, i32 }, { [[INT]], i32, i32 }* @"$s18fixed_layout_class20GenericOutsideParentCMo", i32 0, i32 0) + // CHECK: [[BASE:%.*]] = load [[INT]], ptr @"$s18fixed_layout_class20GenericOutsideParentCMo" // CHECK: [[FIELD_OFFSET_OFFSET:%.*]] = add [[INT]] [[BASE]], {{4|8}} - // CHECK: [[METADATA_ADDR:%.*]] = bitcast %swift.type* [[METADATA]] to i8* - // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i8, i8* [[METADATA_ADDR]], [[INT]] [[FIELD_OFFSET_OFFSET]] - // CHECK: [[FIELD_OFFSET_PTR:%.*]] = bitcast i8* [[FIELD_OFFSET_ADDR]] to [[INT]]* - // CHECK: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* [[FIELD_OFFSET_PTR]] + // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i8, ptr [[METADATA]], [[INT]] [[FIELD_OFFSET_OFFSET]] + // CHECK: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr [[FIELD_OFFSET_ADDR]] let a = o.property - // CHECK: [[METADATA_ADDR:%.*]] = bitcast %T18fixed_layout_class19GenericOutsideChildC* %0 to %swift.type** - // CHECK: [[METADATA:%.*]] = load %swift.type*, %swift.type** [[METADATA_ADDR]] + // CHECK: [[METADATA:%.*]] = load ptr, ptr %0 - // CHECK: [[BASE:%.*]] = load [[INT]], [[INT]]* getelementptr inbounds ({ [[INT]], i32, i32 }, { [[INT]], i32, i32 }* @"$s18fixed_layout_class19GenericOutsideChildCMo", i32 0, i32 0) + // CHECK: [[BASE:%.*]] = load [[INT]], ptr @"$s18fixed_layout_class19GenericOutsideChildCMo" // CHECK: [[FIELD_OFFSET_OFFSET:%.*]] = add [[INT]] [[BASE]], {{4|8}} - // CHECK: [[METADATA_ADDR:%.*]] = bitcast %swift.type* [[METADATA]] to i8* - // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i8, i8* [[METADATA_ADDR]], [[INT]] [[FIELD_OFFSET_OFFSET]] - // CHECK: [[FIELD_OFFSET_PTR:%.*]] = bitcast i8* [[FIELD_OFFSET_ADDR]] to [[INT]]* - // CHECK: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* [[FIELD_OFFSET_PTR]] + // CHECK: [[FIELD_OFFSET_ADDR:%.*]] = getelementptr inbounds i8, ptr [[METADATA]], [[INT]] [[FIELD_OFFSET_OFFSET]] + // CHECK: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr [[FIELD_OFFSET_ADDR]] let b = o.childProperty // CHECK: ret void } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience26useGenericSubclassPropertyyy013fixed_layout_A00D12OutsideChildCySiGF"(%T18fixed_layout_class19GenericOutsideChildCySiG* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience26useGenericSubclassPropertyyy013fixed_layout_A00D12OutsideChildCySiGF"(ptr %0) public func useGenericSubclassProperty(_ o: GenericOutsideChild) { - // CHECK: [[UPCAST:%.*]] = bitcast %T18fixed_layout_class19GenericOutsideChildCySiG* %0 to %T18fixed_layout_class20GenericOutsideParentCySiG* - // CHECK: getelementptr inbounds %T18fixed_layout_class20GenericOutsideParentCySiG, %T18fixed_layout_class20GenericOutsideParentCySiG* [[UPCAST]], i32 0, i32 1 + // CHECK: getelementptr inbounds %T18fixed_layout_class20GenericOutsideParentCySiG, ptr %0, i32 0, i32 1 let a = o.property - // CHECK: getelementptr inbounds %T18fixed_layout_class19GenericOutsideChildCySiG, %T18fixed_layout_class19GenericOutsideChildCySiG* %0, i32 0, i32 2 + // CHECK: getelementptr inbounds %T18fixed_layout_class19GenericOutsideChildCySiG, ptr %0, i32 0, i32 2 let b = o.childProperty // CHECK: ret void } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience17callVirtualMethodyy013fixed_layout_A013OutsideParentCF"(%T18fixed_layout_class13OutsideParentC* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience17callVirtualMethodyy013fixed_layout_A013OutsideParentCF"(ptr %0) public func callVirtualMethod(_ o: OutsideParent) { // Note: virtual method calls still use dispatch thunks @@ -124,4 +112,4 @@ public func callVirtualMethod(_ o: OutsideParent) { // Make sure we emit the dispatch thunk: -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience22MyChildOfOutsideParentC9newMethodyyFTj"(%T16class_resilience22MyChildOfOutsideParentC* swiftself %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16class_resilience22MyChildOfOutsideParentC9newMethodyyFTj"(ptr swiftself %0) diff --git a/test/IRGen/fixed_size_buffer_peepholes.sil b/test/IRGen/fixed_size_buffer_peepholes.sil index ab9656fcda118..2577c46d48a14 100644 --- a/test/IRGen/fixed_size_buffer_peepholes.sil +++ b/test/IRGen/fixed_size_buffer_peepholes.sil @@ -1,21 +1,18 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir %s +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s import Builtin protocol P {} // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @dont_crash( -// CHECK: [[TYPE_ADDR:%.*]] = getelementptr inbounds %T27fixed_size_buffer_peepholes1PP, %T27fixed_size_buffer_peepholes1PP* %0, i32 0, i32 1 -// CHECK: [[TYPE:%.*]] = load %swift.type*, %swift.type** [[TYPE_ADDR]] +// CHECK: [[TYPE_ADDR:%.*]] = getelementptr inbounds %T27fixed_size_buffer_peepholes1PP, ptr %0, i32 0, i32 1 +// CHECK: [[TYPE:%.*]] = load ptr, ptr [[TYPE_ADDR]] // CHECK: call {{.*}} @__swift_project_boxed_opaque_existential_1 -// CHECK: [[PTR:%.*]] = bitcast %swift.type* [[TYPE]] to i8*** -// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds i8**, i8*** [[PTR]], {{(i64|i32)}} -1 -// CHECK: [[VWT:%.*]] = load i8**, i8*** [[VWT_ADDR]] -// CHECK: [[WITNESS_ADDR:%.*]] = getelementptr inbounds i8*, i8** [[VWT]], {{(i64|i32)}} 2 -// CHECK: [[WITNESS:%.*]] = load i8*, i8** [[WITNESS_ADDR]] -// CHECK: [[INITWITHCOPY:%.*]] = bitcast i8* [[WITNESS]] to %swift.opaque* (%swift.opaque*, %swift.opaque*, %swift.type*)* -// CHECK: call %swift.opaque* [[INITWITHCOPY]]( +// CHECK: [[VWT_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[TYPE]], {{(i64|i32)}} -1 +// CHECK: [[VWT:%.*]] = load ptr, ptr [[VWT_ADDR]] +// CHECK: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], {{(i64|i32)}} 2 +// CHECK: [[WITNESS:%.*]] = load ptr, ptr [[WITNESS_ADDR]] +// CHECK: call ptr [[WITNESS]]( sil @dont_crash : $@convention(thin) (@in P) -> () { entry(%p : $*P): %0 = alloc_stack $P diff --git a/test/IRGen/frozen_protocols.swift b/test/IRGen/frozen_protocols.swift index 6a11a4d3b2b66..fbbb114c8e9c4 100644 --- a/test/IRGen/frozen_protocols.swift +++ b/test/IRGen/frozen_protocols.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_protocol.swiftmodule -module-name=resilient_protocol %S/../Inputs/resilient_protocol.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -enable-library-evolution %s | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %s +// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %s | %FileCheck %s -DINT=i%target-ptrsize // RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution -O %s import resilient_protocol @@ -40,11 +39,10 @@ public struct ConformsToFrozenProtocol : FrozenProtocol { // Requirements in @_fixed_layout protocols are called by direct witness // table lookup -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16frozen_protocols23callOtherProtocolMethodyyx18resilient_protocol0d6FrozenE0RzlF"(%swift.opaque* noalias nocapture %0, %swift.type* %T, i8** %T.OtherFrozenProtocol) -// CHECK: [[ADDR:%.*]] = getelementptr inbounds i8*, i8** %T.OtherFrozenProtocol, i32 1 -// CHECK: [[FN:%.*]] = load i8*, i8** [[ADDR]] -// CHECK: [[CAST:%.*]] = bitcast i8* [[FN]] to void (%swift.opaque*, %swift.type*, i8**)* -// CHECK: call swiftcc void [[CAST]](%swift.opaque* noalias nocapture swiftself %0, %swift.type* %T, i8** %T.OtherFrozenProtocol) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s16frozen_protocols23callOtherProtocolMethodyyx18resilient_protocol0d6FrozenE0RzlF"(ptr noalias nocapture %0, ptr %T, ptr %T.OtherFrozenProtocol) +// CHECK: [[ADDR:%.*]] = getelementptr inbounds ptr, ptr %T.OtherFrozenProtocol, i32 1 +// CHECK: [[FN:%.*]] = load ptr, ptr [[ADDR]] +// CHECK: call swiftcc void [[FN]](ptr noalias nocapture swiftself %0, ptr %T, ptr %T.OtherFrozenProtocol) // CHECK: ret void // @_fixed_layout protocols still emit method dispatch thunks though, which diff --git a/test/IRGen/function_param_convention.sil b/test/IRGen/function_param_convention.sil index e62bb79a4308c..124b964fefd72 100644 --- a/test/IRGen/function_param_convention.sil +++ b/test/IRGen/function_param_convention.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s -module-name Test | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir %s -module-name Test +// RUN: %target-swift-frontend -emit-ir %s -module-name Test | %FileCheck %s import Builtin @@ -11,7 +10,7 @@ struct X { // Make sure we can irgen a SIL function with various parameter attributes // without choking. This is just a basic reality check. -// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @foo(%T4Test1XV* noalias nocapture sret({{.*}}) %0, %T4Test1XV* noalias nocapture dereferenceable({{.*}}) %1, %T4Test1XV* nocapture dereferenceable({{.*}}) %2, %T4Test1XV* noalias nocapture dereferenceable({{.*}}) %3, i32 %4, i32 %5, i32 %6) {{.*}} { +// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @foo(ptr noalias nocapture sret({{.*}}) %0, ptr noalias nocapture dereferenceable({{.*}}) %1, ptr nocapture dereferenceable({{.*}}) %2, ptr noalias nocapture dereferenceable({{.*}}) %3, i32 %4, i32 %5, i32 %6) {{.*}} { sil @foo : $@convention(thin) (@in X, @inout X, @in_guaranteed X, @owned X, X, @guaranteed X) -> @out X { bb0(%0 : $*X, %1 : $*X, %2 : $*X, %3 : $*X, %4 : $X, %5 : $X, %6 : $X): diff --git a/test/IRGen/function_types.sil b/test/IRGen/function_types.sil index 271d0506acd0d..c2d022bd9ba32 100644 --- a/test/IRGen/function_types.sil +++ b/test/IRGen/function_types.sil @@ -1,10 +1,9 @@ -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target x86_64-apple-macosx10.9 -module-name function_types %s -emit-ir -o - | %FileCheck %s -// RUN: %swift -disable-legacy-type-info -target x86_64-apple-macosx10.9 -module-name function_types %s -emit-ir -o - -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target i386-apple-ios7.1 %s -module-name function_types -emit-ir -o - | %FileCheck %s -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target x86_64-apple-ios7.1 %s -module-name function_types -emit-ir -o - | %FileCheck %s -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target armv7-apple-ios7.1 %s -module-name function_types -emit-ir -o - | %FileCheck %s -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target arm64-apple-ios7.1 %s -module-name function_types -emit-ir -o - | %FileCheck %s -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target x86_64-unknown-linux-gnu -disable-objc-interop %s -module-name function_types -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target x86_64-apple-macosx10.9 -module-name function_types %s -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target i386-apple-ios7.1 %s -module-name function_types -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target x86_64-apple-ios7.1 %s -module-name function_types -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target armv7-apple-ios7.1 %s -module-name function_types -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target arm64-apple-ios7.1 %s -module-name function_types -emit-ir -o - | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target x86_64-unknown-linux-gnu -disable-objc-interop %s -module-name function_types -emit-ir -o - | %FileCheck %s // REQUIRES: CODEGENERATOR=X86 // REQUIRES: CODEGENERATOR=ARM @@ -16,22 +15,22 @@ sil_stage canonical public protocol Protocol {} struct S : Protocol {} -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i8* @thin_func_value(i8* %0) {{.*}} { +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @thin_func_value(ptr %0) {{.*}} { // CHECK-NEXT: entry: -// CHECK-NEXT: ret i8* %0 +// CHECK-NEXT: ret ptr %0 // CHECK-NEXT: } sil @thin_func_value : $@convention(thin) (@convention(thin) () -> ()) -> @convention(thin) () -> () { entry(%x : $@convention(thin) () -> ()): return %x : $@convention(thin) () -> () } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { i8*, %swift.refcounted* } @thick_func_value(i8* %0, %swift.refcounted* %1) {{.*}} { +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { ptr, ptr } @thick_func_value(ptr %0, ptr %1) {{.*}} { // CHECK-NEXT: entry: -// 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 +// CHECK-NEXT: call ptr @swift_retain(ptr returned %1) {{#[0-9]+}} +// CHECK-NEXT: call void @swift_release(ptr %1) {{#[0-9]+}} +// CHECK-NEXT: %3 = insertvalue { ptr, ptr } undef, ptr %0, 0 +// CHECK-NEXT: %4 = insertvalue { ptr, ptr } %3, ptr %1, 1 +// CHECK-NEXT: ret { ptr, ptr } %4 // CHECK-NEXT: } sil @thick_func_value : $@convention(thin) (@owned () -> ()) -> @owned () -> () { entry(%x : $() -> ()): @@ -40,9 +39,9 @@ entry(%x : $() -> ()): return %x : $() -> () } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i8* @thin_witness_value(i8* %0) {{.*}} { +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @thin_witness_value(ptr %0) {{.*}} { // CHECK-NEXT: entry: -// CHECK-NEXT: ret i8* %0 +// CHECK-NEXT: ret ptr %0 // CHECK-NEXT: } sil @thin_witness_value : $@convention(thin) (@convention(witness_method: Protocol) (S) -> ()) -> @convention(witness_method: Protocol) (S) -> () { entry(%x : $@convention(witness_method: Protocol) (S) -> ()): @@ -53,9 +52,9 @@ struct X {} sil @out_void_return : $@convention(thin) () -> @out X -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @use_void_return_value(%T14function_types1XV* noalias nocapture sret({{.*}}) %0) {{.*}} { +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @use_void_return_value(ptr noalias nocapture sret({{.*}}) %0) {{.*}} { // CHECK-NEXT: entry: -// CHECK-NEXT: call swiftcc void @out_void_return(%T14function_types1XV* noalias nocapture sret({{.*}}) %0) +// CHECK-NEXT: call swiftcc void @out_void_return(ptr noalias nocapture sret({{.*}}) %0) // CHECK-NEXT: ret void // CHECK-NEXT: } sil @use_void_return_value : $@convention(thin) () -> @out X { diff --git a/test/IRGen/generic_classes.sil b/test/IRGen/generic_classes.sil index c69345fd00725..e21c9b8006bd5 100644 --- a/test/IRGen/generic_classes.sil +++ b/test/IRGen/generic_classes.sil @@ -1,11 +1,8 @@ // RUN: %empty-directory(%t) // RUN: %{python} %utils/chex.py < %s > %t/generic_classes.sil -// RUN: %target-swift-frontend %use_no_opaque_pointers %t/generic_classes.sil -emit-ir -enable-objc-interop | %FileCheck %t/generic_classes.sil --check-prefixes=CHECK,CHECK-objc,CHECK-%target-import-type,CHECK-%target-import-type-objc -// RUN: %target-swift-frontend %use_no_opaque_pointers %t/generic_classes.sil -emit-ir -disable-objc-interop | %FileCheck %t/generic_classes.sil --check-prefixes=CHECK,CHECK-native,CHECK-%target-import-type -// RUN: %target-swift-frontend %use_no_opaque_pointers -Osize %t/generic_classes.sil -emit-ir | %FileCheck %t/generic_classes.sil --check-prefix=OSIZE -// RUN: %target-swift-frontend %t/generic_classes.sil -emit-ir -enable-objc-interop -// RUN: %target-swift-frontend %t/generic_classes.sil -emit-ir -disable-objc-interop -// RUN: %target-swift-frontend -Osize %t/generic_classes.sil -emit-ir +// RUN: %target-swift-frontend %t/generic_classes.sil -emit-ir -enable-objc-interop | %FileCheck %t/generic_classes.sil --check-prefixes=CHECK,CHECK-objc,CHECK-%target-import-type,CHECK-%target-import-type-objc +// RUN: %target-swift-frontend %t/generic_classes.sil -emit-ir -disable-objc-interop | %FileCheck %t/generic_classes.sil --check-prefixes=CHECK,CHECK-native,CHECK-%target-import-type +// RUN: %target-swift-frontend -Osize %t/generic_classes.sil -emit-ir | %FileCheck %t/generic_classes.sil --check-prefix=OSIZE // REQUIRES: PTRSIZE=64 @@ -22,7 +19,7 @@ import Swift // -- flags: class, generic, unique, has vtable // CHECK-SAME: // -- name -// CHECK-SAME: [12 x i8]* [[ROOTGENERIC_NAME]] +// CHECK-SAME: ptr [[ROOTGENERIC_NAME]] // -- negative size in words // CHECK-SAME: i32 3, // -- positive size in words @@ -36,7 +33,7 @@ import Swift // CHECK-objc-SAME: i32 11, // CHECK-native-SAME: i32 8, // -- template instantiation cache -// CHECK-SAME: [16 x i8*]* @"$s15generic_classes11RootGenericCMI" +// CHECK-SAME: ptr @"$s15generic_classes11RootGenericCMI" // -- template instantiation pattern // CHECK-SAME: @"$s15generic_classes11RootGenericCMP" // -- generic parameters, requirements, key arguments, extra arguments @@ -51,7 +48,7 @@ import Swift // CHECK-LABEL: @"$s15generic_classes11RootGenericCMP" = internal constant // CHECK-SAME: <{ // -- template instantiation function -// CHECK-SAME: %swift.type* (%swift.type_descriptor*, i8**, i8*)* @"$s15generic_classes11RootGenericCMi" +// CHECK-SAME: ptr @"$s15generic_classes11RootGenericCMi" // -- heap destructor // CHECK-SAME: @"$s15generic_classes11RootGenericCfD" // -- ivar destroyer @@ -89,7 +86,7 @@ import Swift // CHECK-DIRECT-SAME: // CHECK-INDIRECT-SAME: // -- name -// CHECK-SAME: [15 x i8]* [[ROOTNONGENERIC_NAME]] +// CHECK-SAME: ptr [[ROOTNONGENERIC_NAME]] // -- num fields // CHECK-SAME: i32 3, // -- -- field offset vector offset @@ -98,27 +95,27 @@ import Swift // CHECK: @"$s15generic_classes14RootNonGenericCMf" = internal global <{ {{.*}} }> <{ // -- destructor -// CHECK-SAME: void (%T15generic_classes14RootNonGenericC*)*{{.*}} @"$s15generic_classes14RootNonGenericCfD{{[^,]*}}"{{[^,]*}}, +// CHECK-SAME: ptr{{.*}} @"$s15generic_classes14RootNonGenericCfD{{[^,]*}}"{{[^,]*}}, // -- witness table pointer -// CHECK-DIRECT-SAME: i8** {{.*}}@"$sBoWV{{(\.[^"]*)?}}", -// CHECK-INDIRECT-SAME: i8** null, +// CHECK-DIRECT-SAME: ptr {{.*}}@"$sBoWV{{(\.[^"]*)?}}", +// CHECK-INDIRECT-SAME: ptr null, // -- swift object type // CHECK-objc-SAME: i64 {{.*}}@"$s15generic_classes14RootNonGenericCMm{{(\.[^"]*)?}}" // CHECK-native-SAME: i64 0, // -- superclass -// CHECK-DIRECT-objc-SAME: %objc_class* {{.*}}@"OBJC_CLASS_$_{{(_TtCs12_)?}}SwiftObject{{(.ptrauth)?}}" -// CHECK-INDIRECT-objc-SAME: %swift.type* null, -// CHECK-native-SAME: %swift.type* null, +// CHECK-DIRECT-objc-SAME: ptr {{.*}}@"OBJC_CLASS_$_{{(_TtCs12_)?}}SwiftObject{{(.ptrauth)?}}" +// CHECK-INDIRECT-objc-SAME: ptr null, +// CHECK-native-SAME: ptr null, // -- objc only fields -// CHECK-objc-SAME: %swift.opaque* @_objc_empty_cache, -// CHECK-objc-SAME: %swift.opaque* null, +// CHECK-objc-SAME: ptr @_objc_empty_cache, +// CHECK-objc-SAME: ptr null, // CHECK-objc-SAME: @_DATA__TtC15generic_classes14RootNonGeneric // -- flags, sizes, and offsets... // CHECK-SAME: i32 33, // CHECK-SAME: i16 7, // CHECK-SAME: i16 0, // -- nominal type descriptor -// CHECK-SAME: {{.*}}* @"$s15generic_classes14RootNonGenericCMn{{[^,]*}}" +// CHECK-SAME: ptr @"$s15generic_classes14RootNonGenericCMn{{[^,]*}}" // CHECK-SAME: }> // CHECK: @"$s15generic_classes015GenericInheritsC0CMn" = hidden constant @@ -127,7 +124,7 @@ import Swift // CHECK: @"$s15generic_classes015GenericInheritsC0CMP" = internal constant // -- template instantiation function -// CHECK-SAME: %swift.type* (%swift.type_descriptor*, i8**, i8*)* @"$s15generic_classes015GenericInheritsC0CMi" +// CHECK-SAME: ptr @"$s15generic_classes015GenericInheritsC0CMi" // -- pattern flags (1 == has extra data pattern) // CHECK-native-SAME: i32 0, // CHECK-objc-SAME: i32 1, @@ -257,21 +254,18 @@ sil_vtable RecursiveGenericInheritsGeneric {} sil @$s15generic_classes024RecursiveGenericInheritsD0CfD : $@convention(method) (RecursiveGenericInheritsGeneric) -> () -// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc [[ROOTGENERIC]]* @RootGeneric_fragile_dependent_alloc -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s15generic_classes11RootGenericCMa"(i64 0, %swift.type* %G) +// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @RootGeneric_fragile_dependent_alloc +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s15generic_classes11RootGenericCMa"(i64 0, ptr %G) // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK: [[METADATA_ARRAY:%.*]] = bitcast %swift.type* [[METADATA]] to i8* -// CHECK-objc: [[T0:%.*]] = getelementptr inbounds i8, i8* [[METADATA_ARRAY]], i32 48 -// CHECK-native: [[T0:%.*]] = getelementptr inbounds i8, i8* [[METADATA_ARRAY]], i32 24 -// CHECK: [[T1:%.*]] = bitcast i8* [[T0]] to i32* -// CHECK: [[SIZE32:%.*]] = load i32, i32* [[T1]], align 8 +// CHECK-objc: [[T0:%.*]] = getelementptr inbounds i8, ptr [[METADATA]], i32 48 +// CHECK-native: [[T0:%.*]] = getelementptr inbounds i8, ptr [[METADATA]], i32 24 +// CHECK: [[SIZE32:%.*]] = load i32, ptr [[T0]], align 8 // CHECK: [[SIZE:%.*]] = zext i32 [[SIZE32]] to i64 -// CHECK-objc: [[T0:%.*]] = getelementptr inbounds i8, i8* [[METADATA_ARRAY]], i32 52 -// CHECK-native: [[T0:%.*]] = getelementptr inbounds i8, i8* [[METADATA_ARRAY]], i32 28 -// CHECK: [[T1:%.*]] = bitcast i8* [[T0]] to i16* -// CHECK: [[ALIGN16:%.*]] = load i16, i16* [[T1]], align 4 +// CHECK-objc: [[T0:%.*]] = getelementptr inbounds i8, ptr [[METADATA]], i32 52 +// CHECK-native: [[T0:%.*]] = getelementptr inbounds i8, ptr [[METADATA]], i32 28 +// CHECK: [[ALIGN16:%.*]] = load i16, ptr [[T0]], align 4 // CHECK: [[ALIGN:%.*]] = zext i16 [[ALIGN16]] to i64 -// CHECK: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], i64 [[SIZE]], i64 [[ALIGN]]) +// CHECK: call noalias ptr @swift_allocObject(ptr [[METADATA]], i64 [[SIZE]], i64 [[ALIGN]]) sil @RootGeneric_fragile_dependent_alloc : $ () -> RootGeneric { entry: %x = alloc_ref $RootGeneric @@ -280,7 +274,7 @@ entry: // RootGeneric.x has fixed layout // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc i8 @RootGeneric_concrete_fragile_dependent_member_access_x -// CHECK: getelementptr inbounds [[ROOTGENERIC]], [[ROOTGENERIC]]* %0, i32 0, i32 1 +// CHECK: getelementptr inbounds [[ROOTGENERIC]], ptr %0, i32 0, i32 1 sil @RootGeneric_concrete_fragile_dependent_member_access_x : $ (RootGeneric) -> UInt8 { entry(%c : $RootGeneric): %p = ref_element_addr %c : $RootGeneric, #RootGeneric.x @@ -290,13 +284,10 @@ entry(%c : $RootGeneric): // RootGeneric.y has dependent layout; load the offset from the metadata // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @RootGeneric_concrete_fragile_dependent_member_access_y -// CHECK: [[TYPE_METADATA_ARRAY:%.*]] = bitcast %swift.type* {{%.*}} to i64* -// CHECK-objc: [[Y_OFFSET_ADDR:%.*]] = getelementptr inbounds i64, i64* [[TYPE_METADATA_ARRAY]], i64 12 -// CHECK-native: [[Y_OFFSET_ADDR:%.*]] = getelementptr inbounds i64, i64* [[TYPE_METADATA_ARRAY]], i64 9 -// CHECK: [[Y_OFFSET:%.*]] = load i64, i64* [[Y_OFFSET_ADDR]], align 8 -// CHECK: [[CLASS_BYTE_ARRAY:%.*]] = bitcast [[ROOTGENERIC]]* {{%.*}} to i8* -// CHECK: [[Y_ADDR:%.*]] = getelementptr inbounds i8, i8* [[CLASS_BYTE_ARRAY]], i64 [[Y_OFFSET]] -// CHECK: bitcast i8* [[Y_ADDR]] to %swift.opaque* +// CHECK-objc: [[Y_OFFSET_ADDR:%.*]] = getelementptr inbounds i64, ptr {{%.*}}, i64 12 +// CHECK-native: [[Y_OFFSET_ADDR:%.*]] = getelementptr inbounds i64, ptr {{%.*}}, i64 9 +// CHECK: [[Y_OFFSET:%.*]] = load i64, ptr [[Y_OFFSET_ADDR]], align 8 +// CHECK: [[Y_ADDR:%.*]] = getelementptr inbounds i8, ptr {{%.*}}, i64 [[Y_OFFSET]] sil @RootGeneric_concrete_fragile_dependent_member_access_y : $ (RootGeneric) -> @out F { entry(%z : $*F, %c : $RootGeneric): %p = ref_element_addr %c : $RootGeneric, #RootGeneric.y @@ -306,8 +297,7 @@ entry(%z : $*F, %c : $RootGeneric): } // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @RootGeneric_subst_concrete_fragile_dependent_member_access_y -// CHECK: [[Y_ADDR:%.*]] = getelementptr inbounds {{.*}}, {{.*}}* %1, i32 0, i32 3 -// CHECK: bitcast %TSi* [[Y_ADDR]] to i8* +// CHECK: [[Y_ADDR:%.*]] = getelementptr inbounds {{.*}}, ptr %1, i32 0, i32 3 sil @RootGeneric_subst_concrete_fragile_dependent_member_access_y : $(RootGeneric) -> @out Int { entry(%z : $*Int, %c : $RootGeneric): %p = ref_element_addr %c : $RootGeneric, #RootGeneric.y @@ -318,13 +308,10 @@ entry(%z : $*Int, %c : $RootGeneric): // RootGeneric.z has dependent layout; load the offset from the metadata // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i8 @RootGeneric_concrete_fragile_dependent_member_access_z -// CHECK: [[TYPE_METADATA_ARRAY:%.*]] = bitcast %swift.type* {{%.*}} to i64* -// CHECK-objc: [[Z_OFFSET_ADDR:%.*]] = getelementptr inbounds i64, i64* [[TYPE_METADATA_ARRAY]], i64 13 -// CHECK-native: [[Z_OFFSET_ADDR:%.*]] = getelementptr inbounds i64, i64* [[TYPE_METADATA_ARRAY]], i64 10 -// CHECK: [[Z_OFFSET:%.*]] = load i64, i64* [[Z_OFFSET_ADDR]], align 8 -// CHECK: [[CLASS_BYTE_ARRAY:%.*]] = bitcast [[ROOTGENERIC]]* {{%.*}} to i8* -// CHECK: [[Z_ADDR:%.*]] = getelementptr inbounds i8, i8* [[CLASS_BYTE_ARRAY]], i64 [[Z_OFFSET]] -// CHECK: bitcast i8* [[Z_ADDR]] to %Ts5UInt8V* +// CHECK-objc: [[Z_OFFSET_ADDR:%.*]] = getelementptr inbounds i64, ptr {{%.*}}, i64 13 +// CHECK-native: [[Z_OFFSET_ADDR:%.*]] = getelementptr inbounds i64, ptr {{%.*}}, i64 10 +// CHECK: [[Z_OFFSET:%.*]] = load i64, ptr [[Z_OFFSET_ADDR]], align 8 +// CHECK: [[Z_ADDR:%.*]] = getelementptr inbounds i8, ptr {{%.*}}, i64 [[Z_OFFSET]] sil @RootGeneric_concrete_fragile_dependent_member_access_z : $ (RootGeneric) -> UInt8 { entry(%c : $RootGeneric): %p = ref_element_addr %c : $RootGeneric, #RootGeneric.z @@ -333,9 +320,9 @@ entry(%c : $RootGeneric): } // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i8 @RootGeneric_subst_concrete_fragile_dependent_member_access_z -// CHECK: [[Z_ADDR:%.*]] = getelementptr inbounds {{.*}}, {{.*}}* %0, i32 0, i32 4 -// CHECK: [[T0:%.*]] = getelementptr inbounds %Ts5UInt8V, %Ts5UInt8V* [[Z_ADDR]], i32 0, i32 0 -// CHECK: load i8, i8* [[T0]], align +// CHECK: [[Z_ADDR:%.*]] = getelementptr inbounds {{.*}}, ptr %0, i32 0, i32 4 +// CHECK: [[T0:%.*]] = getelementptr inbounds %Ts5UInt8V, ptr [[Z_ADDR]], i32 0, i32 0 +// CHECK: load i8, ptr [[T0]], align sil @RootGeneric_subst_concrete_fragile_dependent_member_access_z : $(RootGeneric) -> UInt8 { entry(%c : $RootGeneric): %p = ref_element_addr %c : $RootGeneric, #RootGeneric.z @@ -358,65 +345,62 @@ entry(%c : $RootGeneric): } */ -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal %swift.type* @"$s15generic_classes11RootGenericCMi"(%swift.type_descriptor* %0, i8** %1, i8* %2) {{.*}} { -// CHECK: [[METADATA:%.*]] = call{{( tail)?}} %swift.type* @swift_allocateGenericClassMetadata(%swift.type_descriptor* {{%[0-9,a-z,A-Z]+}}, i8** %1, i8* %2) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal ptr @"$s15generic_classes11RootGenericCMi"(ptr %0, ptr %1, ptr %2) {{.*}} { +// CHECK: [[METADATA:%.*]] = call{{( tail)?}} ptr @swift_allocateGenericClassMetadata(ptr {{%[0-9,a-z,A-Z]+}}, ptr %1, ptr %2) // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal swiftcc %swift.metadata_response @"$s15generic_classes11RootGenericCMr" -// CHECK-SAME: (%swift.type* [[METADATA:%.*]], i8* %0, i8** %1) {{.*}} { +// CHECK-SAME: (ptr [[METADATA:%.*]], ptr %0, ptr %1) {{.*}} { // -- initialize the dependent field offsets -// CHECK: call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* [[METADATA]], i64 0, i64 3, i8*** {{%.*}}, i64* {{%.*}}) +// CHECK: call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr [[METADATA]], i64 0, i64 3, ptr {{%.*}}, ptr {{%.*}}) // CHECK: } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal %swift.type* @"$s15generic_classes22RootGenericFixedLayoutCMi"(%swift.type_descriptor* %0, i8** %1, i8* %2) {{.*}} { -// CHECK: [[METADATA:%.*]] ={{( tail)?}} call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_descriptor* {{%[0-9,a-z,A-Z]+}}, i8** %1, i8* %2) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal ptr @"$s15generic_classes22RootGenericFixedLayoutCMi"(ptr %0, ptr %1, ptr %2) {{.*}} { +// CHECK: [[METADATA:%.*]] ={{( tail)?}} call ptr @swift_allocateGenericClassMetadata(ptr {{%[0-9,a-z,A-Z]+}}, ptr %1, ptr %2) // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal swiftcc %swift.metadata_response @"$s15generic_classes22RootGenericFixedLayoutCMr" -// CHECK-SAME: (%swift.type* [[METADATA:%.*]], i8* %0, i8** %1) {{.*}} { -// CHECK: call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* [[METADATA]], i64 0, i64 3, i8*** {{%.*}}, i64* {{%.*}}) +// CHECK-SAME: (ptr [[METADATA:%.*]], ptr %0, ptr %1) {{.*}} { +// CHECK: call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr [[METADATA]], i64 0, i64 3, ptr {{%.*}}, ptr {{%.*}}) // CHECK: } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal %swift.type* @"$s15generic_classes015GenericInheritsC0CMi"(%swift.type_descriptor* %0, i8** %1, i8* %2) {{.*}} { +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} internal ptr @"$s15generic_classes015GenericInheritsC0CMi"(ptr %0, ptr %1, ptr %2) {{.*}} { // Bind the generic parameters. -// CHECK: [[T0:%.*]] = bitcast i8** %1 to %swift.type** -// CHECK: %A = load %swift.type*, %swift.type** [[T0]] -// CHECK: [[T1:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[T0]], i32 1 -// CHECK: %B = load %swift.type*, %swift.type** [[T1]] +// CHECK: %A = load ptr, ptr %1 +// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr %1, i32 1 +// CHECK: %B = load ptr, ptr [[T1]] // Construct the class. -// CHECK: [[METADATA:%.*]] ={{( tail)?}} call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_descriptor* {{%[0-9,a-z,A-Z]+}}, i8** %1, i8* %2) -// CHECK-NEXT: ret %swift.type* [[METADATA]] +// CHECK: [[METADATA:%.*]] ={{( tail)?}} call ptr @swift_allocateGenericClassMetadata(ptr {{%[0-9,a-z,A-Z]+}}, ptr %1, ptr %2) +// CHECK-NEXT: ret ptr [[METADATA]] // CHECK-LABEL: define{{( protected)?}} internal swiftcc %swift.metadata_response @"$s15generic_classes015GenericInheritsC0CMr" -// CHECK-SAME: (%swift.type* [[METADATA:%.*]], i8* %0, i8** %1) {{.*}} { +// CHECK-SAME: (ptr [[METADATA:%.*]], ptr %0, ptr %1) {{.*}} { // Initialize our own dependent field offsets. -// CHECK: [[METADATA_ARRAY:%.*]] = bitcast %swift.type* [[METADATA]] to i64* -// CHECK-objc: [[OFFSETS:%.*]] = getelementptr inbounds i64, i64* [[METADATA_ARRAY]], i64 20 -// CHECK-native: [[OFFSETS:%.*]] = getelementptr inbounds i64, i64* [[METADATA_ARRAY]], i64 17 -// CHECK: [[FIELDS_ADDR:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %classFields, i32 0, i32 0 -// CHECK: [[T0:%.*]] = call{{( tail)?}} swiftcc %swift.metadata_response @swift_checkMetadataState(i64 319, %swift.type* %B) +// CHECK-objc: [[OFFSETS:%.*]] = getelementptr inbounds i64, ptr [[METADATA]], i64 20 +// CHECK-native: [[OFFSETS:%.*]] = getelementptr inbounds i64, ptr [[METADATA]], i64 17 +// CHECK: [[FIELDS_ADDR:%.*]] = getelementptr inbounds [1 x ptr], ptr %classFields, i32 0, i32 0 +// CHECK: [[T0:%.*]] = call{{( tail)?}} swiftcc %swift.metadata_response @swift_checkMetadataState(i64 319, ptr %B) // CHECK: [[B_CHECKED:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK: [[B_STATUS:%.*]] = extractvalue %swift.metadata_response [[T0]], 1 // CHECK: [[B_OK:%.*]] = icmp ule i64 [[B_STATUS]], 63 // CHECK: br i1 [[B_OK]], -// CHECK: [[T0:%.*]] = bitcast %swift.type* [[B_CHECKED]] to i8*** -// CHECK: [[T1:%.*]] = getelementptr inbounds i8**, i8*** [[T0]], i64 -1 -// CHECK: [[VWT:%.*]] = load i8**, i8*** [[T1]], align 8 -// CHECK: [[T0:%.*]] = getelementptr inbounds i8*, i8** %{{[0-9a-zA-Z.]+}}, i32 8 -// CHECK: [[T1:%.*]] = getelementptr inbounds i8**, i8*** [[FIELDS_ADDR]], i32 0 -// CHECK: store i8** [[T0]], i8*** [[T1]], align 8 - -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* [[METADATA]], i64 0, i64 1, i8*** [[FIELDS_ADDR]], i64* [[OFFSETS]]) +// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[B_CHECKED]], i64 -1 +// CHECK: [[VWT:%.*]] = load ptr, ptr [[T1]], align 8 +// CHECK: [[T0:%.*]] = getelementptr inbounds ptr, ptr %{{[0-9a-zA-Z.]+}}, i32 8 +// CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[FIELDS_ADDR]], i32 0 +// CHECK: store ptr [[T0]], ptr [[T1]], align 8 + +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr [[METADATA]], i64 0, i64 1, ptr [[FIELDS_ADDR]], ptr [[OFFSETS]]) // CHECK-NEXT: [[INITDEP_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NEXT: [[INITDEP_STATUS:%.*]] = extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq %swift.type* [[INITDEP_METADATA]], null +// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq ptr [[INITDEP_METADATA]], null // CHECK-NEXT: br i1 [[INITDEP_PRESENT]], -// CHECK: [[DEP:%.*]] = phi %swift.type* [ [[B_CHECKED]], {{.*}} ], [ [[INITDEP_METADATA]], {{.*}} ], [ null, {{.*}} ] +// CHECK: [[DEP:%.*]] = phi ptr [ [[B_CHECKED]], {{.*}} ], [ [[INITDEP_METADATA]], {{.*}} ], [ null, {{.*}} ] // CHECK: [[DEP_REQ:%.*]] = phi i64 [ 63, {{.*}} ], [ [[INITDEP_STATUS]], {{.*}} ], [ 0, {{.*}} ] -// CHECK: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[DEP]], 0 +// CHECK: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[DEP]], 0 // CHECK: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], i64 [[DEP_REQ]], 1 // CHECK: ret %swift.metadata_response [[T1]] // CHECK: } -// OSIZE: define hidden swiftcc %swift.metadata_response @"$s15generic_classes11RootGenericCMa"(i64 %0, %swift.type* {{.*}}) [[ATTRS:#[0-9]+]] {{(section)?.*}}{ +// OSIZE: define hidden swiftcc %swift.metadata_response @"$s15generic_classes11RootGenericCMa"(i64 %0, ptr {{.*}}) [[ATTRS:#[0-9]+]] {{(section)?.*}}{ // OSIZE: [[ATTRS]] = {{{.*}}noinline diff --git a/test/IRGen/generic_requirement_objc.sil b/test/IRGen/generic_requirement_objc.sil index 99322aee3a12a..3170b27d31b23 100644 --- a/test/IRGen/generic_requirement_objc.sil +++ b/test/IRGen/generic_requirement_objc.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend %s -emit-ir +// RUN: %target-swift-frontend %s -emit-ir | %FileCheck %s // REQUIRES: objc_interop @@ -8,6 +7,6 @@ import Builtin @objc protocol ObjCProto { } // CHECK: @"$s24generic_requirement_objc13GenericStructVMn" = -// CHECK-SAME: i32 add {{.*}} ptrtoint (i8** @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP24generic_requirement_objc9ObjCProto_" {{.*}} @"$s24generic_requirement_objc13GenericStructVMn", {{.*}} i32 3) +// CHECK-SAME: i32 add {{.*}} ptrtoint (ptr @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP24generic_requirement_objc9ObjCProto_" {{.*}} @"$s24generic_requirement_objc13GenericStructVMn", {{.*}} i32 3) struct GenericStruct { } diff --git a/test/IRGen/global_actor_function_types.sil b/test/IRGen/global_actor_function_types.sil index 0b2ef2d24fbb0..097874eacdbcb 100644 --- a/test/IRGen/global_actor_function_types.sil +++ b/test/IRGen/global_actor_function_types.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -o - -primary-file %s | %FileCheck %s --check-prefix CHECK --check-prefix CHECK-%target-cpu -// RUN: %target-swift-frontend -emit-ir -o - -primary-file %s +// RUN: %target-swift-frontend -emit-ir -o - -primary-file %s | %FileCheck %s --check-prefix CHECK --check-prefix CHECK-%target-cpu // REQUIRES: concurrency import Swift @@ -10,10 +9,10 @@ func globalActorMetatype(_: T.Type) -> Any.Type { return Fn.self } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %swift.type* @"$s4test19globalActorMetatypeyypXpxmlF" +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @"$s4test19globalActorMetatypeyypXpxmlF" // CHECK: [[MAIN_ACTOR_RESPONSE:%[0-9]+]] = call swiftcc %swift.metadata_response @"$sScMMa"(i{{32|64}} 255) // CHECK-NEXT: [[MAIN_ACTOR_METADATA:%[0-9]+]] = extractvalue %swift.metadata_response [[MAIN_ACTOR_RESPONSE]], 0 -// CHECK: call %swift.type* @swift_getFunctionTypeMetadataGlobalActor{{.*}}(i{{32|64}} 335544320, i{{32|64}} 0, %swift.type** null, i32* null, %swift.type* %T, %swift.type* [[MAIN_ACTOR_METADATA]]) +// CHECK: call ptr @swift_getFunctionTypeMetadataGlobalActor{{.*}}(i{{32|64}} 335544320, i{{32|64}} 0, ptr null, ptr null, ptr %T, ptr [[MAIN_ACTOR_METADATA]]) sil [ossa] @$s4test19globalActorMetatypeyypXpxmlF : $@convention(thin) (@thick T.Type) -> @thick Any.Type { bb0(%0 : $@thick T.Type): %2 = metatype $@thin (@MainActor () -> T).Type diff --git a/test/IRGen/global_actor_function_types_backdeploy.sil b/test/IRGen/global_actor_function_types_backdeploy.sil index d6b832e9bcf64..7b26dbff1335b 100644 --- a/test/IRGen/global_actor_function_types_backdeploy.sil +++ b/test/IRGen/global_actor_function_types_backdeploy.sil @@ -1,7 +1,5 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -target %target-cpu-apple-macos12 -emit-ir -o - -primary-file %s | %FileCheck %s --check-prefix CHECK-OS -// RUN: %target-swift-frontend %use_no_opaque_pointers -target %target-cpu-apple-macos11 -emit-ir -o - -primary-file %s | %FileCheck %s --check-prefix CHECK-BACKDEPLOY -// RUN: %target-swift-frontend -target %target-cpu-apple-macos12 -emit-ir -o - -primary-file %s -// RUN: %target-swift-frontend -target %target-cpu-apple-macos11 -emit-ir -o - -primary-file %s +// RUN: %target-swift-frontend -target %target-cpu-apple-macos12 -emit-ir -o - -primary-file %s | %FileCheck %s --check-prefix CHECK-OS +// RUN: %target-swift-frontend -target %target-cpu-apple-macos11 -emit-ir -o - -primary-file %s | %FileCheck %s --check-prefix CHECK-BACKDEPLOY // REQUIRES: concurrency // REQUIRES: OS=macosx @@ -13,8 +11,8 @@ func globalActorMetatype(_: T.Type) -> Any.Type { return Fn.self } -// CHECK-OS: call %swift.type* @swift_getFunctionTypeMetadataGlobalActor{{.*}}(i{{32|64}} 335544320, i{{32|64}} 0, %swift.type** null, i32* null, %swift.type* %T, %swift.type* {{.*}}) -// CHECK-BACKDEPLOY: call %swift.type* @swift_getFunctionTypeMetadataGlobalActorBackDeploy{{.*}}(i{{32|64}} 335544320, i{{32|64}} 0, %swift.type** null, i32* null, %swift.type* %T, %swift.type* {{.*}}) +// CHECK-OS: call ptr @swift_getFunctionTypeMetadataGlobalActor{{.*}}(i{{32|64}} 335544320, i{{32|64}} 0, ptr null, ptr null, ptr %T, ptr {{.*}}) +// CHECK-BACKDEPLOY: call ptr @swift_getFunctionTypeMetadataGlobalActorBackDeploy{{.*}}(i{{32|64}} 335544320, i{{32|64}} 0, ptr null, ptr null, ptr %T, ptr {{.*}}) sil [ossa] @$s4test19globalActorMetatypeyypXpxmlF : $@convention(thin) (@thick T.Type) -> @thick Any.Type { bb0(%0 : $@thick T.Type): %2 = metatype $@thin (@MainActor () -> T).Type diff --git a/test/IRGen/globals.swift b/test/IRGen/globals.swift index f8a2c3ccea028..8e922699640e0 100644 --- a/test/IRGen/globals.swift +++ b/test/IRGen/globals.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -disable-availability-checking -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -primary-file %s -emit-ir -disable-availability-checking +// RUN: %target-swift-frontend -primary-file %s -emit-ir -disable-availability-checking | %FileCheck %s // REQUIRES: swift_in_compiler // REQUIRES: PTRSIZE=64 @@ -52,13 +51,11 @@ extension A { // CHECK-NOT: g8 // CHECK-NOT: g9 -// CHECK: define{{( dllexport)?}}{{( protected)?}} i32 @main(i32 %0, i8** %1) {{.*}} { -// CHECK: store i64 {{.*}}, i64* getelementptr inbounds ([[INT]], [[INT]]* @"$s7globals2g0Sivp", i32 0, i32 0), align 8 +// CHECK: define{{( dllexport)?}}{{( protected)?}} i32 @main(i32 %0, ptr %1) {{.*}} { +// CHECK: store i64 {{.*}}, ptr @"$s7globals2g0Sivp", align 8 // CHECK: [[BUF_PROJ:%.*]] = call {{.*}} @__swift_project_value_buffer({{.*}}s7globals1gQrvp -// CHECK: [[CAST:%.*]] = bitcast {{.*}} [[BUF_PROJ]] -// CHECK: [[CAST2:%.*]] = bitcast {{.*}} [[CAST]] -// CHECK: call void @llvm.memcpy{{.*}}({{.*}}[[CAST2]] +// CHECK: call void @llvm.memcpy{{.*}}({{.*}}[[BUF_PROJ]] public protocol Some {} diff --git a/test/IRGen/has_symbol_async.swift b/test/IRGen/has_symbol_async.swift index fcf7f3ea5ebc2..abef30caa448f 100644 --- a/test/IRGen/has_symbol_async.swift +++ b/test/IRGen/has_symbol_async.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -emit-module-path %t/has_symbol_helper.swiftmodule -parse-as-library %S/Inputs/has_symbol/has_symbol_helper.swift -enable-library-evolution -disable-availability-checking -DCONCURRENCY -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-irgen %s -I %t -module-name test | %FileCheck %s -// RUN: %target-swift-frontend -emit-irgen %s -I %t -module-name test +// RUN: %target-swift-frontend -emit-irgen %s -I %t -module-name test | %FileCheck %s // REQUIRES: concurrency // UNSUPPORTED: OS=windows-msvc @@ -18,11 +17,11 @@ public func testGlobalFunctions() { // --- asyncFunc() --- // CHECK: define linkonce_odr hidden i1 @"$s17has_symbol_helper9asyncFuncyyYaFTwS"() -// CHECK: ret i1 and (i1 icmp ne (void (%swift.context*)* @"$s17has_symbol_helper9asyncFuncyyYaF", void (%swift.context*)* null), i1 icmp ne (%swift.async_func_pointer* @"$s17has_symbol_helper9asyncFuncyyYaFTu", %swift.async_func_pointer* null)) +// CHECK: ret i1 and (i1 icmp ne (ptr @"$s17has_symbol_helper9asyncFuncyyYaF", ptr null), i1 icmp ne (ptr @"$s17has_symbol_helper9asyncFuncyyYaFTu", ptr null)) // --- isolatedFunc() --- // CHECK: define linkonce_odr hidden i1 @"$s17has_symbol_helper12isolatedFuncyyFTwS"() -// CHECK: ret i1 icmp ne (void ()* @"$s17has_symbol_helper12isolatedFuncyyF", void ()* null) +// CHECK: ret i1 icmp ne (ptr @"$s17has_symbol_helper12isolatedFuncyyF", ptr null) public func testActor(_ a: A) { // CHECK: %{{[0-9]+}} = call i1 @"$s17has_symbol_helper1ACACycfcTwS"() @@ -36,8 +35,8 @@ public func testActor(_ a: A) { // --- A.init() --- // CHECK: define linkonce_odr hidden i1 @"$s17has_symbol_helper1ACACycfcTwS"() -// CHECK: ret i1 and (i1 icmp ne (%T17has_symbol_helper1AC* (%T17has_symbol_helper1AC*)* @"$s17has_symbol_helper1ACACycfc", %T17has_symbol_helper1AC* (%T17has_symbol_helper1AC*)* null), i1 icmp ne (%T17has_symbol_helper1AC* (%swift.type*)* @"$s17has_symbol_helper1ACACycfC", %T17has_symbol_helper1AC* (%swift.type*)* null)) +// CHECK: ret i1 and (i1 icmp ne (ptr @"$s17has_symbol_helper1ACACycfc", ptr null), i1 icmp ne (ptr @"$s17has_symbol_helper1ACACycfC", ptr null)) // --- A.asyncMethod() --- // CHECK: define linkonce_odr hidden i1 @"$s17has_symbol_helper1AC11asyncMethodyyYaFTwS"() -// CHECK: ret i1 and (i1 and (i1 icmp ne (void (%swift.context*, %T17has_symbol_helper1AC*)* @"$s17has_symbol_helper1AC11asyncMethodyyYaFTj", void (%swift.context*, %T17has_symbol_helper1AC*)* null), i1 icmp ne (%swift.async_func_pointer* @"$s17has_symbol_helper1AC11asyncMethodyyYaFTjTu", %swift.async_func_pointer* null)), i1 icmp ne (%swift.method_descriptor* @"$s17has_symbol_helper1AC11asyncMethodyyYaFTq", %swift.method_descriptor* null)) +// CHECK: ret i1 and (i1 and (i1 icmp ne (ptr @"$s17has_symbol_helper1AC11asyncMethodyyYaFTj", ptr null), i1 icmp ne (ptr @"$s17has_symbol_helper1AC11asyncMethodyyYaFTjTu", ptr null)), i1 icmp ne (ptr @"$s17has_symbol_helper1AC11asyncMethodyyYaFTq", ptr null)) diff --git a/test/IRGen/has_symbol_clang.swift b/test/IRGen/has_symbol_clang.swift index 460f6855470db..3a86a95cf74f1 100644 --- a/test/IRGen/has_symbol_clang.swift +++ b/test/IRGen/has_symbol_clang.swift @@ -1,6 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-irgen %s -I %t -I %S/Inputs/has_symbol -module-name test | %FileCheck %s -// RUN: %target-swift-frontend -emit-irgen %s -I %t -I %S/Inputs/has_symbol -module-name test +// RUN: %target-swift-frontend -emit-irgen %s -I %t -I %S/Inputs/has_symbol -module-name test | %FileCheck %s // UNSUPPORTED: OS=windows-msvc @@ -13,4 +12,4 @@ public func testClangDecls() { // --- clangFunc(_:) --- // CHECK: define linkonce_odr hidden i1 @"$sSo9clangFuncyys5Int32VFTwS"() #1 { -// CHECK: ret i1 icmp ne (void (i32)* @clangFunc, void (i32)* null) +// CHECK: ret i1 icmp ne (ptr @clangFunc, ptr null) diff --git a/test/IRGen/has_symbol_objc.swift b/test/IRGen/has_symbol_objc.swift index 28646d66dc40e..1161522489c06 100644 --- a/test/IRGen/has_symbol_objc.swift +++ b/test/IRGen/has_symbol_objc.swift @@ -1,6 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-irgen %s -I %t -I %S/Inputs/has_symbol -module-name test | %FileCheck %s -// RUN: %target-swift-frontend -emit-irgen %s -I %t -I %S/Inputs/has_symbol -module-name test +// RUN: %target-swift-frontend -emit-irgen %s -I %t -I %S/Inputs/has_symbol -module-name test | %FileCheck %s // REQUIRES: objc_interop @@ -12,4 +11,4 @@ public func testClassTypes() { } // CHECK: define linkonce_odr hidden i1 @"$sSo9ObjCClassCTwS"() -// CHECK: ret i1 icmp ne (%objc_class* @"OBJC_CLASS_$_ObjCClass", %objc_class* null) +// CHECK: ret i1 icmp ne (ptr @"OBJC_CLASS_$_ObjCClass", ptr null) diff --git a/test/IRGen/indirect_argument.sil b/test/IRGen/indirect_argument.sil index 24a8deca56efe..d37a054fcadb5 100644 --- a/test/IRGen/indirect_argument.sil +++ b/test/IRGen/indirect_argument.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -Xllvm -sil-disable-pass=OnoneSimplification %s -emit-ir | %FileCheck -check-prefix=CHECK -check-prefix=CHECK-%target-ptrsize %s -// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=OnoneSimplification %s -emit-ir +// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=OnoneSimplification %s -emit-ir | %FileCheck -check-prefix=CHECK -check-prefix=CHECK-%target-ptrsize %s // UNSUPPORTED: CPU=arm64_32 @@ -16,9 +15,9 @@ struct HugeAlignment { } // TODO: could be the context param -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_method(%T17indirect_argument4HugeV* noalias nocapture swiftself dereferenceable({{.*}}) %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_method(ptr noalias nocapture swiftself dereferenceable({{.*}}) %0) // CHECK-NOT: alloca -// CHECK: call swiftcc void @huge_method(%T17indirect_argument4HugeV* noalias nocapture swiftself dereferenceable({{.*}}) %0) +// CHECK: call swiftcc void @huge_method(ptr noalias nocapture swiftself dereferenceable({{.*}}) %0) sil @huge_method : $@convention(method) (Huge) -> () { entry(%x : $Huge): %f = function_ref @huge_method : $@convention(method) (Huge) -> () @@ -26,9 +25,9 @@ entry(%x : $Huge): return %z : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_param(%T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_param(ptr noalias nocapture dereferenceable({{.*}}) %0) // CHECK-NOT: alloca -// CHECK: call swiftcc void @huge_param(%T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %0) +// CHECK: call swiftcc void @huge_param(ptr noalias nocapture dereferenceable({{.*}}) %0) sil @huge_param : $@convention(thin) (Huge) -> () { entry(%x : $Huge): %f = function_ref @huge_param : $@convention(thin) (Huge) -> () @@ -36,9 +35,9 @@ entry(%x : $Huge): return %z : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_alignment_param(%T17indirect_argument13HugeAlignmentV* noalias nocapture dereferenceable({{.*}}) %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_alignment_param(ptr noalias nocapture dereferenceable({{.*}}) %0) // CHECK-NOT: alloca -// CHECK: call swiftcc void @huge_alignment_param(%T17indirect_argument13HugeAlignmentV* noalias nocapture dereferenceable({{.*}}) %0) +// CHECK: call swiftcc void @huge_alignment_param(ptr noalias nocapture dereferenceable({{.*}}) %0) sil @huge_alignment_param : $@convention(thin) (HugeAlignment) -> () { entry(%x : $HugeAlignment): %f = function_ref @huge_alignment_param : $@convention(thin) (HugeAlignment) -> () @@ -46,9 +45,9 @@ entry(%x : $HugeAlignment): return %z : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_param_and_return(%T17indirect_argument4HugeV* noalias nocapture sret({{.*}}) %0, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_param_and_return(ptr noalias nocapture sret({{.*}}) %0, ptr noalias nocapture dereferenceable({{.*}}) %1) // CHECK: [[TMP_RET:%.*]] = alloca -// CHECK: call swiftcc void @huge_param_and_return(%T17indirect_argument4HugeV* noalias nocapture sret({{.*}}) [[TMP_RET]], %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %1) +// CHECK: call swiftcc void @huge_param_and_return(ptr noalias nocapture sret({{.*}}) [[TMP_RET]], ptr noalias nocapture dereferenceable({{.*}}) %1) sil @huge_param_and_return : $@convention(thin) (Huge) -> Huge { entry(%x : $Huge): %f = function_ref @huge_param_and_return : $@convention(thin) (Huge) -> Huge @@ -56,9 +55,9 @@ entry(%x : $Huge): return %z : $Huge } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_param_and_indirect_return(%T17indirect_argument4HugeV* noalias nocapture sret({{.*}}) %0, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_param_and_indirect_return(ptr noalias nocapture sret({{.*}}) %0, ptr noalias nocapture dereferenceable({{.*}}) %1) // CHECK-NOT: alloca -// CHECK: call swiftcc void @huge_param_and_indirect_return(%T17indirect_argument4HugeV* noalias nocapture sret({{.*}}) %0, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %1) +// CHECK: call swiftcc void @huge_param_and_indirect_return(ptr noalias nocapture sret({{.*}}) %0, ptr noalias nocapture dereferenceable({{.*}}) %1) sil @huge_param_and_indirect_return : $@convention(thin) (Huge) -> @out Huge { entry(%o : $*Huge, %x : $Huge): %f = function_ref @huge_param_and_indirect_return : $@convention(thin) (Huge) -> @out Huge @@ -66,15 +65,14 @@ entry(%o : $*Huge, %x : $Huge): return %z : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_partial_application(%T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %0, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_partial_application(ptr noalias nocapture dereferenceable({{.*}}) %0, ptr noalias nocapture dereferenceable({{.*}}) %1) // CHECK-NOT: alloca -// CHECK: [[CLOSURE:%.*]] = call noalias %swift.refcounted* @swift_allocObject -// CHECK: bitcast %swift.refcounted* [[CLOSURE]] to <{ %swift.refcounted, %T17indirect_argument4HugeV }>* -// CHECK: call swiftcc {{.*}} @"$s24huge_partial_applicationTA{{(\.ptrauth)?}}"{{.*}}(%T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %0, %swift.refcounted* swiftself [[CLOSURE]]) -// CHECK: define internal swiftcc void @"$s24huge_partial_applicationTA"(%T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %0, %swift.refcounted* swiftself %1) +// CHECK: [[CLOSURE:%.*]] = call noalias ptr @swift_allocObject +// CHECK: call swiftcc {{.*}} @"$s24huge_partial_applicationTA{{(\.ptrauth)?}}"{{.*}}(ptr noalias nocapture dereferenceable({{.*}}) %0, ptr swiftself [[CLOSURE]]) +// CHECK: define internal swiftcc void @"$s24huge_partial_applicationTA"(ptr noalias nocapture dereferenceable({{.*}}) %0, ptr swiftself %1) // CHECK: [[TMP_ARG:%.*]] = alloca // CHECK-NOT: tail -// CHECK: call swiftcc void @huge_partial_application(%T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %0, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) [[TMP_ARG]]) +// CHECK: call swiftcc void @huge_partial_application(ptr noalias nocapture dereferenceable({{.*}}) %0, ptr noalias nocapture dereferenceable({{.*}}) [[TMP_ARG]]) sil @huge_partial_application : $@convention(thin) (Huge, Huge) -> () { entry(%x : $Huge, %y : $Huge): %f = function_ref @huge_partial_application : $@convention(thin) (Huge, Huge) -> () @@ -83,15 +81,14 @@ entry(%x : $Huge, %y : $Huge): return %z : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_partial_application_stret(%T17indirect_argument4HugeV* noalias nocapture sret({{.*}}) %0, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %1, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %2) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @huge_partial_application_stret(ptr noalias nocapture sret({{.*}}) %0, ptr noalias nocapture dereferenceable({{.*}}) %1, ptr noalias nocapture dereferenceable({{.*}}) %2) // CHECK: [[TMP_RET:%.*]] = alloca -// CHECK: [[CLOSURE:%.*]] = call noalias %swift.refcounted* @swift_allocObject -// CHECK: bitcast %swift.refcounted* [[CLOSURE]] to <{ %swift.refcounted, %T17indirect_argument4HugeV }>* -// CHECK: call swiftcc {{.*}} @"$s30huge_partial_application_stretTA{{(\.ptrauth)?}}"{{.*}}(%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({{.*}}) %0, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %1, %swift.refcounted* swiftself %2) +// CHECK: [[CLOSURE:%.*]] = call noalias ptr @swift_allocObject +// CHECK: call swiftcc {{.*}} @"$s30huge_partial_application_stretTA{{(\.ptrauth)?}}"{{.*}}(ptr noalias nocapture sret({{.*}}) [[TMP_RET]], ptr noalias nocapture dereferenceable({{.*}}) %1, ptr swiftself [[CLOSURE]]) +// CHECK: define internal swiftcc void @"$s30huge_partial_application_stretTA"(ptr noalias nocapture sret({{.*}}) %0, ptr noalias nocapture dereferenceable({{.*}}) %1, ptr swiftself %2) // CHECK: [[TMP_ARG:%.*]] = alloca // CHECK-NOT: tail -// CHECK: call swiftcc void @huge_partial_application_stret(%T17indirect_argument4HugeV* noalias nocapture sret({{.*}}) %0, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) %1, %T17indirect_argument4HugeV* noalias nocapture dereferenceable({{.*}}) [[TMP_ARG]]) +// CHECK: call swiftcc void @huge_partial_application_stret(ptr noalias nocapture sret({{.*}}) %0, ptr noalias nocapture dereferenceable({{.*}}) %1, ptr noalias nocapture dereferenceable({{.*}}) [[TMP_ARG]]) sil @huge_partial_application_stret : $@convention(thin) (Huge, Huge) -> Huge { entry(%x : $Huge, %y : $Huge): %f = function_ref @huge_partial_application_stret : $@convention(thin) (Huge, Huge) -> Huge diff --git a/test/IRGen/inout_noalias.sil b/test/IRGen/inout_noalias.sil index 274360c8da16d..6a3c4fe86bce6 100644 --- a/test/IRGen/inout_noalias.sil +++ b/test/IRGen/inout_noalias.sil @@ -1,9 +1,8 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -parse-sil %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -parse-sil %s -emit-ir +// RUN: %target-swift-frontend -parse-sil %s -emit-ir | %FileCheck %s import Swift -// CHECK: define{{.*}}swiftcc void @takeInoutAliasable(%TSP* nocapture dereferenceable({{[0-9]+}}) %0, %swift.type* %T) +// CHECK: define{{.*}}swiftcc void @takeInoutAliasable(ptr nocapture dereferenceable({{[0-9]+}}) %0, ptr %T) sil @takeInoutAliasable : $ (@inout_aliasable UnsafePointer) -> () { entry(%ptr : $*UnsafePointer): %retval = tuple () diff --git a/test/IRGen/integer_literal.sil b/test/IRGen/integer_literal.sil index b68429ec4e39d..4a285a266dc52 100644 --- a/test/IRGen/integer_literal.sil +++ b/test/IRGen/integer_literal.sil @@ -1,5 +1,4 @@ -// RUN: %swift %use_no_opaque_pointers -target armv7-apple-ios10 -disable-legacy-type-info -module-name integer_literal %s -gnone -emit-ir | %FileCheck %s -// RUN: %swift -target armv7-apple-ios10 -disable-legacy-type-info -module-name integer_literal %s -gnone -emit-ir +// RUN: %swift -target armv7-apple-ios10 -disable-legacy-type-info -module-name integer_literal %s -gnone -emit-ir | %FileCheck %s // REQUIRES: CODEGENERATOR=ARM @@ -35,22 +34,22 @@ sil @constant_corner_cases : $() -> () { entry: %fn = function_ref @use_literal : $@convention(thin) (Builtin.IntLiteral) -> () - // CHECK: call swiftcc void @use_literal(i32* getelementptr inbounds ([1 x i32], [1 x i32]* @intliteral.-2147483648, i32 0, i32 0), i32 8193) + // CHECK: call swiftcc void @use_literal(ptr @intliteral.-2147483648, i32 8193) // 8193 == 32 << 8 + 1 (negative) %0 = integer_literal $Builtin.IntLiteral, -0x8000_0000 apply %fn(%0) : $@convention(thin) (Builtin.IntLiteral) -> () - // CHECK-NEXT: call swiftcc void @use_literal(i32* getelementptr inbounds ([2 x i32], [2 x i32]* @intliteral.2147483648, i32 0, i32 0), i32 8448) + // CHECK-NEXT: call swiftcc void @use_literal(ptr @intliteral.2147483648, i32 8448) // 8448 == 33 << 8 %1 = integer_literal $Builtin.IntLiteral, 0x8000_0000 apply %fn(%1) : $@convention(thin) (Builtin.IntLiteral) -> () - // CHECK-NEXT: call swiftcc void @use_literal(i32* getelementptr inbounds ([1 x i32], [1 x i32]* @intliteral.0, i32 0, i32 0), i32 256) + // CHECK-NEXT: call swiftcc void @use_literal(ptr @intliteral.0, i32 256) // 256 == 1 << 8 %3 = integer_literal $Builtin.IntLiteral, 0 apply %fn(%3) : $@convention(thin) (Builtin.IntLiteral) -> () - // CHECK-NEXT: call swiftcc void @use_literal(i32* getelementptr inbounds ([1 x i32], [1 x i32]* @intliteral.-1, i32 0, i32 0), i32 257) + // CHECK-NEXT: call swiftcc void @use_literal(ptr @intliteral.-1, i32 257) // 257 == 1 << 8 + 1 (negative) %4 = integer_literal $Builtin.IntLiteral, -1 apply %fn(%4) : $@convention(thin) (Builtin.IntLiteral) -> () @@ -65,12 +64,12 @@ sil @redundant_literals : $() -> () { entry: %fn = function_ref @use_literal : $@convention(thin) (Builtin.IntLiteral) -> () - // CHECK: call swiftcc void @use_literal(i32* getelementptr inbounds ([1 x i32], [1 x i32]* @intliteral.60, i32 0, i32 0), i32 1792) + // CHECK: call swiftcc void @use_literal(ptr @intliteral.60, i32 1792) // 1792 == 7 << 8 %0 = integer_literal $Builtin.IntLiteral, 60 apply %fn(%0) : $@convention(thin) (Builtin.IntLiteral) -> () - // CHECK-NEXT: call swiftcc void @use_literal(i32* getelementptr inbounds ([1 x i32], [1 x i32]* @intliteral.60, i32 0, i32 0), i32 1792) + // CHECK-NEXT: call swiftcc void @use_literal(ptr @intliteral.60, i32 1792) // 1792 == 7 << 8 %1 = integer_literal $Builtin.IntLiteral, 60 apply %fn(%1) : $@convention(thin) (Builtin.IntLiteral) -> () @@ -95,7 +94,7 @@ entry(%0 : $Builtin.IntLiteral): // CHECK: [[INVALID]]: // CHECK-NEXT: br label %[[DONE:[a-z.]+]] // CHECK: [[VALID]]: - // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, i32* %0, align 4 + // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, ptr %0, align 4 // CHECK-NEXT: [[CHUNK0_TRUNC:%.*]] = trunc i32 [[CHUNK0]] to i16 // CHECK-NEXT: br label %[[DONE]] // CHECK: [[DONE]]: @@ -115,7 +114,7 @@ entry(%0 : $Builtin.IntLiteral): // CHECK: [[INVALID]]: // CHECK-NEXT: br label %[[DONE:[a-z.]+]] // CHECK: [[VALID]]: - // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, i32* %0, align 4 + // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, ptr %0, align 4 // CHECK-NEXT: br label %[[DONE]] // CHECK: [[DONE]]: // CHECK-NEXT: [[RESULT:%.*]] = phi i32 [ 0, %[[INVALID]] ], [ [[CHUNK0]], %[[VALID]] ] @@ -134,15 +133,15 @@ entry(%0 : $Builtin.IntLiteral): // CHECK: [[INVALID]]: // CHECK-NEXT: br label %[[DONE:[a-z.]+]] // CHECK: [[VALID]]: - // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, i32* %0, align 4 + // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, ptr %0, align 4 // CHECK-NEXT: [[FINISHED0:%.*]] = icmp ule i32 [[WIDTH]], 32 // CHECK-NEXT: br i1 [[FINISHED0]], label %[[FINISH0:[a-z.]+]], label %[[NEXT0:[a-z.]+]] // CHECK: [[FINISH0]]: // CHECK-NEXT: [[RESULT0:%.*]] = sext i32 [[CHUNK0]] to i48 // CHECK-NEXT: br label %[[DONE]] // CHECK: [[NEXT0]]: - // CHECK-NEXT: [[CHUNKADDR1:%.*]] = getelementptr inbounds i32, i32* %0, i32 1 - // CHECK-NEXT: [[CHUNK1:%.*]] = load i32, i32* [[CHUNKADDR1]], align 4 + // CHECK-NEXT: [[CHUNKADDR1:%.*]] = getelementptr inbounds i32, ptr %0, i32 1 + // CHECK-NEXT: [[CHUNK1:%.*]] = load i32, ptr [[CHUNKADDR1]], align 4 // CHECK-NEXT: [[EXTEND1:%.*]] = zext i32 [[CHUNK0]] to i48 // CHECK-NEXT: [[CHUNK1EXT:%.*]] = zext i32 [[CHUNK1]] to i48 // CHECK-NEXT: [[CHUNK1SHIFT:%.*]] = shl i48 [[CHUNK1EXT]], 32 @@ -165,15 +164,15 @@ entry(%0 : $Builtin.IntLiteral): // CHECK: [[INVALID]]: // CHECK-NEXT: br label %[[DONE:[a-z.]+]] // CHECK: [[VALID]]: - // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, i32* %0, align 4 + // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, ptr %0, align 4 // CHECK-NEXT: [[FINISHED0:%.*]] = icmp ule i32 [[WIDTH]], 32 // CHECK-NEXT: br i1 [[FINISHED0]], label %[[FINISH0:[a-z.]+]], label %[[NEXT0:[a-z.]+]] // CHECK: [[FINISH0]]: // CHECK-NEXT: [[RESULT0:%.*]] = sext i32 [[CHUNK0]] to i64 // CHECK-NEXT: br label %[[DONE]] // CHECK: [[NEXT0]]: - // CHECK-NEXT: [[CHUNKADDR1:%.*]] = getelementptr inbounds i32, i32* %0, i32 1 - // CHECK-NEXT: [[CHUNK1:%.*]] = load i32, i32* [[CHUNKADDR1]], align 4 + // CHECK-NEXT: [[CHUNKADDR1:%.*]] = getelementptr inbounds i32, ptr %0, i32 1 + // CHECK-NEXT: [[CHUNK1:%.*]] = load i32, ptr [[CHUNKADDR1]], align 4 // CHECK-NEXT: [[EXTEND1:%.*]] = zext i32 [[CHUNK0]] to i64 // CHECK-NEXT: [[CHUNK1EXT:%.*]] = zext i32 [[CHUNK1]] to i64 // CHECK-NEXT: [[CHUNK1SHIFT:%.*]] = shl i64 [[CHUNK1EXT]], 32 @@ -204,7 +203,7 @@ entry(%0 : $Builtin.IntLiteral): // CHECK: [[INVALID]]: // CHECK-NEXT: br label %[[DONE:[a-z.]+]] // CHECK: [[VALID]]: - // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, i32* %0, align 4 + // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, ptr %0, align 4 // CHECK-NEXT: [[CHUNK0_TRUNC:%.*]] = trunc i32 [[CHUNK0]] to i16 // CHECK-NEXT: br label %[[DONE]] // CHECK: [[DONE]]: @@ -226,7 +225,7 @@ entry(%0 : $Builtin.IntLiteral): // CHECK: [[INVALID]]: // CHECK-NEXT: br label %[[DONE:[a-z.]+]] // CHECK: [[VALID]]: - // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, i32* %0, align 4 + // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, ptr %0, align 4 // CHECK-NEXT: br label %[[DONE]] // CHECK: [[DONE]]: // CHECK-NEXT: [[RESULT:%.*]] = phi i32 [ 0, %[[INVALID]] ], [ [[CHUNK0]], %[[VALID]] ] @@ -247,15 +246,15 @@ entry(%0 : $Builtin.IntLiteral): // CHECK: [[INVALID]]: // CHECK-NEXT: br label %[[DONE:[a-z.]+]] // CHECK: [[VALID]]: - // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, i32* %0, align 4 + // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, ptr %0, align 4 // CHECK-NEXT: [[FINISHED0:%.*]] = icmp ule i32 [[WIDTH]], 33 // CHECK-NEXT: br i1 [[FINISHED0]], label %[[FINISH0:[a-z.]+]], label %[[NEXT0:[a-z.]+]] // CHECK: [[FINISH0]]: // CHECK-NEXT: [[RESULT0:%.*]] = zext i32 [[CHUNK0]] to i48 // CHECK-NEXT: br label %[[DONE]] // CHECK: [[NEXT0]]: - // CHECK-NEXT: [[CHUNKADDR1:%.*]] = getelementptr inbounds i32, i32* %0, i32 1 - // CHECK-NEXT: [[CHUNK1:%.*]] = load i32, i32* [[CHUNKADDR1]], align 4 + // CHECK-NEXT: [[CHUNKADDR1:%.*]] = getelementptr inbounds i32, ptr %0, i32 1 + // CHECK-NEXT: [[CHUNK1:%.*]] = load i32, ptr [[CHUNKADDR1]], align 4 // CHECK-NEXT: [[EXTEND1:%.*]] = zext i32 [[CHUNK0]] to i48 // CHECK-NEXT: [[CHUNK1EXT:%.*]] = zext i32 [[CHUNK1]] to i48 // CHECK-NEXT: [[CHUNK1SHIFT:%.*]] = shl i48 [[CHUNK1EXT]], 32 @@ -280,15 +279,15 @@ entry(%0 : $Builtin.IntLiteral): // CHECK: [[INVALID]]: // CHECK-NEXT: br label %[[DONE:[a-z.]+]] // CHECK: [[VALID]]: - // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, i32* %0, align 4 + // CHECK-NEXT: [[CHUNK0:%.*]] = load i32, ptr %0, align 4 // CHECK-NEXT: [[FINISHED0:%.*]] = icmp ule i32 [[WIDTH]], 33 // CHECK-NEXT: br i1 [[FINISHED0]], label %[[FINISH0:[a-z.]+]], label %[[NEXT0:[a-z.]+]] // CHECK: [[FINISH0]]: // CHECK-NEXT: [[RESULT0:%.*]] = zext i32 [[CHUNK0]] to i64 // CHECK-NEXT: br label %[[DONE]] // CHECK: [[NEXT0]]: - // CHECK-NEXT: [[CHUNKADDR1:%.*]] = getelementptr inbounds i32, i32* %0, i32 1 - // CHECK-NEXT: [[CHUNK1:%.*]] = load i32, i32* [[CHUNKADDR1]], align 4 + // CHECK-NEXT: [[CHUNKADDR1:%.*]] = getelementptr inbounds i32, ptr %0, i32 1 + // CHECK-NEXT: [[CHUNK1:%.*]] = load i32, ptr [[CHUNKADDR1]], align 4 // CHECK-NEXT: [[EXTEND1:%.*]] = zext i32 [[CHUNK0]] to i64 // CHECK-NEXT: [[CHUNK1EXT:%.*]] = zext i32 [[CHUNK1]] to i64 // CHECK-NEXT: [[CHUNK1SHIFT:%.*]] = shl i64 [[CHUNK1EXT]], 32 @@ -311,7 +310,7 @@ entry(%0 : $Builtin.IntLiteral): // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc half @sitofp16 sil @sitofp16 : $(Builtin.IntLiteral) -> Builtin.FPIEEE16 { entry(%0 : $Builtin.IntLiteral): - // CHECK: [[T0:%.*]] = call swiftcc float @swift_intToFloat32(i32* %0, i32 %1) + // CHECK: [[T0:%.*]] = call swiftcc float @swift_intToFloat32(ptr %0, i32 %1) // CHECK-NEXT: [[T1:%.*]] = fptrunc float [[T0]] to half // CHECK-NEXT: ret half [[T1]] %result = builtin "itofp_with_overflow_IntLiteral_FPIEEE16"(%0 : $Builtin.IntLiteral) : $Builtin.FPIEEE16 @@ -321,7 +320,7 @@ entry(%0 : $Builtin.IntLiteral): // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc float @sitofp32 sil @sitofp32 : $(Builtin.IntLiteral) -> Builtin.FPIEEE32 { entry(%0 : $Builtin.IntLiteral): - // CHECK: [[T0:%.*]] = call swiftcc float @swift_intToFloat32(i32* %0, i32 %1) + // CHECK: [[T0:%.*]] = call swiftcc float @swift_intToFloat32(ptr %0, i32 %1) // CHECK-NEXT: ret float [[T0]] %result = builtin "itofp_with_overflow_IntLiteral_FPIEEE32"(%0 : $Builtin.IntLiteral) : $Builtin.FPIEEE32 return %result : $Builtin.FPIEEE32 @@ -330,7 +329,7 @@ entry(%0 : $Builtin.IntLiteral): // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc double @sitofp64 sil @sitofp64 : $(Builtin.IntLiteral) -> Builtin.FPIEEE64 { entry(%0 : $Builtin.IntLiteral): - // CHECK: [[T0:%.*]] = call swiftcc double @swift_intToFloat64(i32* %0, i32 %1) + // CHECK: [[T0:%.*]] = call swiftcc double @swift_intToFloat64(ptr %0, i32 %1) // CHECK-NEXT: ret double [[T0]] %result = builtin "itofp_with_overflow_IntLiteral_FPIEEE64"(%0 : $Builtin.IntLiteral) : $Builtin.FPIEEE64 return %result : $Builtin.FPIEEE64 @@ -339,7 +338,7 @@ entry(%0 : $Builtin.IntLiteral): // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc x86_fp80 @sitofp80 sil @sitofp80 : $(Builtin.IntLiteral) -> Builtin.FPIEEE80 { entry(%0 : $Builtin.IntLiteral): - // CHECK: [[T0:%.*]] = call swiftcc double @swift_intToFloat64(i32* %0, i32 %1) + // CHECK: [[T0:%.*]] = call swiftcc double @swift_intToFloat64(ptr %0, i32 %1) // CHECK-NEXT: [[T1:%.*]] = fpext double [[T0]] to x86_fp80 // CHECK-NEXT: ret x86_fp80 [[T1]] %result = builtin "itofp_with_overflow_IntLiteral_FPIEEE80"(%0 : $Builtin.IntLiteral) : $Builtin.FPIEEE80 @@ -349,7 +348,7 @@ entry(%0 : $Builtin.IntLiteral): // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc fp128 @sitofp128 sil @sitofp128 : $(Builtin.IntLiteral) -> Builtin.FPIEEE128 { entry(%0 : $Builtin.IntLiteral): - // CHECK: [[T0:%.*]] = call swiftcc double @swift_intToFloat64(i32* %0, i32 %1) + // CHECK: [[T0:%.*]] = call swiftcc double @swift_intToFloat64(ptr %0, i32 %1) // CHECK-NEXT: [[T1:%.*]] = fpext double [[T0]] to fp128 // CHECK-NEXT: ret fp128 [[T1]] %result = builtin "itofp_with_overflow_IntLiteral_FPIEEE128"(%0 : $Builtin.IntLiteral) : $Builtin.FPIEEE128 @@ -362,7 +361,7 @@ entry(%0 : $Builtin.IntLiteral): /* bitWidth, isNegative, wordAtIndex */ /***************************************************************************/ -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @test_bitWidth(i32* %0, i32 %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @test_bitWidth(ptr %0, i32 %1) sil @test_bitWidth : $(Builtin.IntLiteral) -> Builtin.Word { entry(%value : $Builtin.IntLiteral): // CHECK: %2 = lshr i32 %1, 8 @@ -371,7 +370,7 @@ entry(%value : $Builtin.IntLiteral): return %result : $Builtin.Word } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i1 @test_isNegative(i32* %0, i32 %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i1 @test_isNegative(ptr %0, i32 %1) sil @test_isNegative : $(Builtin.IntLiteral) -> Builtin.Int1 { entry(%value : $Builtin.IntLiteral): // CHECK: %2 = trunc i32 %1 to i1 @@ -380,11 +379,11 @@ entry(%value : $Builtin.IntLiteral): return %result : $Builtin.Int1 } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @test_wordAtIndex(i32* %0, i32 %1, i32 %2) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc i32 @test_wordAtIndex(ptr %0, i32 %1, i32 %2) sil @test_wordAtIndex : $(Builtin.IntLiteral, Builtin.Word) -> Builtin.Word { entry(%value : $Builtin.IntLiteral, %index : $Builtin.Word): - // CHECK: %3 = getelementptr inbounds i32, i32* %0, i32 %2 - // CHECK-NEXT: %4 = load i32, i32* %3, align 4 + // CHECK: %3 = getelementptr inbounds i32, ptr %0, i32 %2 + // CHECK-NEXT: %4 = load i32, ptr %3, align 4 // CHECK-NEXT: ret i32 %4 %result = builtin "wordAtIndex_IntLiteral"(%value : $Builtin.IntLiteral, %index : $Builtin.Word) : $Builtin.Word return %result : $Builtin.Word diff --git a/test/IRGen/keypath_witness_overrides.swift b/test/IRGen/keypath_witness_overrides.swift index bc7520f354c90..6cb0c44f75405 100644 --- a/test/IRGen/keypath_witness_overrides.swift +++ b/test/IRGen/keypath_witness_overrides.swift @@ -1,12 +1,11 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -module-name protocol_overrides -emit-module -enable-library-evolution -emit-module-path=%t/protocol_overrides.swiftmodule %S/../SILGen/Inputs/protocol_overrides.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name keypath_witness_overrides -emit-ir %s -I %t | %FileCheck %s -// RUN: %target-swift-frontend -module-name keypath_witness_overrides -emit-ir %s -I %t +// RUN: %target-swift-frontend -module-name keypath_witness_overrides -emit-ir %s -I %t | %FileCheck %s import protocol_overrides // CHECK: @keypath = private global -// CHECK-SAME: %swift.method_descriptor** @"{{got.|\\01__imp__?}}$s18protocol_overrides14OriginalGetterPy7ElementQz5IndexQzcigTq" +// CHECK-SAME: ptr @"{{got.|\\01__imp__?}}$s18protocol_overrides14OriginalGetterPy7ElementQz5IndexQzcigTq" public func getWritableKeyPath(_ c: OS, index: OS.Index) -> AnyKeyPath where OS.Index: Hashable { let keypath = \OS.[index] diff --git a/test/IRGen/keypaths_objc.sil b/test/IRGen/keypaths_objc.sil index c9a585f00b9e0..2945cd877f63c 100644 --- a/test/IRGen/keypaths_objc.sil +++ b/test/IRGen/keypaths_objc.sil @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %{python} %utils/chex.py < %s > %t/keypaths_objc.sil -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers -emit-ir %t/keypaths_objc.sil | %FileCheck %t/keypaths_objc.sil --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir %t/keypaths_objc.sil +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir %t/keypaths_objc.sil | %FileCheck %t/keypaths_objc.sil --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize // REQUIRES: objc_interop import Swift @@ -21,7 +20,7 @@ sil @x_get : $@convention(thin) (@in_guaranteed C) -> @out NSString // CHECK: [[KEYPATH_A:@keypath(\..*)?]] = private global // -- computed, get-only, function-instantiated identifier // CHECK-SAME: , -// CHECK-SAME: i8* (i8*)* [[SELECTOR_FN:@[A-Za-z0-9_.]+]] to +// CHECK-SAME: ptr [[SELECTOR_FN:@[A-Za-z0-9_.]+]] to // CHECK: [[KEYPATH_B:@keypath(\..*)?]] = private global // -- class mutable stored property with indirect offset @@ -31,7 +30,7 @@ sil @x_get : $@convention(thin) (@in_guaranteed C) -> @out NSString // CHECK-LABEL: define swiftcc void @objc_only_property() sil @objc_only_property : $@convention(thin) () -> () { entry: - // CHECK: call %swift.refcounted* @swift_getKeyPath({{.*}} [[KEYPATH_A]] + // CHECK: call ptr @swift_getKeyPath({{.*}} [[KEYPATH_A]] %a = keypath $KeyPath, (objc "x"; root $C; gettable_property $NSString, id #C.x!getter.foreign, getter @x_get : $@convention(thin) (@in_guaranteed C) -> @out NSString) unreachable } @@ -46,15 +45,15 @@ entry(%0 : $@objc_metatype C.Type): unreachable } -// CHECK: define linkonce_odr hidden i8* [[SELECTOR_FN]] +// CHECK: define linkonce_odr hidden ptr [[SELECTOR_FN]] // CHECK-NEXT: entry: // CHECK-NEXT: %1 = load {{.*}}selector(x) -// CHECK-NEXT: ret i8* %1 +// CHECK-NEXT: ret ptr %1 // CHECK-LABEL: define swiftcc void @objc_stored_property() sil @objc_stored_property : $@convention(thin) () -> () { entry: - // CHECK: call %swift.refcounted* @swift_getKeyPath({{.*}} [[KEYPATH_B]] + // CHECK: call ptr @swift_getKeyPath({{.*}} [[KEYPATH_B]] %b = keypath $KeyPath, (objc "stored"; root $C; stored_property #C.stored : $Int) unreachable } diff --git a/test/IRGen/lazy-root-conformance.swift b/test/IRGen/lazy-root-conformance.swift index 25c856c1426e7..7457b25756409 100644 --- a/test/IRGen/lazy-root-conformance.swift +++ b/test/IRGen/lazy-root-conformance.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -DA -parse-as-library -parse-stdlib -module-name A %s -o %t/A.swiftmodule -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -DB -I %t -parse-as-library -parse-stdlib -module-name B -o - %s | %FileCheck %s -check-prefix CHECK-%target-import-type -// RUN: %target-swift-frontend -emit-ir -DB -I %t -parse-as-library -parse-stdlib -module-name B -o - %s +// RUN: %target-swift-frontend -emit-ir -DB -I %t -parse-as-library -parse-stdlib -module-name B -o - %s | %FileCheck %s -check-prefix CHECK-%target-import-type #if A public protocol P { @@ -21,6 +20,6 @@ extension E : Q { } #endif -// CHECK-DIRECT: @"$s1A1EO1B1QADWP" ={{( dllexport)?}}{{( protected)?}} constant [2 x i8*] [i8* bitcast (%swift.protocol_conformance_descriptor* @"$s1A1EO1B1QADMc" to i8*), i8* bitcast (i8** @"$s1A1EOAA1PAAWP" to i8*)] -// CHECK-INDIRECT: @"$s1A1EO1B1QADWP" ={{( dllexport)?}}{{( protected)?}} constant [2 x i8*] [i8* bitcast ({{.*}}* @"$s1A1EO1B1QADMc" to i8*), i8* null] +// CHECK-DIRECT: @"$s1A1EO1B1QADWP" ={{( dllexport)?}}{{( protected)?}} constant [2 x ptr] [ptr @"$s1A1EO1B1QADMc", ptr @"$s1A1EOAA1PAAWP"] +// CHECK-INDIRECT: @"$s1A1EO1B1QADWP" ={{( dllexport)?}}{{( protected)?}} constant [2 x ptr] [ptr @"$s1A1EO1B1QADMc", ptr null] diff --git a/test/IRGen/marker_protocol.swift b/test/IRGen/marker_protocol.swift index cb4adbd8c4403..5a49a145464c0 100644 --- a/test/IRGen/marker_protocol.swift +++ b/test/IRGen/marker_protocol.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir -o - | %FileCheck %s -// RUN: %target-swift-frontend -primary-file %s -emit-ir -o - +// RUN: %target-swift-frontend -primary-file %s -emit-ir -o - | %FileCheck %s // Marker protocols should have no ABI impact at all, so this source file checks // for the absence of symbols related to marker protocols. @@ -48,14 +47,14 @@ struct HasMarkers { // Note: no mention of marker protocols when forming a dictionary. // CHECK-LABEL: define{{.*}}@"$s15marker_protocol0A12InDictionaryypyF" -// CHECK: call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$sSS_15marker_protocol1P_ptMD") +// CHECK: call ptr @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$sSS_15marker_protocol1P_ptMD") public func markerInDictionary() -> Any { let dict: [String: P] = ["answer" : 42] return dict } // Note: no witness tables -// CHECK: swiftcc void @"$s15marker_protocol7genericyyxAA1PRzlF"(%swift.opaque* noalias nocapture %0, %swift.type* %T) +// CHECK: swiftcc void @"$s15marker_protocol7genericyyxAA1PRzlF"(ptr noalias nocapture %0, ptr %T) public func generic(_: T) { } public struct GenericType { } diff --git a/test/IRGen/meta_meta_type.swift b/test/IRGen/meta_meta_type.swift index 3db1f16c90abf..a2be38ce92d25 100644 --- a/test/IRGen/meta_meta_type.swift +++ b/test/IRGen/meta_meta_type.swift @@ -2,8 +2,7 @@ // RUN: %target-build-swift %s -o %t/a.out // RUN: %target-codesign %t/a.out // RUN: %target-run %t/a.out | %FileCheck %s -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir | %FileCheck -check-prefix=CHECKIR %s -// RUN: %target-swift-frontend -primary-file %s -emit-ir +// RUN: %target-swift-frontend -primary-file %s -emit-ir | %FileCheck -check-prefix=CHECKIR %s // REQUIRES: executable_test protocol Proto { @@ -14,21 +13,21 @@ struct Mystruct : Proto { // CHECKIR-LABEL: define hidden {{.*}} @"$s05meta_A5_type6testityAA5Proto_pXpXpAaC_pF" // CHECKIR: [[M1:%[0-9]+]] = call {{.*}} @swift_getDynamicType -// CHECKIR: [[M2:%[0-9]+]] = call {{.*}} @swift_getMetatypeMetadata(%swift.type* [[M1]]) +// CHECKIR: [[M2:%[0-9]+]] = call {{.*}} @swift_getMetatypeMetadata(ptr [[M1]]) // CHECKIR: [[R1:%[0-9]+]] = insertvalue {{.*}} [[M2]] // CHECKIR: [[R2:%[0-9]+]] = insertvalue {{.*}} [[R1]] -// CHECKIR: ret { %swift.type*, i8** } [[R2]] +// CHECKIR: ret { ptr, ptr } [[R2]] func testit(_ p: Proto) -> Proto.Type.Type { return type(of: type(of: p)) } // CHECKIR-LABEL: define hidden {{.*}} @"$s05meta_A5_type7testit2yAA5Proto_pXpXpXpAaC_pF" // CHECKIR: [[M1:%[0-9]+]] = call {{.*}} @swift_getDynamicType -// CHECKIR: [[M2:%[0-9]+]] = call {{.*}} @swift_getMetatypeMetadata(%swift.type* [[M1]]) -// CHECKIR: [[M3:%[0-9]+]] = call {{.*}} @swift_getMetatypeMetadata(%swift.type* [[M2]]) +// CHECKIR: [[M2:%[0-9]+]] = call {{.*}} @swift_getMetatypeMetadata(ptr [[M1]]) +// CHECKIR: [[M3:%[0-9]+]] = call {{.*}} @swift_getMetatypeMetadata(ptr [[M2]]) // CHECKIR: [[R1:%[0-9]+]] = insertvalue {{.*}} [[M3]] // CHECKIR: [[R2:%[0-9]+]] = insertvalue {{.*}} [[R1]] -// CHECKIR: ret { %swift.type*, i8** } [[R2]] +// CHECKIR: ret { ptr, ptr } [[R2]] func testit2(_ p: Proto) -> Proto.Type.Type.Type { return type(of: type(of: type(of: p))) } diff --git a/test/IRGen/metadata.swift b/test/IRGen/metadata.swift index 6474639341c5e..0779e44813e61 100644 --- a/test/IRGen/metadata.swift +++ b/test/IRGen/metadata.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_struct.swiftmodule -module-name=resilient_struct %S/../Inputs/resilient_struct.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name A -I %t %S/Inputs/metadata2.swift -primary-file %s -emit-ir | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-os -// RUN: %target-swift-frontend -module-name A -I %t %S/Inputs/metadata2.swift -primary-file %s -emit-ir +// RUN: %target-swift-frontend -module-name A -I %t %S/Inputs/metadata2.swift -primary-file %s -emit-ir | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-os import resilient_struct @@ -21,7 +20,7 @@ class G { var r = ResilientInt(i:1) } -// CHECK-LABEL: define {{.*}}swiftcc %swift.metadata_response @"$s1A12MyControllerCMr"(%swift.type* %0, i8* %1, i8** %2) +// CHECK-LABEL: define {{.*}}swiftcc %swift.metadata_response @"$s1A12MyControllerCMr"(ptr %0, ptr %1, ptr %2) // CHECK-NOT: ret // CHECK: call swiftcc %swift.metadata_response @"$s1A17InternalContainerVMa"( // CHECK: ret diff --git a/test/IRGen/metadata_dominance.swift b/test/IRGen/metadata_dominance.swift index fc3cdaff63201..bc3d89624d790 100644 --- a/test/IRGen/metadata_dominance.swift +++ b/test/IRGen/metadata_dominance.swift @@ -1,7 +1,5 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -primary-file %s | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend %use_no_opaque_pointers -O -emit-ir -primary-file %s | %FileCheck %s --check-prefix=CHECK-OPT -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -emit-ir -primary-file %s -// RUN: %target-swift-frontend -O -emit-ir -primary-file %s +// RUN: %target-swift-frontend -emit-ir -primary-file %s | %FileCheck %s -DINT=i%target-ptrsize +// RUN: %target-swift-frontend -O -emit-ir -primary-file %s | %FileCheck %s --check-prefix=CHECK-OPT -DINT=i%target-ptrsize func use_metadata(_ f: F) {} @@ -16,21 +14,21 @@ func test1() { // CHECK: call swiftcc i1 @"$s18metadata_dominance4condSbyF"() if cond() { // CHECK: [[T0:%.*]] = call {{.*}} @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$syycMD") -// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(%swift.opaque* {{.*}}, %swift.type* [[T0]]) +// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(ptr {{.*}}, ptr [[T0]]) use_metadata(voidToVoid) // CHECK: call swiftcc i1 @"$s18metadata_dominance4condSbyF"() // CHECK-NOT: @"$syycMD" -// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(%swift.opaque* {{.*}}, %swift.type* [[T0]]) +// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(ptr {{.*}}, ptr [[T0]]) if cond() { use_metadata(voidToVoid) } else { // CHECK-NOT: @"$syycMD" -// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(%swift.opaque* {{.*}}, %swift.type* [[T0]]) +// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(ptr {{.*}}, ptr [[T0]]) use_metadata(voidToVoid) } } // CHECK: [[T1:%.*]] = call {{.*}} @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$syycMD") -// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(%swift.opaque* {{.*}}, %swift.type* [[T1]]) +// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(ptr {{.*}}, ptr [[T1]]) use_metadata(voidToVoid) } @@ -40,17 +38,17 @@ func test2() { if cond() { // CHECK: call swiftcc i1 @"$s18metadata_dominance4condSbyF"() // CHECK: [[T0:%.*]] = call {{.*}} @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$syycMD") -// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(%swift.opaque* {{.*}}, %swift.type* [[T0]]) +// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(ptr {{.*}}, ptr [[T0]]) if cond() { use_metadata(voidToVoid) } else { // CHECK: [[T1:%.*]] = call {{.*}} @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$syycMD") -// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(%swift.opaque* {{.*}}, %swift.type* [[T1]]) +// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(ptr {{.*}}, ptr [[T1]]) use_metadata(voidToVoid) } } // CHECK: [[T2:%.*]] = call {{.*}} @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$syycMD") -// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(%swift.opaque* {{.*}}, %swift.type* [[T2]]) +// CHECK: call swiftcc void @"$s18metadata_dominance04use_A0yyxlF"(ptr {{.*}}, ptr [[T2]]) use_metadata(voidToVoid) } @@ -82,6 +80,6 @@ func testMakeFoo(_ p: P) -> Foo.Type { // The protocol witness for metadata_dominance.P.makeFoo () -> metadata_dominance.Foo in // 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_allocObject(%swift.type* %Self +// CHECK-OPT-LABEL: define internal swiftcc ptr @"$s18metadata_dominance3FooCAA1PA2aDP04makeC0ACyFTW" +// CHECK-OPT-NOT: tail call noalias ptr @swift_allocObject(ptr %Self diff --git a/test/IRGen/mixed_mode_class_with_unimportable_fields.sil b/test/IRGen/mixed_mode_class_with_unimportable_fields.sil index d298319c5c822..3c237f73e7af5 100644 --- a/test/IRGen/mixed_mode_class_with_unimportable_fields.sil +++ b/test/IRGen/mixed_mode_class_with_unimportable_fields.sil @@ -1,9 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -o %t/UsingObjCStuff.swiftmodule -module-name UsingObjCStuff -I %t -I %S/Inputs/mixed_mode -swift-version 4 %S/Inputs/mixed_mode/UsingObjCStuff.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -Xllvm -sil-disable-pass=simplification -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 4 %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V5 --check-prefix=CHECK-V5-%target-ptrsize -DWORD=i%target-ptrsize -// RUN: %target-swift-frontend %use_no_opaque_pointers -Xllvm -sil-disable-pass=simplification -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 5 %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V5 --check-prefix=CHECK-V5-%target-ptrsize -DWORD=i%target-ptrsize -// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 4 %s -// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 5 %s +// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 4 %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V5 --check-prefix=CHECK-V5-%target-ptrsize -DWORD=i%target-ptrsize +// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -emit-ir -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 5 %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V5 --check-prefix=CHECK-V5-%target-ptrsize -DWORD=i%target-ptrsize // REQUIRES: objc_interop @@ -40,31 +38,31 @@ entry: // CHECK-V4-32: [[SIZE:%.*]] = load i32 // CHECK-V4: [[ALIGN16:%.*]] = load i16 // CHECK-V4: [[ALIGN:%.*]] = zext i16 [[ALIGN16]] to [[WORD]] - // CHECK-V4: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] [[SIZE]], [[WORD]] [[ALIGN]]) + // CHECK-V4: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] [[SIZE]], [[WORD]] [[ALIGN]]) // CHECK-V5: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s14UsingObjCStuff10ButtHolderCMa"([[WORD]] 0) // CHECK-V5: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 - // CHECK-V5-32: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] 28, [[WORD]] 3) - // CHECK-V5-64: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] 48, [[WORD]] 7) + // CHECK-V5-32: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 28, [[WORD]] 3) + // CHECK-V5-64: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 48, [[WORD]] 7) %x = alloc_ref $ButtHolder // CHECK-V4: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s4main13SubButtHolderCMa"([[WORD]] 0) // CHECK-V4: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 - // CHECK-V4: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] %{{.*}}, [[WORD]] %{{.*}}) + // CHECK-V4: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] %{{.*}}, [[WORD]] %{{.*}}) // CHECK-V5: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s4main13SubButtHolderCMa"([[WORD]] 0) // CHECK-V5: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 - // CHECK-V5-32: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] 40, [[WORD]] 7) - // CHECK-V5-64: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] 56, [[WORD]] 7) + // CHECK-V5-32: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 40, [[WORD]] 7) + // CHECK-V5-64: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 56, [[WORD]] 7) %y = alloc_ref $SubButtHolder // CHECK-V4: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s4main03SubB10ButtHolderCMa"([[WORD]] 0) // CHECK-V4: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 - // CHECK-V4: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] %{{.*}}, [[WORD]] %{{.*}}) + // CHECK-V4: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] %{{.*}}, [[WORD]] %{{.*}}) // CHECK-V5: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s4main03SubB10ButtHolderCMa"([[WORD]] 0) // CHECK-V5: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 - // CHECK-V5-32: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] 48, [[WORD]] 7) - // CHECK-V5-64: call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[METADATA]], [[WORD]] 64, [[WORD]] 7) + // CHECK-V5-32: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 48, [[WORD]] 7) + // CHECK-V5-64: call noalias ptr @swift_allocObject(ptr [[METADATA]], [[WORD]] 64, [[WORD]] 7) %z = alloc_ref $SubSubButtHolder return %x : $ButtHolder } diff --git a/test/IRGen/move_value.sil b/test/IRGen/move_value.sil index 6d13be40c9497..f7851634009c9 100644 --- a/test/IRGen/move_value.sil +++ b/test/IRGen/move_value.sil @@ -1,5 +1,4 @@ -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target x86_64-apple-macosx10.9 -module-name main %s -emit-ir -o - | %FileCheck %s -// RUN: %swift -disable-legacy-type-info -target x86_64-apple-macosx10.9 -module-name main %s -emit-ir -o - +// RUN: %swift -disable-legacy-type-info -target x86_64-apple-macosx10.9 -module-name main %s -emit-ir -o - | %FileCheck %s // REQUIRES: CODEGENERATOR=X86 @@ -7,7 +6,7 @@ sil_stage canonical import Builtin -// CHECK-LABEL: define swiftcc %swift.refcounted* @move_value_test( +// CHECK-LABEL: define swiftcc ptr @move_value_test( // CHECK-NEXT: entry: // CHECK-NEXT: ret // CHECK-NEXT: } diff --git a/test/IRGen/moveonly_deinit.sil b/test/IRGen/moveonly_deinit.sil index 6741ce5fac5c3..f11d01f1a3024 100644 --- a/test/IRGen/moveonly_deinit.sil +++ b/test/IRGen/moveonly_deinit.sil @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %{python} %utils/chex.py < %s > %t/moveonly_deinit.sil -// RUN: %target-swift-frontend %use_no_opaque_pointers -enable-experimental-feature MoveOnlyEnumDeinits -emit-ir %t/moveonly_deinit.sil | %FileCheck %t/moveonly_deinit.sil --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -// RUN: %target-swift-frontend -enable-experimental-feature MoveOnlyEnumDeinits -emit-ir %t/moveonly_deinit.sil +// RUN: %target-swift-frontend -enable-experimental-feature MoveOnlyEnumDeinits -emit-ir %t/moveonly_deinit.sil | %FileCheck %t/moveonly_deinit.sil --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize // UNSUPPORTED: CPU=arm64e @@ -9,7 +8,7 @@ import Builtin import Swift // Check that box destructor invokes deinit for a captured move-only value. -// CHECK: @[[BOX_STRUCT_METADATA:[A-Za-z0-9_.]+]] = {{.*}} constant %swift.full_boxmetadata { void (%swift.refcounted*)* @[[BOX_STRUCT_DESTRUCTOR:[A-Za-z0-9_.]+]] +// CHECK: @[[BOX_STRUCT_METADATA:[A-Za-z0-9_.]+]] = {{.*}} constant %swift.full_boxmetadata { ptr @[[BOX_STRUCT_DESTRUCTOR:[A-Za-z0-9_.]+]] sil_stage canonical @@ -206,10 +205,8 @@ entry(%b : $MOEnum): // CHECK-LABEL: define{{.*}}@destroy_enum_value_indirect( // CHECK-NEXT: entry: -// CHECK-NEXT: bitcast // CHECK-NEXT: load // CHECK-NEXT: getelementptr -// CHECK-NEXT: bitcast // CHECK-NEXT: load // CHECK-NEXT: zext // CHECK-NEXT: call{{.*}}@destroy_enum( @@ -300,7 +297,7 @@ entry(%b : $*MOGenericDeinit): } // CHECK-LABEL: define{{.*}}@box_struct( -// CHECK: call {{.*}} @swift_allocObject({{.*}} %swift.full_boxmetadata* @[[BOX_STRUCT_METADATA]], +// CHECK: call {{.*}} @swift_allocObject({{.*}} ptr @[[BOX_STRUCT_METADATA]], // CHECK: define{{.*}}@[[BOX_STRUCT_DESTRUCTOR]]( // CHECK: call {{.*}} @destroy_struct diff --git a/test/IRGen/moveonly_deinits.swift b/test/IRGen/moveonly_deinits.swift index fb42dbf30c3ff..483bae7522088 100644 --- a/test/IRGen/moveonly_deinits.swift +++ b/test/IRGen/moveonly_deinits.swift @@ -1,6 +1,5 @@ // TODO: re-enable the simplification passes once rdar://104875010 is fixed -// RUN: %target-swift-emit-ir %use_no_opaque_pointers -enable-experimental-feature MoveOnlyEnumDeinits -Xllvm -sil-disable-pass=simplification %s | %FileCheck -check-prefix=IR %s -// RUN: %target-swift-emit-ir -enable-experimental-feature MoveOnlyEnumDeinits -Xllvm -sil-disable-pass=simplification %s +// RUN: %target-swift-emit-ir -enable-experimental-feature MoveOnlyEnumDeinits -Xllvm -sil-disable-pass=simplification %s | %FileCheck -check-prefix=IR %s // Test that makes sure that at IRGen time we properly handle conditional // releases for trivial and non-trivial move only types. The SIL/SILGen part of @@ -71,21 +70,20 @@ var value: Bool { false } // IR: br i1 {{%.*}}, label %[[BB1:[0-9]+]], label %[[BB2:[0-9]+]] // // IR: [[BB1]]: -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 0 -// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, %TSi* [[GEP]], i32 0, i32 0 -// IR-NEXT: [[LHS:%.*]] = load i64, i64* [[GEP2]] -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 1 -// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, %TSi* [[GEP]], i32 0, i32 0 -// IR-NEXT: [[RHS:%.*]] = load i64, i64* [[GEP2]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 0 +// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, ptr [[GEP]], i32 0, i32 0 +// IR-NEXT: [[LHS:%.*]] = load i64, ptr [[GEP2]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 1 +// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, ptr [[GEP]], i32 0, i32 0 +// IR-NEXT: [[RHS:%.*]] = load i64, ptr [[GEP2]] // IR-NEXT: call swiftcc void @"$s16moveonly_deinits27consumeIntPairWithoutDeinityyAA0defG0VnF"(i64 [[LHS]], i64 [[RHS]]) // IR-NEXT: br label %[[CONT:[0-9]+]] // // IR: [[BB2]]: -// IR-NEXT: call [[TYPE]]* @"$s16moveonly_deinits20IntPairWithoutDeinitVWOh"([[TYPE]]* [[ALLOCA]]) +// IR-NEXT: call ptr @"$s16moveonly_deinits20IntPairWithoutDeinitVWOh"(ptr [[ALLOCA]]) // IR-NEXT: br label %[[CONT]] // // IR: [[CONT]]: -// IR-NEXT: bitcast // IR-NEXT: @llvm.lifetime.end // IR-NEXT: ret void // IR-NEXT: } @@ -101,27 +99,26 @@ public func testIntPairWithoutDeinit() { // IR: br i1 {{%.*}}, label %[[BB1:[0-9]+]], label %[[BB2:[0-9]+]] // // IR: [[BB1]]: -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 0 -// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, %TSi* [[GEP]], i32 0, i32 0 -// IR-NEXT: [[LHS:%.*]] = load i64, i64* [[GEP2]] -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 1 -// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, %TSi* [[GEP]], i32 0, i32 0 -// IR-NEXT: [[RHS:%.*]] = load i64, i64* [[GEP2]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 0 +// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, ptr [[GEP]], i32 0, i32 0 +// IR-NEXT: [[LHS:%.*]] = load i64, ptr [[GEP2]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 1 +// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, ptr [[GEP]], i32 0, i32 0 +// IR-NEXT: [[RHS:%.*]] = load i64, ptr [[GEP2]] // IR-NEXT: call swiftcc void @"$s16moveonly_deinits24consumeIntPairWithDeinityyAA0defG0VnF"( // IR-NEXT: br label %[[CONT:[0-9]+]] // // IR: [[BB2]]: -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 0 -// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, %TSi* [[GEP]], i32 0, i32 0 -// IR-NEXT: [[LHS:%.*]] = load i64, i64* [[GEP2]] -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 1 -// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, %TSi* [[GEP]], i32 0, i32 0 -// IR-NEXT: [[RHS:%.*]] = load i64, i64* [[GEP2]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 0 +// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, ptr [[GEP]], i32 0, i32 0 +// IR-NEXT: [[LHS:%.*]] = load i64, ptr [[GEP2]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 1 +// IR-NEXT: [[GEP2:%.*]] = getelementptr inbounds %TSi, ptr [[GEP]], i32 0, i32 0 +// IR-NEXT: [[RHS:%.*]] = load i64, ptr [[GEP2]] // IR-NEXT: call swiftcc void @"$s16moveonly_deinits17IntPairWithDeinitVfD"(i64 [[LHS]], i64 [[RHS]]) // IR-NEXT: br label %[[CONT]] // // IR: [[CONT]] -// IR-NEXT: bitcast // IR-NEXT: @llvm.lifetime.end // IR-NEXT: ret void // IR-NEXT: } @@ -137,19 +134,18 @@ public func testIntPairWithDeinit() { // IR: br i1 {{%.*}}, label %[[BB1:[0-9]+]], label %[[BB2:[0-9]+]] // // IR: [[BB1]]: -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 0 -// IR-NEXT: [[LHS:%.*]] = load [[KLASS:%T16moveonly_deinits5KlassC]]*, [[KLASS]]** [[GEP]] -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 1 -// IR-NEXT: [[RHS:%.*]] = load [[KLASS]]*, [[KLASS]]** [[GEP]] -// IR-NEXT: call swiftcc void @"$s16moveonly_deinits29consumeKlassPairWithoutDeinityyAA0defG0VnF"([[KLASS]]* [[LHS]], [[KLASS]]* [[RHS]]) +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 0 +// IR-NEXT: [[LHS:%.*]] = load ptr, ptr [[GEP]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 1 +// IR-NEXT: [[RHS:%.*]] = load ptr, ptr [[GEP]] +// IR-NEXT: call swiftcc void @"$s16moveonly_deinits29consumeKlassPairWithoutDeinityyAA0defG0VnF"(ptr [[LHS]], ptr [[RHS]]) // IR-NEXT: br label %[[CONT:[0-9]+]] // // IR: [[BB2]]: -// IR-NEXT: call [[TYPE]]* @"$s16moveonly_deinits22KlassPairWithoutDeinitVWOh"([[TYPE]]* [[ALLOCA]]) +// IR-NEXT: call ptr @"$s16moveonly_deinits22KlassPairWithoutDeinitVWOh"(ptr [[ALLOCA]]) // IR-NEXT: br label %[[CONT]] // // IR: [[CONT]]: -// IR-NEXT: bitcast // IR-NEXT: call void // IR-NEXT: ret void // IR-NEXT: } @@ -165,23 +161,22 @@ public func testKlassPairWithoutDeinit() { // IR: br i1 {{%.*}}, label %[[BB1:[0-9]+]], label %[[BB2:[0-9]+]] // // IR: [[BB1]]: -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 0 -// IR-NEXT: [[LHS:%.*]] = load [[KLASS:%T16moveonly_deinits5KlassC]]*, [[KLASS]]** [[GEP]] -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 1 -// IR-NEXT: [[RHS:%.*]] = load [[KLASS]]*, [[KLASS]]** [[GEP]] -// IR-NEXT: call swiftcc void @"$s16moveonly_deinits26consumeKlassPairWithDeinityyAA0defG0VnF"([[KLASS]]* [[LHS]], [[KLASS]]* [[RHS]]) +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 0 +// IR-NEXT: [[LHS:%.*]] = load ptr, ptr [[GEP]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 1 +// IR-NEXT: [[RHS:%.*]] = load ptr, ptr [[GEP]] +// IR-NEXT: call swiftcc void @"$s16moveonly_deinits26consumeKlassPairWithDeinityyAA0defG0VnF"(ptr [[LHS]], ptr [[RHS]]) // IR-NEXT: br label %[[CONT:[0-9]+]] // // IR: [[BB2]]: -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 0 -// IR-NEXT: [[LHS:%.*]] = load [[KLASS:%T16moveonly_deinits5KlassC]]*, [[KLASS]]** [[GEP]] -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 1 -// IR-NEXT: [[RHS:%.*]] = load [[KLASS]]*, [[KLASS]]** [[GEP]] -// IR-NEXT: call swiftcc void @"$s16moveonly_deinits19KlassPairWithDeinitVfD"([[KLASS]]* [[LHS]], [[KLASS]]* [[RHS]]) +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 0 +// IR-NEXT: [[LHS:%.*]] = load ptr, ptr [[GEP]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 1 +// IR-NEXT: [[RHS:%.*]] = load ptr, ptr [[GEP]] +// IR-NEXT: call swiftcc void @"$s16moveonly_deinits19KlassPairWithDeinitVfD"(ptr [[LHS]], ptr [[RHS]]) // IR-NEXT: br label %[[CONT]] // // IR: [[CONT]] -// IR-NEXT: bitcast // IR-NEXT: @llvm.lifetime.end // IR-NEXT: ret void // IR-NEXT: } @@ -242,11 +237,9 @@ func consumeKlassEnumPairWithDeinit(_ x: __owned KlassEnumPairWithDeinit) { } // IR: br i1 {{%.*}}, label %[[BB1:[0-9]+]], label %[[BB2:[0-9]+]] // // IR: [[BB1]]: -// IR-NEXT: [[CAST:%.*]] = bitcast [[TYPE]]* [[ALLOCA]] to i64* -// IR-NEXT: [[LHS:%.*]] = load i64, i64* [[CAST]] -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 1 -// IR-NEXT: [[BITCAST:%.*]] = bitcast [1 x i8]* [[GEP]] to i1* -// IR-NEXT: [[RHS:%.*]] = load i1, i1* [[BITCAST]] +// IR-NEXT: [[LHS:%.*]] = load i64, ptr [[ALLOCA]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 1 +// IR-NEXT: [[RHS:%.*]] = load i1, ptr [[GEP]] // IR-NEXT: [[RHS_ZEXT:%.*]] = zext i1 [[RHS]] // IR-NEXT: call swiftcc void @"$s16moveonly_deinits31consumeIntEnumPairWithoutDeinityyAA0defgH0OnF"(i64 [[LHS]], i8 [[RHS_ZEXT]]) // IR-NEXT: br label %[[CONT:[0-9]+]] @@ -255,7 +248,6 @@ func consumeKlassEnumPairWithDeinit(_ x: __owned KlassEnumPairWithDeinit) { } // IR-NEXT: br label %[[CONT]] // // IR: [[CONT]]: -// IR-NEXT: bitcast // IR-NEXT: call void @llvm.lifetime.end // IR-NEXT: ret void // IR-NEXT: } @@ -271,27 +263,22 @@ public func testIntEnumPairWithoutDeinit() { // IR: br i1 {{%.*}}, label %[[BB1:[0-9]+]], label %[[BB2:[0-9]+]] // // IR: [[BB1]]: -// IR-NEXT: [[CAST:%.*]] = bitcast [[TYPE]]* [[ALLOCA]] to i64* -// IR-NEXT: [[LHS:%.*]] = load i64, i64* [[CAST]] -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 1 -// IR-NEXT: [[BITCAST:%.*]] = bitcast [1 x i8]* [[GEP]] to i1* -// IR-NEXT: [[RHS:%.*]] = load i1, i1* [[BITCAST]] +// IR-NEXT: [[LHS:%.*]] = load i64, ptr [[ALLOCA]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 1 +// IR-NEXT: [[RHS:%.*]] = load i1, ptr [[GEP]] // IR-NEXT: [[RHS_ZEXT:%.*]] = zext i1 [[RHS]] // IR-NEXT: call swiftcc void @"$s16moveonly_deinits28consumeIntEnumPairWithDeinityyAA0defgH0OnF"(i64 [[LHS]], i8 [[RHS_ZEXT]]) // IR-NEXT: br label %[[CONT:[0-9]+]] // // IR: [[BB2]]: -// IR-NEXT: [[CAST:%.*]] = bitcast [[TYPE]]* [[ALLOCA]] to i64* -// IR-NEXT: [[LHS:%.*]] = load i64, i64* [[CAST]] -// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], [[TYPE]]* [[ALLOCA]], i32 0, i32 1 -// IR-NEXT: [[BITCAST:%.*]] = bitcast [1 x i8]* [[GEP]] to i1* -// IR-NEXT: [[RHS:%.*]] = load i1, i1* [[BITCAST]] +// IR-NEXT: [[LHS:%.*]] = load i64, ptr [[ALLOCA]] +// IR-NEXT: [[GEP:%.*]] = getelementptr inbounds [[TYPE]], ptr [[ALLOCA]], i32 0, i32 1 +// IR-NEXT: [[RHS:%.*]] = load i1, ptr [[GEP]] // IR-NEXT: [[RHS_ZEXT:%.*]] = zext i1 [[RHS]] // IR-NEXT: call swiftcc void @"$s16moveonly_deinits21IntEnumPairWithDeinitOfD"(i64 [[LHS]], i8 [[RHS_ZEXT]]) // IR-NEXT: br label %[[CONT]] // // IR: [[CONT]] -// IR-NEXT: bitcast // IR-NEXT: @llvm.lifetime.end // IR-NEXT: ret void // IR-NEXT: } @@ -307,17 +294,15 @@ public func testIntEnumPairWithDeinit() { // IR: br i1 {{%.*}}, label %[[BB1:[0-9]+]], label %[[BB2:[0-9]+]] // // IR: [[BB1]]: -// IR-NEXT: [[CAST:%.*]] = bitcast [[TYPE]]* [[ALLOCA]] to i64* -// IR-NEXT: [[VALUE:%.*]] = load i64, i64* [[CAST]] +// IR-NEXT: [[VALUE:%.*]] = load i64, ptr [[ALLOCA]] // IR-NEXT: call swiftcc void @"$s16moveonly_deinits33consumeKlassEnumPairWithoutDeinityyAA0defgH0OnF"(i64 [[VALUE]]) // IR-NEXT: br label %[[CONT:[0-9]+]] // // IR: [[BB2]]: -// IR-NEXT: call [[TYPE]]* @"$s16moveonly_deinits26KlassEnumPairWithoutDeinitOWOh"([[TYPE]]* [[ALLOCA]]) +// IR-NEXT: call ptr @"$s16moveonly_deinits26KlassEnumPairWithoutDeinitOWOh"(ptr [[ALLOCA]]) // IR-NEXT: br label %[[CONT]] // // IR: [[CONT]]: -// IR-NEXT: bitcast // IR-NEXT: @llvm.lifetime.end // IR-NEXT: ret void // IR-NEXT: } @@ -369,19 +354,16 @@ public func testKlassEnumPairWithoutDeinit() { // IR: br i1 {{%.*}}, label %[[BB1:[0-9]+]], label %[[BB2:[0-9]+]] // // IR: [[BB1]]: -// IR-NEXT: [[CAST:%.*]] = bitcast [[TYPE]]* [[ALLOCA]] to i64* -// IR-NEXT: [[LOAD:%.*]] = load i64, i64* [[CAST]] +// IR-NEXT: [[LOAD:%.*]] = load i64, ptr [[ALLOCA]] // IR-NEXT: call swiftcc void @"$s16moveonly_deinits30consumeKlassEnumPairWithDeinityyAA0defgH0OnF"(i64 [[LOAD]]) // IR-NEXT: br label %[[CONT:[0-9]+]] // // IR: [[BB2]]: -// IR-NEXT: [[CAST:%.*]] = bitcast [[TYPE]]* [[ALLOCA]] to i64* -// IR-NEXT: [[LOAD:%.*]] = load i64, i64* [[CAST]] +// IR-NEXT: [[LOAD:%.*]] = load i64, ptr [[ALLOCA]] // IR-NEXT: call swiftcc void @"$s16moveonly_deinits23KlassEnumPairWithDeinitOfD"(i64 [[LOAD]]) // IR-NEXT: br label %[[CONT]] // // IR: [[CONT]] -// IR-NEXT: bitcast // IR-NEXT: @llvm.lifetime.end // IR-NEXT: ret void // IR-NEXT: } diff --git a/test/IRGen/multi_file_resilience.swift b/test/IRGen/multi_file_resilience.swift index 98a1cb60d33cc..6ef0e4ceb01c5 100644 --- a/test/IRGen/multi_file_resilience.swift +++ b/test/IRGen/multi_file_resilience.swift @@ -5,41 +5,31 @@ // RUN: -emit-module-path=%t/resilient_struct.swiftmodule \ // RUN: -module-name=resilient_struct %S/../Inputs/resilient_struct.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name main -I %t -emit-ir -primary-file %s %S/Inputs/OtherModule.swift | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -module-name main -I %t -emit-ir -primary-file %s %S/Inputs/OtherModule.swift +// RUN: %target-swift-frontend -module-name main -I %t -emit-ir -primary-file %s %S/Inputs/OtherModule.swift | %FileCheck %s -DINT=i%target-ptrsize // Check that we correctly handle resilience when parsing as SIL + SIB. // RUN: %target-swift-frontend -emit-sib -module-name main %S/Inputs/OtherModule.swift -I %t -o %t/other.sib // RUN: %target-swift-frontend -emit-silgen -module-name main -primary-file %s %S/Inputs/OtherModule.swift -I %t -o %t/main.sil -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -module-name main -primary-file %t/main.sil %t/other.sib -I %t | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -emit-ir -module-name main -primary-file %t/main.sil %t/other.sib -I %t +// RUN: %target-swift-frontend -emit-ir -module-name main -primary-file %t/main.sil %t/other.sib -I %t | %FileCheck %s -DINT=i%target-ptrsize // This is a single-module version of the test case in // multi_module_resilience. // rdar://39763787 // CHECK-LABEL: define {{(dllexport |protected )?}}swiftcc void @"$s4main7copyFoo3fooAA0C0VAE_tF" -// CHECK: [[ARG:%.*]] = bitcast %swift.opaque* %0 to %T4main3FooV // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s4main3FooVMa"([[INT]] 0) // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK: [[VWT:%.*]] = load i8**, +// CHECK: [[VWT:%.*]] = load ptr, // Allocate 'copy'. -// CHECK: [[VWT_CAST:%.*]] = bitcast i8** [[VWT]] to %swift.vwtable* -// CHECK: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, %swift.vwtable* [[VWT_CAST]], i32 0, i32 8 -// CHECK: [[SIZE:%.*]] = load [[INT]], [[INT]]* [[SIZE_ADDR]] +// CHECK: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8 +// CHECK: [[SIZE:%.*]] = load [[INT]], ptr [[SIZE_ADDR]] // CHECK: [[ALLOCA:%.*]] = alloca i8, [[INT]] [[SIZE]], -// CHECK: [[COPY:%.*]] = bitcast i8* [[ALLOCA]] to [[FOO:%T4main3FooV]]* // Perform 'initializeWithCopy' via the VWT instead of trying to inline it. -// CHECK: [[T0:%.*]] = getelementptr inbounds i8*, i8** [[VWT]], i32 2 -// CHECK: [[T1:%.*]] = load i8*, i8** [[T0]], -// CHECK: [[COPYFN:%.*]] = bitcast i8* [[T1]] to %swift.opaque* (%swift.opaque*, %swift.opaque*, %swift.type*)* -// CHECK: [[DEST:%.*]] = bitcast [[FOO]]* [[COPY]] to %swift.opaque* -// CHECK: [[SRC:%.*]] = bitcast [[FOO]]* %1 to %swift.opaque* -// CHECK: call %swift.opaque* [[COPYFN]](%swift.opaque* noalias [[DEST]], %swift.opaque* noalias [[SRC]], %swift.type* [[METADATA]]) +// CHECK: [[T0:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2 +// CHECK: [[T1:%.*]] = load ptr, ptr [[T0]], +// CHECK: call ptr [[T1]](ptr noalias [[ALLOCA]], ptr noalias %1, ptr [[METADATA]]) // Perform 'initializeWithCopy' via the VWT. -// CHECK: [[DEST:%.*]] = bitcast [[FOO]]* [[ARG]] to %swift.opaque* -// CHECK: [[SRC:%.*]] = bitcast [[FOO]]* [[COPY]] to %swift.opaque* -// CHECK: call %swift.opaque* [[COPYFN]](%swift.opaque* noalias [[DEST]], %swift.opaque* noalias [[SRC]], %swift.type* [[METADATA]]) +// CHECK: call ptr [[T1]](ptr noalias %0, ptr noalias [[ALLOCA]], ptr [[METADATA]]) public func copyFoo(foo: Foo) -> Foo { let copy = foo return copy diff --git a/test/IRGen/multi_module_resilience.swift b/test/IRGen/multi_module_resilience.swift index 233924dee6560..ab808e25c3a8f 100644 --- a/test/IRGen/multi_module_resilience.swift +++ b/test/IRGen/multi_module_resilience.swift @@ -9,62 +9,45 @@ // RUN: -emit-module-path=%t/OtherModule.swiftmodule \ // RUN: -module-name=OtherModule %S/Inputs/OtherModule.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name main -I %t -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -module-name main -I %t -emit-ir %s +// RUN: %target-swift-frontend -module-name main -I %t -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize // rdar://39763787 import OtherModule // CHECK-LABEL: define {{(dllexport |protected )?}}swiftcc void @"$s4main7copyFoo3foo11OtherModule0C0VAF_tF" -// CHECK: [[SRET:%.*]] = bitcast %swift.opaque* %0 to %T11OtherModule3FooV* // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s11OtherModule3FooVMa"([[INT]] 0) // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK: [[VWT:%.*]] = load i8**, +// CHECK: [[VWT:%.*]] = load ptr, // Allocate 'copy'. -// CHECK: [[VWT_CAST:%.*]] = bitcast i8** [[VWT]] to %swift.vwtable* -// CHECK: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, %swift.vwtable* [[VWT_CAST]], i32 0, i32 8 -// CHECK: [[SIZE:%.*]] = load [[INT]], [[INT]]* [[SIZE_ADDR]] +// CHECK: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8 +// CHECK: [[SIZE:%.*]] = load [[INT]], ptr [[SIZE_ADDR]] // CHECK: [[ALLOCA:%.*]] = alloca i8, [[INT]] [[SIZE]], -// CHECK: [[COPY:%.*]] = bitcast i8* [[ALLOCA]] to [[FOO:%T11OtherModule3FooV]]* // Perform 'initializeWithCopy' via the VWT instead of trying to inline it. -// CHECK: [[T0:%.*]] = getelementptr inbounds i8*, i8** [[VWT]], i32 2 -// CHECK: [[T1:%.*]] = load i8*, i8** [[T0]], -// CHECK: [[COPYFN:%.*]] = bitcast i8* [[T1]] to %swift.opaque* (%swift.opaque*, %swift.opaque*, %swift.type*)* -// CHECK: [[DEST:%.*]] = bitcast [[FOO]]* [[COPY]] to %swift.opaque* -// CHECK: [[SRC:%.*]] = bitcast [[FOO]]* %1 to %swift.opaque* -// CHECK: call %swift.opaque* [[COPYFN]](%swift.opaque* noalias [[DEST]], %swift.opaque* noalias [[SRC]], %swift.type* [[METADATA]]) +// CHECK: [[T0:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2 +// CHECK: [[T1:%.*]] = load ptr, ptr [[T0]], +// CHECK: call ptr [[T1]](ptr noalias [[ALLOCA]], ptr noalias %1, ptr [[METADATA]]) // Perform 'initializeWithCopy' via the VWT. -// CHECK: [[DEST:%.*]] = bitcast [[FOO]]* [[SRET]] to %swift.opaque* -// CHECK: [[SRC:%.*]] = bitcast [[FOO]]* [[COPY]] to %swift.opaque* -// CHECK: call %swift.opaque* [[COPYFN]](%swift.opaque* noalias [[DEST]], %swift.opaque* noalias [[SRC]], %swift.type* [[METADATA]]) +// CHECK: call ptr [[T1]](ptr noalias %0, ptr noalias [[ALLOCA]], ptr [[METADATA]]) public func copyFoo(foo: Foo) -> Foo { let copy = foo return copy } // CHECK-LABEL: define {{(dllexport |protected )?}}swiftcc void @"$s4main7copyBar3bar11OtherModule0C0VAF_tF" -// CHECK: [[SRET:%.*]] = bitcast %swift.opaque* %0 to %T11OtherModule3BarV* // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s11OtherModule3BarVMa"([[INT]] 0) // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK: [[VWT:%.*]] = load i8**, +// CHECK: [[VWT:%.*]] = load ptr, // Allocate 'copy'. -// CHECK: [[VWT_CAST:%.*]] = bitcast i8** [[VWT]] to %swift.vwtable* -// CHECK: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, %swift.vwtable* [[VWT_CAST]], i32 0, i32 8 -// CHECK: [[SIZE:%.*]] = load [[INT]], [[INT]]* [[SIZE_ADDR]] +// CHECK: [[SIZE_ADDR:%.*]] = getelementptr inbounds %swift.vwtable, ptr [[VWT]], i32 0, i32 8 +// CHECK: [[SIZE:%.*]] = load [[INT]], ptr [[SIZE_ADDR]] // CHECK: [[ALLOCA:%.*]] = alloca i8, [[INT]] [[SIZE]], -// CHECK: [[COPY:%.*]] = bitcast i8* [[ALLOCA]] to [[BAR:%T11OtherModule3BarV]]* // Perform 'initializeWithCopy' via the VWT instead of trying to inline it. -// CHECK: [[T0:%.*]] = getelementptr inbounds i8*, i8** [[VWT]], i32 2 -// CHECK: [[T1:%.*]] = load i8*, i8** [[T0]], -// CHECK: [[COPYFN:%.*]] = bitcast i8* [[T1]] to %swift.opaque* (%swift.opaque*, %swift.opaque*, %swift.type*)* -// CHECK: [[DEST:%.*]] = bitcast [[BAR]]* [[COPY]] to %swift.opaque* -// CHECK: [[SRC:%.*]] = bitcast [[BAR]]* %1 to %swift.opaque* -// CHECK: call %swift.opaque* [[COPYFN]](%swift.opaque* noalias [[DEST]], %swift.opaque* noalias [[SRC]], %swift.type* [[METADATA]]) +// CHECK: [[T0:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 2 +// CHECK: [[T1:%.*]] = load ptr, ptr [[T0]], +// CHECK: call ptr [[T1]](ptr noalias [[ALLOCA]], ptr noalias %1, ptr [[METADATA]]) // Perform 'initializeWithCopy' via the VWT. -// CHECK: [[DEST:%.*]] = bitcast [[BAR]]* [[SRET]] to %swift.opaque* -// CHECK: [[SRC:%.*]] = bitcast [[BAR]]* [[COPY]] to %swift.opaque* -// CHECK: call %swift.opaque* [[COPYFN]](%swift.opaque* noalias [[DEST]], %swift.opaque* noalias [[SRC]], %swift.type* [[METADATA]]) +// CHECK: call ptr [[T1]](ptr noalias %0, ptr noalias [[ALLOCA]], ptr [[METADATA]]) public func copyBar(bar: Bar) -> Bar { let copy = bar return copy diff --git a/test/IRGen/noreturn.swift b/test/IRGen/noreturn.swift index 56f1d831ca9d3..7515c9a1086cf 100644 --- a/test/IRGen/noreturn.swift +++ b/test/IRGen/noreturn.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name A -emit-ir -primary-file %s -import-objc-header %S/Inputs/noreturn.h | %FileCheck %s -// RUN: %target-swift-frontend -module-name A -emit-ir -primary-file %s -import-objc-header %S/Inputs/noreturn.h +// RUN: %target-swift-frontend -module-name A -emit-ir -primary-file %s -import-objc-header %S/Inputs/noreturn.h | %FileCheck %s // CHECK-LABEL: define {{.*}} void @"$s1A018testDirectReturnNoC0yyF"() @@ -18,7 +17,7 @@ public func testDirect2ReturnNoReturn() { // CHECK-LABEL: define {{.*}} void @"$s1A020testIndirectReturnNoC0yyF"() // CHECK: [[INDIRECT_RESULT:%.*]] = alloca %struct.Large -// CHECK: call void @largeStructNoReturn(%struct.Large* {{.*}}[[INDIRECT_RESULT]]) +// CHECK: call void @largeStructNoReturn(ptr {{.*}}[[INDIRECT_RESULT]]) // CHECK: unreachable public func testIndirectReturnNoReturn() { largeStructNoReturn() diff --git a/test/IRGen/objc_async_metadata.swift b/test/IRGen/objc_async_metadata.swift index e9f6737d893d1..369b4f5e7649b 100644 --- a/test/IRGen/objc_async_metadata.swift +++ b/test/IRGen/objc_async_metadata.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %build-irgen-test-overlays -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %use_no_opaque_pointers -disable-availability-checking %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -disable-availability-checking %s -emit-ir +// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -disable-availability-checking %s -emit-ir | %FileCheck %s // REQUIRES: OS=macosx // REQUIRES: concurrency @@ -26,11 +25,11 @@ class MyClass: NSObject { // CHECK: [[ENCODE_ASYNC_STRING_PROTO:@.*]] = private unnamed_addr constant [15 x i8] c"v32@0:8@16@?24\00" // CHECK-LABEL: @_PROTOCOL_INSTANCE_METHODS__TtP19objc_async_metadata7MyProto_ = weak hidden constant // CHECK-SAME: _selector_data(myProtoRequirement:completionHandler:) -// CHECK-SAME: [15 x i8]* [[ENCODE_ASYNC_STRING_PROTO]] +// CHECK-SAME: ptr [[ENCODE_ASYNC_STRING_PROTO]] // CHECK: [[ENCODE_ASYNC_STRING_PROTO_TYPE:@.*]] = private unnamed_addr constant [41 x i8] c"v32@0:8@\22NSString\2216@?24\00" // CHECK-LABEL: @_PROTOCOL_METHOD_TYPES__TtP19objc_async_metadata7MyProto_ = weak hidden constant -// CHECK-SAME: [41 x i8]* [[ENCODE_ASYNC_STRING_PROTO_TYPE]] +// CHECK-SAME: ptr [[ENCODE_ASYNC_STRING_PROTO_TYPE]] @objc protocol MyProto { @objc func myProtoRequirement(_ x: String) async -> String diff --git a/test/IRGen/objc_block.sil b/test/IRGen/objc_block.sil index f5783a4fbfdd8..277d3488cd90e 100644 --- a/test/IRGen/objc_block.sil +++ b/test/IRGen/objc_block.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend %s -emit-ir +// RUN: %target-swift-frontend %s -emit-ir | %FileCheck %s sil_stage canonical @@ -15,13 +14,10 @@ entry(%b : $@convention(block) (Foo) -> Foo, %x : $Foo): %y = apply %b(%x) : $@convention(block) (Foo) -> Foo return %y : $Foo } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %T10objc_block3FooC* @call_block(%objc_block* %0, %T10objc_block3FooC* %1) {{.*}} { +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @call_block(ptr %0, ptr %1) {{.*}} { // CHECK: entry: -// CHECK: [[T0:%.*]] = getelementptr inbounds %objc_block, %objc_block* %0, i32 0, i32 3 -// CHECK: [[T1:%.*]] = load i8*, i8** [[T0]] -// CHECK: [[T2:%.*]] = bitcast i8* [[T1]] to i8* (%objc_block*, i8*)* -// CHECK: [[T3:%.*]] = bitcast %T10objc_block3FooC* %1 to i8* -// CHECK: [[T4:%.*]] = call i8* [[T2]](%objc_block* %0, i8* [[T3]]) -// CHECK: [[T5:%.*]] = bitcast i8* [[T4]] to %T10objc_block3FooC* -// CHECK: ret %T10objc_block3FooC* [[T5]] +// CHECK: [[T0:%.*]] = getelementptr inbounds %objc_block, ptr %0, i32 0, i32 3 +// CHECK: [[T1:%.*]] = load ptr, ptr [[T0]] +// CHECK: [[T4:%.*]] = call ptr [[T1]](ptr %0, ptr %1) +// CHECK: ret ptr [[T4]] // CHECK: } diff --git a/test/IRGen/objc_casts.sil b/test/IRGen/objc_casts.sil index 32c2e9247329b..6eb37b78a4a76 100644 --- a/test/IRGen/objc_casts.sil +++ b/test/IRGen/objc_casts.sil @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %build-irgen-test-overlays -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %use_no_opaque_pointers -primary-file %s -emit-ir | %FileCheck --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize %s -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -primary-file %s -emit-ir +// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -primary-file %s -emit-ir | %FileCheck --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize %s // REQUIRES: objc_interop @@ -13,14 +12,10 @@ sil_vtable SwiftClass {} protocol ClassProto : class {} -// CHECK-LABEL: define hidden swiftcc %TSo8NSObjectC* @checkedClassBoundCast(%swift.type* %0, %TSo8NSObjectC* %1, %swift.type* %T) #0 { -// CHECK: [[OBJ:%.+]] = bitcast %TSo8NSObjectC* %1 to i8* -// CHECK: call i8* @llvm.objc.retain(i8* [[OBJ]]) -// CHECK: [[OPAQUE_OBJ:%.+]] = bitcast %TSo8NSObjectC* %1 to i8* -// CHECK: [[OPAQUE_CLASS:%.+]] = bitcast %swift.type* %T to i8* -// CHECK: [[OPAQUE_RESULT:%.+]] = call i8* @swift_dynamicCastUnknownClassUnconditional(i8* [[OPAQUE_OBJ]], i8* [[OPAQUE_CLASS]], {{.*}}) -// CHECK: [[RESULT:%.+]] = bitcast i8* [[OPAQUE_RESULT]] to %TSo8NSObjectC* -// CHECK: ret %TSo8NSObjectC* [[RESULT]] +// CHECK-LABEL: define hidden swiftcc ptr @checkedClassBoundCast(ptr %0, ptr %1, ptr %T) #0 { +// CHECK: call ptr @llvm.objc.retain(ptr %1) +// CHECK: [[OPAQUE_RESULT:%.+]] = call ptr @swift_dynamicCastUnknownClassUnconditional(ptr %1, ptr %T, {{.*}}) +// CHECK: ret ptr [[OPAQUE_RESULT]] // CHECK: {{^}$}} sil hidden @checkedClassBoundCast : $@convention(thin) (@thick T.Type, @owned NSObject) -> @owned T { @@ -32,14 +27,12 @@ bb0(%unused : $@thick T.Type, %obj : $NSObject): } // rdar://24924966 -// CHECK-LABEL: define hidden swiftcc void @metatype_to_objc_class(%swift.type* %0, %swift.type* %T) -// CHECK: [[T0:%.*]] = call %objc_object* @swift_dynamicCastMetatypeToObjectUnconditional(%swift.type* %0, {{.*}}) +// CHECK-LABEL: define hidden swiftcc void @metatype_to_objc_class(ptr %0, ptr %T) +// CHECK: [[T0:%.*]] = call ptr @swift_dynamicCastMetatypeToObjectUnconditional(ptr %0, {{.*}}) // 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* @{{.*}}(%objc_class* [[T2a]]) -// CHECK-NEXT: [[T3:%.*]] = bitcast %objc_class* [[T2]] to i8* -// CHECK-NEXT: call i8* @swift_dynamicCastObjCClassUnconditional(i8* [[T1]], i8* [[T3]], {{.*}}) +// CHECK-NEXT: [[T2a:%.*]] = load ptr, ptr @"OBJC_CLASS_REF_$_Foo" +// CHECK-NEXT: [[T2:%.*]] = call ptr @{{.*}}(ptr [[T2a]]) +// CHECK-NEXT: call ptr @swift_dynamicCastObjCClassUnconditional(ptr [[T0]], ptr [[T2]], {{.*}}) sil hidden @metatype_to_objc_class : $@convention(thin) (@thick T.Type) -> () { bb0(%metatype : $@thick T.Type): %result = unconditional_checked_cast %metatype : $@thick T.Type to Foo @@ -47,15 +40,13 @@ bb0(%metatype : $@thick T.Type): return %tuple : $() } -// CHECK-LABEL: define hidden swiftcc void @opt_metatype_to_objc_class({{(i32|i64)}} %0, %swift.type* %T) -// CHECK: [[ARG:%.*]] = inttoptr {{.*}} %0 to %swift.type* -// CHECK: [[T0:%.*]] = call %objc_object* @swift_dynamicCastMetatypeToObjectUnconditional(%swift.type* [[ARG]], {{.*}}) +// CHECK-LABEL: define hidden swiftcc void @opt_metatype_to_objc_class({{(i32|i64)}} %0, ptr %T) +// CHECK: [[ARG:%.*]] = inttoptr {{.*}} %0 to ptr +// CHECK: [[T0:%.*]] = call ptr @swift_dynamicCastMetatypeToObjectUnconditional(ptr [[ARG]], {{.*}}) // 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* @{{.*}}(%objc_class* [[T2a]]) -// CHECK-NEXT: [[T3:%.*]] = bitcast %objc_class* [[T2]] to i8* -// CHECK-NEXT: call i8* @swift_dynamicCastObjCClassUnconditional(i8* [[T1]], i8* [[T3]], {{.*}}) +// CHECK-NEXT: [[T2a:%.*]] = load ptr, ptr @"OBJC_CLASS_REF_$_Foo" +// CHECK-NEXT: [[T2:%.*]] = call ptr @{{.*}}(ptr [[T2a]]) +// CHECK-NEXT: call ptr @swift_dynamicCastObjCClassUnconditional(ptr [[T0]], ptr [[T2]], {{.*}}) sil hidden @opt_metatype_to_objc_class : $@convention(thin) (Optional<@thick T.Type>) -> () { bb0(%metatype : $Optional<@thick T.Type>): %result = unconditional_checked_cast %metatype : $Optional<@thick T.Type> to Foo @@ -63,24 +54,20 @@ bb0(%metatype : $Optional<@thick T.Type>): return %tuple : $() } -// CHECK-LABEL: define hidden swiftcc { %objc_object*, i8** } @swift_class_bounded_to_cp -// CHECK-SAME: ([[SWIFTCLASS:%T10objc_casts10SwiftClassC]]* %0, %swift.type* %T) -// CHECK: [[T0:%.*]] = bitcast [[SWIFTCLASS]]* %0 to %swift.type** -// CHECK-NEXT: [[TYPE:%.*]] = load %swift.type*, %swift.type** [[T0]], -// CHECK-NEXT: [[T0:%.*]] = bitcast [[SWIFTCLASS]]* %0 to i8* -// CHECK-NEXT: call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[T0]], %swift.type* [[TYPE]], {{.*}} @"$s10objc_casts10ClassProtoMp" +// CHECK-LABEL: define hidden swiftcc { ptr, ptr } @swift_class_bounded_to_cp +// CHECK-SAME: (ptr %0, ptr %T) +// CHECK: [[TYPE:%.*]] = load ptr, ptr %0, +// CHECK-NEXT: call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %0, ptr [[TYPE]], {{.*}} @"$s10objc_casts10ClassProtoMp" sil hidden @swift_class_bounded_to_cp : $@convention(thin) (@owned T) -> @owned ClassProto { entry(%a : $T): %0 = unconditional_checked_cast %a : $T to ClassProto return %0 : $ClassProto } -// CHECK-LABEL: define hidden swiftcc { %objc_object*, i8** } @objc_class_bounded_to_cp -// CHECK-SAME: ([[OBJCCLASS:%TSo8NSObjectC]]* %0, %swift.type* %T) -// CHECK: [[T0:%.*]] = bitcast [[OBJCCLASS]]* %0 to %objc_object* -// CHECK-NEXT: [[TYPE:%.*]] = call %swift.type* @swift_getObjectType(%objc_object* [[T0]]) -// CHECK-NEXT: [[T0:%.*]] = bitcast [[OBJCCLASS]]* %0 to i8* -// CHECK-NEXT: call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[T0]], %swift.type* [[TYPE]], {{.*}} @"$s10objc_casts10ClassProtoMp" +// CHECK-LABEL: define hidden swiftcc { ptr, ptr } @objc_class_bounded_to_cp +// CHECK-SAME: (ptr %0, ptr %T) +// CHECK: [[TYPE:%.*]] = call ptr @swift_getObjectType(ptr %0) +// CHECK-NEXT: call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %0, ptr [[TYPE]], {{.*}} @"$s10objc_casts10ClassProtoMp" sil hidden @objc_class_bounded_to_cp : $@convention(thin) (@owned T) -> @owned ClassProto { entry(%a : $T): %0 = unconditional_checked_cast %a : $T to ClassProto diff --git a/test/IRGen/objc_direct.swift b/test/IRGen/objc_direct.swift index ec1ea13211235..b20b7add5e706 100644 --- a/test/IRGen/objc_direct.swift +++ b/test/IRGen/objc_direct.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-emit-ir %use_no_opaque_pointers -import-objc-header %S/../Inputs/objc_direct.h -o - %s | %FileCheck %s -// RUN: %target-swift-emit-ir -import-objc-header %S/../Inputs/objc_direct.h -o - %s +// RUN: %target-swift-emit-ir -import-objc-header %S/../Inputs/objc_direct.h -o - %s | %FileCheck %s // REQUIRES: objc_interop @@ -18,42 +17,40 @@ markUsed(Bar.init(value: 0)) // CHECK: call swiftcc {{i32|i64}} @"$sSo3BarC5valueABSgs5Int32V_tcfC" bar.directProperty = 123 -// CHECK: call void @"\01-[Bar setDirectProperty:]"(%{{[0-9]+}}* %{{[0-9]+}}, i32 {{.*}}) +// CHECK: call void @"\01-[Bar setDirectProperty:]"(ptr %{{[0-9]+}}, i32 {{.*}}) markUsed(bar.directProperty) -// CHECK: call i32 @"\01-[Bar directProperty]"(%{{[0-9]+}}* %{{[0-9]+}}) +// CHECK: call i32 @"\01-[Bar directProperty]"(ptr %{{[0-9]+}}) bar.directProperty2 = 456 -// CHECK: call void @"\01-[Bar setDirectProperty2:]"(%{{[0-9]+}}* %{{[0-9]+}}, i32 {{.*}}) +// CHECK: call void @"\01-[Bar setDirectProperty2:]"(ptr %{{[0-9]+}}, i32 {{.*}}) markUsed(bar.directProperty2) -// CHECK: call i32 @"\01-[Bar directProperty2]"(%{{[0-9]+}}* %{{[0-9]+}}) +// CHECK: call i32 @"\01-[Bar directProperty2]"(ptr %{{[0-9]+}}) bar[0] = 789 -// CHECK: call void @"\01-[Bar setObject:atIndexedSubscript:]"(%{{[0-9]+}}* %{{[0-9]+}}, i32 789, i32 0) +// CHECK: call void @"\01-[Bar setObject:atIndexedSubscript:]"(ptr %{{[0-9]+}}, i32 789, i32 0) markUsed(bar[0]) -// CHECK: call i32 @"\01-[Bar objectAtIndexedSubscript:]"(%{{[0-9]+}}* %{{[0-9]+}}, i32 0) +// CHECK: call i32 @"\01-[Bar objectAtIndexedSubscript:]"(ptr %{{[0-9]+}}, i32 0) markUsed(bar.directMethod()) -// CHECK: call {{.*}} @"\01-[Bar directMethod]"(%{{[0-9]+}}* %{{[0-9]+}}) +// CHECK: call {{.*}} @"\01-[Bar directMethod]"(ptr %{{[0-9]+}}) markUsed(bar.directMethod2()) -// CHECK: call {{.*}} @"\01-[Bar directMethod2]"(%{{[0-9]+}}* %{{[0-9]+}}) +// CHECK: call {{.*}} @"\01-[Bar directMethod2]"(ptr %{{[0-9]+}}) markUsed(Bar.directClassMethod()) // NOTE: The class must be realized before calling objc_direct class methods, even if // Swift avoids explicit class realization before calling regular class methods. -// CHECK: [[R0:%.*]] = load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$_Bar" -// CHECK: [[R1:%.*]] = call %objc_class* @{{(swift_getInitializedObjCClass|objc_opt_self)}}(%objc_class* [[R0]]) -// CHECK: [[R2:%.*]] = bitcast %objc_class* [[R1]] to i8* -// CHECK: call {{.*}} @"\01+[Bar directClassMethod]"(i8* [[R2]]) +// CHECK: [[R0:%.*]] = load ptr, ptr @"OBJC_CLASS_REF_$_Bar" +// CHECK: [[R1:%.*]] = call ptr @{{(swift_getInitializedObjCClass|objc_opt_self)}}(ptr [[R0]]) +// CHECK: call {{.*}} @"\01+[Bar directClassMethod]"(ptr [[R1]]) markUsed(Bar.directClassMethod2()) -// CHECK: [[R3:%.*]] = load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$_Bar" -// CHECK: [[R4:%.*]] = call %objc_class* @{{(swift_getInitializedObjCClass|objc_opt_self)}}(%objc_class* [[R3]]) -// CHECK: [[R5:%.*]] = bitcast %objc_class* [[R4]] to i8* -// CHECK: call {{.*}} @"\01+[Bar directClassMethod2]"(i8* [[R5]]) +// CHECK: [[R3:%.*]] = load ptr, ptr @"OBJC_CLASS_REF_$_Bar" +// CHECK: [[R4:%.*]] = call ptr @{{(swift_getInitializedObjCClass|objc_opt_self)}}(ptr [[R3]]) +// CHECK: call {{.*}} @"\01+[Bar directClassMethod2]"(ptr [[R4]]) markUsed(bar.directProtocolMethod()) // CHECK: call {{.*}} @"\01-[Bar directProtocolMethod]"({{.*}}) diff --git a/test/IRGen/objc_enum_multi_file.swift b/test/IRGen/objc_enum_multi_file.swift index 657b4270d174c..37ebc5bb431bd 100644 --- a/test/IRGen/objc_enum_multi_file.swift +++ b/test/IRGen/objc_enum_multi_file.swift @@ -1,10 +1,8 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-objc-attr-requires-foundation-module -enable-objc-interop -module-name main -primary-file %s %S/Inputs/objc_enum_multi_file_helper.swift -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -disable-objc-attr-requires-foundation-module -enable-objc-interop -module-name main -primary-file %s %S/Inputs/objc_enum_multi_file_helper.swift -emit-ir +// RUN: %target-swift-frontend -disable-objc-attr-requires-foundation-module -enable-objc-interop -module-name main -primary-file %s %S/Inputs/objc_enum_multi_file_helper.swift -emit-ir | %FileCheck %s // RUN: %target-swift-frontend -disable-objc-attr-requires-foundation-module -enable-objc-interop -emit-module %S/Inputs/objc_enum_multi_file_helper.swift -o %t -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name main -primary-file %s -I %t -DIMPORT -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -module-name main -primary-file %s -I %t -DIMPORT -emit-ir +// RUN: %target-swift-frontend -module-name main -primary-file %s -I %t -DIMPORT -emit-ir | %FileCheck %s #if IMPORT import objc_enum_multi_file_helper @@ -36,7 +34,7 @@ func useFoo(_ x: Foo) -> Int32 { } // CHECK: [[DEFAULT]]: - // CHECK: call swiftcc void @"$ss32_diagnoseUnexpectedEnumCaseValue{{.+}}"(%swift.type* @"$s{{.+}}3FooON", %swift.opaque* noalias nocapture %{{.+}}, %swift.type* @"$ss5Int32VN") + // CHECK: call swiftcc void @"$ss32_diagnoseUnexpectedEnumCaseValue{{.+}}"(ptr @"$s{{.+}}3FooON", ptr noalias nocapture %{{.+}}, ptr @"$ss5Int32VN") // CHECK-NEXT: unreachable // CHECK: [[FINAL]]: @@ -70,7 +68,7 @@ func useBar(_ x: Bar) -> Int32 { } // CHECK: [[DEFAULT]]: - // CHECK: call swiftcc void @"$ss32_diagnoseUnexpectedEnumCaseValue{{.+}}"(%swift.type* @"$s{{.+}}3BarON", %swift.opaque* noalias nocapture %{{.+}}, %swift.type* @"$ss5Int32VN") + // CHECK: call swiftcc void @"$ss32_diagnoseUnexpectedEnumCaseValue{{.+}}"(ptr @"$s{{.+}}3BarON", ptr noalias nocapture %{{.+}}, ptr @"$ss5Int32VN") // CHECK-NEXT: unreachable // CHECK: [[FINAL]]: diff --git a/test/IRGen/objc_errors.sil b/test/IRGen/objc_errors.sil index c7ca4965ac79b..8fe26375ad594 100644 --- a/test/IRGen/objc_errors.sil +++ b/test/IRGen/objc_errors.sil @@ -1,15 +1,13 @@ // RUN: %empty-directory(%t) // RUN: %build-irgen-test-overlays -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %use_no_opaque_pointers %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %s -emit-ir +// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %s -emit-ir | %FileCheck %s // REQUIRES: objc_interop import Swift import Foundation -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc %swift.error* @errortype_from_nserror(%TSo7NSErrorC* %0) -// CHECK: %1 = bitcast %TSo7NSErrorC* %0 to %swift.error* +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @errortype_from_nserror(ptr %0) sil @errortype_from_nserror : $@convention(thin) (@owned NSError) -> @owned Error { entry(%0 : $NSError): %1 = init_existential_ref %0 : $NSError : $NSError, $Error diff --git a/test/IRGen/objc_generic_class_convention.sil b/test/IRGen/objc_generic_class_convention.sil index ad5db8ed5bfcb..53f09ea2373ca 100644 --- a/test/IRGen/objc_generic_class_convention.sil +++ b/test/IRGen/objc_generic_class_convention.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %s -emit-ir +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %s -emit-ir | %FileCheck %s // REQUIRES: objc_interop @@ -14,13 +13,13 @@ import objc_generics // for them either, since they wouldn't be available through the polymorphic // convention for class methods. -// CHECK-LABEL: define swiftcc void @method(i64 %0, %TSo12GenericClassC* swiftself %1) +// CHECK-LABEL: define swiftcc void @method(i64 %0, ptr swiftself %1) sil @method : $@convention(method) @pseudogeneric (Int64, @guaranteed GenericClass) -> () { entry(%0 : $Int64, %1 : $GenericClass): return undef : $() } -// CHECK-LABEL: define void @objcMethod(i8* %0, i8* %1, i64 %2) +// CHECK-LABEL: define void @objcMethod(ptr %0, ptr %1, i64 %2) sil @objcMethod : $@convention(objc_method) @pseudogeneric (Int64, @guaranteed GenericClass) -> () { entry(%0 : $Int64, %1 : $GenericClass): return undef : $() diff --git a/test/IRGen/objc_generic_protocol_conformance.swift b/test/IRGen/objc_generic_protocol_conformance.swift index 6dd62db9fbe61..0e8195f91f165 100644 --- a/test/IRGen/objc_generic_protocol_conformance.swift +++ b/test/IRGen/objc_generic_protocol_conformance.swift @@ -1,6 +1,5 @@ // RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-silgen -primary-file %s -enable-objc-interop -import-objc-header %S/Inputs/objc_generic_protocol_conformance.h | %FileCheck --check-prefix=SIL %s -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers -emit-ir -primary-file %s -enable-objc-interop -import-objc-header %S/Inputs/objc_generic_protocol_conformance.h | %FileCheck --check-prefix=IR %s -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir -primary-file %s -enable-objc-interop -import-objc-header %S/Inputs/objc_generic_protocol_conformance.h +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir -primary-file %s -enable-objc-interop -import-objc-header %S/Inputs/objc_generic_protocol_conformance.h | %FileCheck --check-prefix=IR %s protocol P { func foo() @@ -9,4 +8,4 @@ protocol P { extension Foo: P {} // SIL-LABEL: sil private [transparent] [thunk] [ossa] @$sSo3FooCyxG33objc_generic_protocol_conformance1PA2dEP3fooyyFTW {{.*}} @pseudogeneric -// IR-LABEL: define internal swiftcc void @"$sSo3FooCyxG33objc_generic_protocol_conformance1PA2dEP3fooyyFTW"(%TSo3FooC** noalias nocapture swiftself dereferenceable({{4|8}}) %0, %swift.type*{{( %Self)?}}, i8**{{( %SelfWitnessTable)?}}) +// IR-LABEL: define internal swiftcc void @"$sSo3FooCyxG33objc_generic_protocol_conformance1PA2dEP3fooyyFTW"(ptr noalias nocapture swiftself dereferenceable({{4|8}}) %0, ptr{{( %Self)?}}, ptr{{( %SelfWitnessTable)?}}) diff --git a/test/IRGen/objc_globals.swift b/test/IRGen/objc_globals.swift index 4df2ffbf46c80..39491efa715bc 100644 --- a/test/IRGen/objc_globals.swift +++ b/test/IRGen/objc_globals.swift @@ -1,7 +1,5 @@ -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers -I %S/Inputs/abi %s -whole-module-optimization -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers -I %S/Inputs/abi %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/abi %s -whole-module-optimization -emit-ir -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/abi %s -emit-ir +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/abi %s -whole-module-optimization -emit-ir | %FileCheck %s +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %S/Inputs/abi %s -emit-ir | %FileCheck %s // // REQUIRES: objc_interop @@ -13,8 +11,8 @@ func blackHole(_ t: T) { } // CHECK-DAG: @"OBJC_CLASS_$_NSNumber" = external global %struct._class_t // CHECK-DAG: @"OBJC_CLASS_$_NSString" = external global %struct._class_t -// CHECK-DAG: @"OBJC_CLASSLIST_REFERENCES_$_{{.*}}" = internal global %struct._class_t* @"OBJC_CLASS_$_NSNumber", section "__DATA,__objc_classrefs,regular,no_dead_strip" -// CHECK-DAG: @"OBJC_CLASSLIST_REFERENCES_$_{{.*}}" = internal global %struct._class_t* @"OBJC_CLASS_$_NSString", section "__DATA,__objc_classrefs,regular,no_dead_strip" +// CHECK-DAG: @"OBJC_CLASSLIST_REFERENCES_$_{{.*}}" = internal global ptr @"OBJC_CLASS_$_NSNumber", section "__DATA,__objc_classrefs,regular,no_dead_strip" +// CHECK-DAG: @"OBJC_CLASSLIST_REFERENCES_$_{{.*}}" = internal global ptr @"OBJC_CLASS_$_NSString", section "__DATA,__objc_classrefs,regular,no_dead_strip" public func testLiterals() { blackHole(gadget.giveMeASelector()) @@ -30,20 +28,18 @@ public func fooLazy() { fooInternal() } -// CHECK-LABEL: define internal i8* @giveMeASelector() -// CHECK: load i8*, i8** @OBJC_SELECTOR_REFERENCES_ +// CHECK-LABEL: define internal ptr @giveMeASelector() +// CHECK: load ptr, ptr @OBJC_SELECTOR_REFERENCES_ // CHECK: ret -// CHECK-LABEL: define internal {{.*}}* @giveMeANumber() -// CHECK: [[CLASS:%.*]] = load %struct._class_t*, %struct._class_t** -// CHECK-DAG: [[SELECTOR:%.*]] = load i8*, i8** @OBJC_SELECTOR_REFERENCES_.{{.*}} -// CHECK-DAG: bitcast %struct._class_t* [[CLASS]] to i8* +// CHECK-LABEL: define internal ptr @giveMeANumber() +// CHECK: [[CLASS:%.*]] = load ptr, ptr +// CHECK-DAG: [[SELECTOR:%.*]] = load ptr, ptr @OBJC_SELECTOR_REFERENCES_.{{.*}} // CHECK: call {{.*}} @objc_msgSend // CHECK: ret -// CHECK-LABEL: define internal i8* @giveMeAMetaclass() -// CHECK: [[CLASS:%.*]] = load %struct._class_t*, %struct._class_t** -// CHECK-DAG: [[SELECTOR:%.*]] = load i8*, i8** @OBJC_SELECTOR_REFERENCES_ -// CHECK-DAG: bitcast %struct._class_t* [[CLASS]] to i8* +// CHECK-LABEL: define internal ptr @giveMeAMetaclass() +// CHECK: [[CLASS:%.*]] = load ptr, ptr +// CHECK-DAG: [[SELECTOR:%.*]] = load ptr, ptr @OBJC_SELECTOR_REFERENCES_ // CHECK: call {{.*}} @objc_msgSend // CHECK: ret diff --git a/test/IRGen/objc_properties_jit.swift b/test/IRGen/objc_properties_jit.swift index 3f04d03a994cb..5cdc0fcf1ab3d 100644 --- a/test/IRGen/objc_properties_jit.swift +++ b/test/IRGen/objc_properties_jit.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers -enable-objc-interop %s -emit-ir -disable-objc-attr-requires-foundation-module -use-jit | %FileCheck %s -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-objc-interop %s -emit-ir -disable-objc-attr-requires-foundation-module -use-jit +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-objc-interop %s -emit-ir -disable-objc-attr-requires-foundation-module -use-jit | %FileCheck %s import Foundation @@ -15,13 +14,13 @@ extension NSString { } // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} private void @runtime_registration -// CHECK: [[NSOBJECT_UNINIT:%.*]] = load %objc_class*, %objc_class** @"OBJC_CLASS_REF_$_NSString" -// CHECK: [[NSOBJECT:%.*]] = call %objc_class* @{{.*}}(%objc_class* [[NSOBJECT_UNINIT]]) -// CHECK: [[GET_CLASS_PROP:%.*]] = call i8* @sel_registerName({{.*}}(classProp) -// CHECK: call i8* @class_replaceMethod(%objc_class* @"OBJC_METACLASS_$_NSString", i8* [[GET_CLASS_PROP]] -// CHECK: [[SET_CLASS_PROP:%.*]] = call i8* @sel_registerName({{.*}}(setClassProp:) -// CHECK: call i8* @class_replaceMethod(%objc_class* @"OBJC_METACLASS_$_NSString", i8* [[SET_CLASS_PROP]] -// CHECK: [[GET_INSTANCE_PROP:%.*]] = call i8* @sel_registerName({{.*}}(instanceProp) -// CHECK: call i8* @class_replaceMethod(%objc_class* [[NSOBJECT]], i8* [[GET_INSTANCE_PROP]] -// CHECK: [[SET_INSTANCE_PROP:%.*]] = call i8* @sel_registerName({{.*}}(setInstanceProp:) -// CHECK: call i8* @class_replaceMethod(%objc_class* [[NSOBJECT]], i8* [[SET_INSTANCE_PROP]] +// CHECK: [[NSOBJECT_UNINIT:%.*]] = load ptr, ptr @"OBJC_CLASS_REF_$_NSString" +// CHECK: [[NSOBJECT:%.*]] = call ptr @{{.*}}(ptr [[NSOBJECT_UNINIT]]) +// CHECK: [[GET_CLASS_PROP:%.*]] = call ptr @sel_registerName({{.*}}(classProp) +// CHECK: call ptr @class_replaceMethod(ptr @"OBJC_METACLASS_$_NSString", ptr [[GET_CLASS_PROP]] +// CHECK: [[SET_CLASS_PROP:%.*]] = call ptr @sel_registerName({{.*}}(setClassProp:) +// CHECK: call ptr @class_replaceMethod(ptr @"OBJC_METACLASS_$_NSString", ptr [[SET_CLASS_PROP]] +// CHECK: [[GET_INSTANCE_PROP:%.*]] = call ptr @sel_registerName({{.*}}(instanceProp) +// CHECK: call ptr @class_replaceMethod(ptr [[NSOBJECT]], ptr [[GET_INSTANCE_PROP]] +// CHECK: [[SET_INSTANCE_PROP:%.*]] = call ptr @sel_registerName({{.*}}(setInstanceProp:) +// CHECK: call ptr @class_replaceMethod(ptr [[NSOBJECT]], ptr [[SET_INSTANCE_PROP]] diff --git a/test/IRGen/objc_protocol_vars.sil b/test/IRGen/objc_protocol_vars.sil index 079dc29ecb3f8..dcd9fc229e96f 100644 --- a/test/IRGen/objc_protocol_vars.sil +++ b/test/IRGen/objc_protocol_vars.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers -enable-objc-interop -parse-as-library -emit-ir %s | %FileCheck %s --check-prefix=CHECK-%target-object-format -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-objc-interop -parse-as-library -emit-ir %s +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-objc-interop -parse-as-library -emit-ir %s | %FileCheck %s --check-prefix=CHECK-%target-object-format // It tests whether the vars @"\01l_OBJC_LABEL_PROTOCOL_$__TtP18objc_protocol_vars1T_" // and @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP18objc_protocol_vars1T_" are in llvm.used. @@ -26,7 +25,7 @@ import Foundation @objc func clone() -> T } -// CHECK-macho: @llvm.used = appending global [{{.*}}] [{{.*}}, i8* bitcast (i8** @"\01l_OBJC_LABEL_PROTOCOL_$__TtP18objc_protocol_vars1T_" to i8*), i8* bitcast (i8** @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP18objc_protocol_vars1T_" to i8*), {{.*}}], {{.*}} -// CHECK-elf: @llvm.compiler.used = appending global [{{.*}}] [{{.*}}, i8* bitcast (i8** @"\01l_OBJC_LABEL_PROTOCOL_$__TtP18objc_protocol_vars1T_" to i8*), i8* bitcast (i8** @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP18objc_protocol_vars1T_" to i8*), {{.*}}], {{.*}} -// CHECK-coff: @llvm.used = appending global [{{.*}}] [{{.*}}, i8* bitcast (i8** @"\01l_OBJC_LABEL_PROTOCOL_$__TtP18objc_protocol_vars1T_" to i8*), i8* bitcast (i8** @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP18objc_protocol_vars1T_" to i8*), {{.*}}], {{.*}} +// CHECK-macho: @llvm.used = appending global [{{.*}}] [{{.*}}, ptr @"\01l_OBJC_LABEL_PROTOCOL_$__TtP18objc_protocol_vars1T_", ptr @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP18objc_protocol_vars1T_", {{.*}}], {{.*}} +// CHECK-elf: @llvm.compiler.used = appending global [{{.*}}] [{{.*}}, ptr @"\01l_OBJC_LABEL_PROTOCOL_$__TtP18objc_protocol_vars1T_", ptr @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP18objc_protocol_vars1T_", {{.*}}], {{.*}} +// CHECK-coff: @llvm.used = appending global [{{.*}}] [{{.*}}, ptr @"\01l_OBJC_LABEL_PROTOCOL_$__TtP18objc_protocol_vars1T_", ptr @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP18objc_protocol_vars1T_", {{.*}}], {{.*}} diff --git a/test/IRGen/objc_protocols.swift b/test/IRGen/objc_protocols.swift index 5ce70e382348a..96383673dc7da 100644 --- a/test/IRGen/objc_protocols.swift +++ b/test/IRGen/objc_protocols.swift @@ -1,10 +1,8 @@ // RUN: %empty-directory(%t) // RUN: %build-irgen-test-overlays // RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -emit-module -o %t %S/Inputs/objc_protocols_Bas.swift -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %use_no_opaque_pointers -primary-file %s -emit-ir -disable-objc-attr-requires-foundation-module -target %target-swift-abi-5.8-triple > %t/out.ir -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %use_no_opaque_pointers -primary-file %s -emit-ir -disable-objc-attr-requires-foundation-module -target %target-swift-abi-5.7-triple > %t/out.old.ir -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -primary-file %s -emit-ir -disable-objc-attr-requires-foundation-module -target %target-swift-abi-5.8-triple -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -primary-file %s -emit-ir -disable-objc-attr-requires-foundation-module -target %target-swift-abi-5.7-triple +// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -primary-file %s -emit-ir -disable-objc-attr-requires-foundation-module -target %target-swift-abi-5.8-triple > %t/out.ir +// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) -primary-file %s -emit-ir -disable-objc-attr-requires-foundation-module -target %target-swift-abi-5.7-triple > %t/out.old.ir // RUN: %FileCheck --input-file=%t/out.ir %s --check-prefix=CHECK --check-prefix=CHECK-%target-os // RUN: %FileCheck --input-file=%t/out.old.ir %s --check-prefix=CHECK-OLD --check-prefix=CHECK-%target-os-OLD @@ -16,8 +14,8 @@ import objc_protocols_Bas // -- Protocol "Frungible" inherits only objc protocols and should have no // out-of-line inherited witnesses in its witness table. -// CHECK: [[ZIM_FRUNGIBLE_WITNESS:@"\$s14objc_protocols3ZimCAA9FrungibleAAWP"]] = hidden constant [2 x i8*] [ -// CHECK: i8* bitcast ({{.*}}* @"$s14objc_protocols3ZimCAA9FrungibleA2aDP6frungeyyFTW{{(\.ptrauth)?}}" to i8*) +// CHECK: [[ZIM_FRUNGIBLE_WITNESS:@"\$s14objc_protocols3ZimCAA9FrungibleAAWP"]] = hidden constant [2 x ptr] [ +// CHECK: ptr @"$s14objc_protocols3ZimCAA9FrungibleA2aDP6frungeyyFTW{{(\.ptrauth)?}}" // CHECK: ] protocol Ansible { @@ -30,12 +28,12 @@ class Foo : NSRuncing, NSFunging, Ansible { @objc func foo() {} func anse() {} } -// CHECK: @_INSTANCE_METHODS__TtC14objc_protocols3Foo = internal constant { i32, i32, [3 x { i8*, i8*, i8* }] } { +// CHECK: @_INSTANCE_METHODS__TtC14objc_protocols3Foo = internal constant { i32, i32, [3 x { ptr, ptr, ptr }] } { // CHECK: i32 24, i32 3, -// CHECK: [3 x { i8*, i8*, i8* }] [ -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @"\01L_selector_data(runce)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s14objc_protocols3FooC5runceyyFTo{{(\.ptrauth)?}}" to i8*) }, -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @"\01L_selector_data(funge)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s14objc_protocols3FooC5fungeyyFTo{{(\.ptrauth)?}}" to i8*) }, -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"\01L_selector_data(foo)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s14objc_protocols3FooC3fooyyFTo{{(\.ptrauth)?}}" to i8*) +// CHECK: [3 x { ptr, ptr, ptr }] [ +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(runce)", ptr @".str.7.v16@0:8", ptr @"$s14objc_protocols3FooC5runceyyFTo{{(\.ptrauth)?}}" }, +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(funge)", ptr @".str.7.v16@0:8", ptr @"$s14objc_protocols3FooC5fungeyyFTo{{(\.ptrauth)?}}" }, +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(foo)", ptr @".str.7.v16@0:8", ptr @"$s14objc_protocols3FooC3fooyyFTo{{(\.ptrauth)?}}" // CHECK: }] // CHECK: }, section "__DATA, {{.*}}", align 8 @@ -55,12 +53,12 @@ extension Bar : NSRuncing, NSFunging { } // -- ...but the ObjC protocol conformances on its extension add some -// CHECK: @"_CATEGORY_INSTANCE_METHODS__TtC14objc_protocols3Bar_$_objc_protocols" = internal constant { i32, i32, [3 x { i8*, i8*, i8* }] } { +// CHECK: @"_CATEGORY_INSTANCE_METHODS__TtC14objc_protocols3Bar_$_objc_protocols" = internal constant { i32, i32, [3 x { ptr, ptr, ptr }] } { // CHECK: i32 24, i32 3, -// CHECK: [3 x { i8*, i8*, i8* }] [ -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @"\01L_selector_data(runce)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s14objc_protocols3BarC5runceyyFTo{{(\.ptrauth)?}}" to i8*) }, -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @"\01L_selector_data(funge)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s14objc_protocols3BarC5fungeyyFTo{{(\.ptrauth)?}}" to i8*) }, -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"\01L_selector_data(foo)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s14objc_protocols3BarC3fooyyFTo{{(\.ptrauth)?}}" to i8*) } +// CHECK: [3 x { ptr, ptr, ptr }] [ +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(runce)", ptr @".str.7.v16@0:8", ptr @"$s14objc_protocols3BarC5runceyyFTo{{(\.ptrauth)?}}" }, +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(funge)", ptr @".str.7.v16@0:8", ptr @"$s14objc_protocols3BarC5fungeyyFTo{{(\.ptrauth)?}}" }, +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(foo)", ptr @".str.7.v16@0:8", ptr @"$s14objc_protocols3BarC3fooyyFTo{{(\.ptrauth)?}}" } // CHECK: ] // CHECK: }, section "__DATA, {{.*}}", align 8 @@ -71,10 +69,10 @@ extension Bas : NSRuncing { func foo() {} } -// CHECK: @"_CATEGORY_INSTANCE_METHODS__TtC18objc_protocols_Bas3Bas_$_objc_protocols" = internal constant { i32, i32, [1 x { i8*, i8*, i8* }] } { +// CHECK: @"_CATEGORY_INSTANCE_METHODS__TtC18objc_protocols_Bas3Bas_$_objc_protocols" = internal constant { i32, i32, [1 x { ptr, ptr, ptr }] } { // CHECK: i32 24, i32 1, -// CHECK: [1 x { i8*, i8*, i8* }] [ -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"\01L_selector_data(foo)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s18objc_protocols_Bas0C0C0a1_B0E3fooyyFTo{{(\.ptrauth)?}}" to i8*) } +// CHECK: [1 x { ptr, ptr, ptr }] [ +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(foo)", ptr @".str.7.v16@0:8", ptr @"$s18objc_protocols_Bas0C0C0a1_B0E3fooyyFTo{{(\.ptrauth)?}}" } // CHECK: ] // CHECK: }, section "__DATA, {{.*}}", align 8 @@ -91,12 +89,12 @@ class Zim : Frungible { func frunge() {} } -// CHECK: @_INSTANCE_METHODS__TtC14objc_protocols3Zim = internal constant { i32, i32, [3 x { i8*, i8*, i8* }] } { +// CHECK: @_INSTANCE_METHODS__TtC14objc_protocols3Zim = internal constant { i32, i32, [3 x { ptr, ptr, ptr }] } { // CHECK: i32 24, i32 3, -// CHECK: [3 x { i8*, i8*, i8* }] [ -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @"\01L_selector_data(runce)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s14objc_protocols3ZimC5runceyyFTo{{(\.ptrauth)?}}" to i8*) }, -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @"\01L_selector_data(funge)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s14objc_protocols3ZimC5fungeyyFTo{{(\.ptrauth)?}}" to i8*) }, -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"\01L_selector_data(foo)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s14objc_protocols3ZimC3fooyyFTo{{(\.ptrauth)?}}" to i8*) } +// CHECK: [3 x { ptr, ptr, ptr }] [ +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(runce)", ptr @".str.7.v16@0:8", ptr @"$s14objc_protocols3ZimC5runceyyFTo{{(\.ptrauth)?}}" }, +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(funge)", ptr @".str.7.v16@0:8", ptr @"$s14objc_protocols3ZimC5fungeyyFTo{{(\.ptrauth)?}}" }, +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(foo)", ptr @".str.7.v16@0:8", ptr @"$s14objc_protocols3ZimC3fooyyFTo{{(\.ptrauth)?}}" } // CHECK: ] // CHECK: }, section "__DATA, {{.*}}", align 8 @@ -111,11 +109,11 @@ extension Zang : Frungible { func frunge() {} } -// CHECK: @"_CATEGORY_INSTANCE_METHODS__TtC18objc_protocols_Bas4Zang_$_objc_protocols" = internal constant { i32, i32, [2 x { i8*, i8*, i8* }] } { +// CHECK: @"_CATEGORY_INSTANCE_METHODS__TtC18objc_protocols_Bas4Zang_$_objc_protocols" = internal constant { i32, i32, [2 x { ptr, ptr, ptr }] } { // CHECK: i32 24, i32 2, -// CHECK: [2 x { i8*, i8*, i8* }] [ -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @"\01L_selector_data(runce)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s18objc_protocols_Bas4ZangC0a1_B0E5runceyyFTo{{(\.ptrauth)?}}" to i8*) }, -// CHECK: { i8*, i8*, i8* } { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @"\01L_selector_data(foo)", i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.v16@0:8", i64 0, i64 0), i8* bitcast ({{.*}}* @"$s18objc_protocols_Bas4ZangC0a1_B0E3fooyyFTo{{(\.ptrauth)?}}" to i8*) } +// CHECK: [2 x { ptr, ptr, ptr }] [ +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(runce)", ptr @".str.7.v16@0:8", ptr @"$s18objc_protocols_Bas4ZangC0a1_B0E5runceyyFTo{{(\.ptrauth)?}}" }, +// CHECK: { ptr, ptr, ptr } { ptr @"\01L_selector_data(foo)", ptr @".str.7.v16@0:8", ptr @"$s18objc_protocols_Bas4ZangC0a1_B0E3fooyyFTo{{(\.ptrauth)?}}" } // CHECK: ] // CHECK: }, section "__DATA, {{.*}}", align 8 @@ -131,68 +129,63 @@ class ImplementingClass : InheritingProtocol { } // CHECK-macosx-OLD: @_PROTOCOL_PROTOCOLS_NSDoubleInheritedFunging = weak hidden constant{{.*}} @_PROTOCOL_NSFungingAndRuncing // -- Force generation of witness for Zim. -// CHECK: define hidden swiftcc { %objc_object*, i8** } @"$s14objc_protocols22mixed_heritage_erasure{{[_0-9a-zA-Z]*}}F" +// CHECK: define hidden swiftcc { ptr, ptr } @"$s14objc_protocols22mixed_heritage_erasure{{[_0-9a-zA-Z]*}}F" func mixed_heritage_erasure(_ x: Zim) -> Frungible { return x - // CHECK: [[T0:%.*]] = insertvalue { %objc_object*, i8** } undef, %objc_object* {{%.*}}, 0 - // CHECK: insertvalue { %objc_object*, i8** } [[T0]], i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* [[ZIM_FRUNGIBLE_WITNESS]], i32 0, i32 0), 1 + // CHECK: [[T0:%.*]] = insertvalue { ptr, ptr } undef, ptr {{%.*}}, 0 + // CHECK: insertvalue { ptr, ptr } [[T0]], ptr [[ZIM_FRUNGIBLE_WITNESS]], 1 } -// CHECK-OLD-LABEL: define hidden swiftcc void @"$s14objc_protocols0A8_generic{{[_0-9a-zA-Z]*}}F"(%objc_object* %0, %swift.type* %T) {{.*}} { -// CHECK-LABEL: define hidden swiftcc void @"$s14objc_protocols0A8_generic{{[_0-9a-zA-Z]*}}F"(%objc_object* %0, %swift.type* %T) {{.*}} { +// CHECK-OLD-LABEL: define hidden swiftcc void @"$s14objc_protocols0A8_generic{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr %T) {{.*}} { +// CHECK-LABEL: define hidden swiftcc void @"$s14objc_protocols0A8_generic{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr %T) {{.*}} { func objc_generic(_ x: T) { x.runce() - // CHECK: [[SELECTOR:%.*]] = load i8*, i8** @"\01L_selector(runce)", align 8 - // CHECK: bitcast %objc_object* %0 to [[OBJTYPE:.*]]* - // CHECK: call void bitcast (void ()* @objc_msgSend to void ([[OBJTYPE]]*, i8*)*)([[OBJTYPE]]* {{%.*}}, i8* [[SELECTOR]]) + // CHECK: [[SELECTOR:%.*]] = load ptr, ptr @"\01L_selector(runce)", align 8 + // CHECK: call void @objc_msgSend(ptr {{%.*}}, ptr [[SELECTOR]]) } -// CHECK-LABEL: define hidden swiftcc void @"$s14objc_protocols05call_A8_generic{{[_0-9a-zA-Z]*}}F"(%objc_object* %0, %swift.type* %T) {{.*}} { -// CHECK: call swiftcc void @"$s14objc_protocols0A8_generic{{[_0-9a-zA-Z]*}}F"(%objc_object* %0, %swift.type* %T) +// CHECK-LABEL: define hidden swiftcc void @"$s14objc_protocols05call_A8_generic{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr %T) {{.*}} { +// CHECK: call swiftcc void @"$s14objc_protocols0A8_generic{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr %T) func call_objc_generic(_ x: T) { objc_generic(x) } -// CHECK-LABEL: define hidden swiftcc void @"$s14objc_protocols0A9_protocol{{[_0-9a-zA-Z]*}}F"(%objc_object* %0) {{.*}} { +// CHECK-LABEL: define hidden swiftcc void @"$s14objc_protocols0A9_protocol{{[_0-9a-zA-Z]*}}F"(ptr %0) {{.*}} { func objc_protocol(_ x: NSRuncing) { x.runce() - // CHECK: [[SELECTOR:%.*]] = load i8*, i8** @"\01L_selector(runce)", align 8 - // CHECK: bitcast %objc_object* %0 to [[OBJTYPE:.*]]* - // CHECK: call void bitcast (void ()* @objc_msgSend to void ([[OBJTYPE]]*, i8*)*)([[OBJTYPE]]* {{%.*}}, i8* [[SELECTOR]]) + // CHECK: [[SELECTOR:%.*]] = load ptr, ptr @"\01L_selector(runce)", align 8 + // CHECK: call void @objc_msgSend(ptr {{%.*}}, ptr [[SELECTOR]]) } -// CHECK: define hidden swiftcc %objc_object* @"$s14objc_protocols0A8_erasure{{[_0-9a-zA-Z]*}}F"(%TSo7NSSpoonC* %0) {{.*}} { +// CHECK: define hidden swiftcc ptr @"$s14objc_protocols0A8_erasure{{[_0-9a-zA-Z]*}}F"(ptr %0) {{.*}} { func objc_erasure(_ x: NSSpoon) -> NSRuncing { return x - // CHECK: [[RES:%.*]] = bitcast %TSo7NSSpoonC* {{%.*}} to %objc_object* - // CHECK: ret %objc_object* [[RES]] + // CHECK: ret ptr {{%.*}} } -// CHECK: define hidden swiftcc void @"$s14objc_protocols0A21_protocol_composition{{[_0-9a-zA-Z]*}}F"(%objc_object* %0) +// CHECK: define hidden swiftcc void @"$s14objc_protocols0A21_protocol_composition{{[_0-9a-zA-Z]*}}F"(ptr %0) func objc_protocol_composition(_ x: NSRuncing & NSFunging) { x.runce() - // CHECK: [[RUNCE:%.*]] = load i8*, i8** @"\01L_selector(runce)", align 8 - // CHECK: bitcast %objc_object* %0 to [[OBJTYPE:.*]]* - // CHECK: call void bitcast (void ()* @objc_msgSend to void ([[OBJTYPE]]*, i8*)*)([[OBJTYPE]]* {{%.*}}, i8* [[RUNCE]]) + // CHECK: [[RUNCE:%.*]] = load ptr, ptr @"\01L_selector(runce)", align 8 + // CHECK: call void @objc_msgSend(ptr {{%.*}}, ptr [[RUNCE]]) x.funge() - // CHECK: [[FUNGE:%.*]] = load i8*, i8** @"\01L_selector(funge)", align 8 - // CHECK: call void bitcast (void ()* @objc_msgSend to void ([[OBJTYPE]]*, i8*)*)([[OBJTYPE]]* {{%.*}}, i8* [[FUNGE]]) + // CHECK: [[FUNGE:%.*]] = load ptr, ptr @"\01L_selector(funge)", align 8 + // CHECK: call void @objc_msgSend(ptr {{%.*}}, ptr [[FUNGE]]) } -// CHECK: define hidden swiftcc void @"$s14objc_protocols0A27_swift_protocol_composition{{[_0-9a-zA-Z]*}}F"(%objc_object* %0, i8** %1) +// CHECK: define hidden swiftcc void @"$s14objc_protocols0A27_swift_protocol_composition{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr %1) func objc_swift_protocol_composition (_ x: NSRuncing & Ansible & NSFunging) { x.runce() - // CHECK: [[RUNCE:%.*]] = load i8*, i8** @"\01L_selector(runce)", align 8 - // CHECK: bitcast %objc_object* %0 to [[OBJTYPE:.*]]* - // CHECK: call void bitcast (void ()* @objc_msgSend to void ([[OBJTYPE]]*, i8*)*)([[OBJTYPE]]* {{%.*}}, i8* [[RUNCE]]) + // CHECK: [[RUNCE:%.*]] = load ptr, ptr @"\01L_selector(runce)", align 8 + // CHECK: call void @objc_msgSend(ptr {{%.*}}, ptr [[RUNCE]]) /* TODO: Abstraction difference from ObjC protocol composition to * opaque protocol x.anse() */ x.funge() - // CHECK: [[FUNGE:%.*]] = load i8*, i8** @"\01L_selector(funge)", align 8 - // CHECK: call void bitcast (void ()* @objc_msgSend to void ([[OBJTYPE]]*, i8*)*)([[OBJTYPE]]* {{%.*}}, i8* [[FUNGE]]) + // CHECK: [[FUNGE:%.*]] = load ptr, ptr @"\01L_selector(funge)", align 8 + // CHECK: call void @objc_msgSend(ptr {{%.*}}, ptr [[FUNGE]]) } // TODO: Mixed class-bounded/fully general protocol compositions. diff --git a/test/IRGen/objc_subscripts.swift b/test/IRGen/objc_subscripts.swift index a26017afc7b6a..77dc8ed5968c5 100644 --- a/test/IRGen/objc_subscripts.swift +++ b/test/IRGen/objc_subscripts.swift @@ -1,56 +1,55 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir -enable-objc-interop -disable-objc-attr-requires-foundation-module | %FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-%target-ptrauth -// RUN: %target-swift-frontend -primary-file %s -emit-ir -enable-objc-interop -disable-objc-attr-requires-foundation-module +// RUN: %target-swift-frontend -primary-file %s -emit-ir -enable-objc-interop -disable-objc-attr-requires-foundation-module | %FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-%target-ptrauth // REQUIRES: PTRSIZE=64 // CHECK: @_INSTANCE_METHODS__TtC15objc_subscripts10SomeObject = -// CHECK: internal constant { i32, i32, [5 x { i8*, i8*, i8* }] } -// CHECK: { i32 24, i32 5, [5 x { i8*, i8*, i8* }] +// CHECK: internal constant { i32, i32, [5 x { ptr, ptr, ptr }] } +// CHECK: { i32 24, i32 5, [5 x { ptr, ptr, ptr }] // CHECK: [ -// CHECK: { i8*, i8*, i8* } +// CHECK: { ptr, ptr, ptr } // CHECK: { -// CHECK: i8* getelementptr inbounds ([26 x i8], [26 x i8]* @"\01L_selector_data(objectAtIndexedSubscript:)", i64 0, i64 0), -// CHECK: i8* getelementptr inbounds ([11 x i8], [11 x i8]* @".str.10.@24@0:8q16", i64 0, i64 0), -// CHECK-noptrauth: i8* bitcast ([[OPAQUE0:%.*]]* ([[OPAQUE1:%.*]]*, i8*, i64)* @"$s15objc_subscripts10SomeObjectCyACSicigTo" to i8*) -// CHECK-ptrauth: i8* bitcast ({ i8*, i32, i64, i64 }* @"$s15objc_subscripts10SomeObjectCyACSicigTo.ptrauth" to i8*) +// CHECK: ptr @"\01L_selector_data(objectAtIndexedSubscript:)", +// CHECK: ptr @".str.10.@24@0:8q16", +// CHECK-noptrauth: ptr @"$s15objc_subscripts10SomeObjectCyACSicigTo" +// CHECK-ptrauth: ptr @"$s15objc_subscripts10SomeObjectCyACSicigTo.ptrauth" // CHECK: }, -// CHECK: { i8*, i8*, i8* } +// CHECK: { ptr, ptr, ptr } // CHECK: { -// CHECK: i8* getelementptr inbounds ([30 x i8], [30 x i8]* @"\01L_selector_data(setObject:atIndexedSubscript:)", i64 0, i64 0), -// CHECK: i8* getelementptr inbounds ([14 x i8], [14 x i8]* @".str.13.v32@0:8@16q24", i64 0, i64 0), -// CHECK-noptrauth: i8* bitcast (void ([[OPAQUE2:%.*]]*, i8*, [[OPAQUE3:%.*]]*, i64)* @"$s15objc_subscripts10SomeObjectCyACSicisTo" to i8*) -// CHECK-ptrauth: i8* bitcast ({ i8*, i32, i64, i64 }* @"$s15objc_subscripts10SomeObjectCyACSicisTo.ptrauth" to i8*) +// CHECK: ptr @"\01L_selector_data(setObject:atIndexedSubscript:)", +// CHECK: ptr @".str.13.v32@0:8@16q24", +// CHECK-noptrauth: ptr @"$s15objc_subscripts10SomeObjectCyACSicisTo" +// CHECK-ptrauth: ptr @"$s15objc_subscripts10SomeObjectCyACSicisTo.ptrauth" // CHECK: }, -// CHECK: { i8*, i8*, i8* } +// CHECK: { ptr, ptr, ptr } // CHECK: { -// CHECK: i8* getelementptr inbounds ([25 x i8], [25 x i8]* @"\01L_selector_data(objectForKeyedSubscript:)", i64 0, i64 0), -// CHECK: i8* getelementptr inbounds ([11 x i8], [11 x i8]* @".str.10.q24@0:8@16", i64 0, i64 0), -// CHECK-noptrauth: i8* bitcast (i64 ([[OPAQUE4:%.*]]*, i8*, [[OPAQUE5:%.*]]*)* @"$s15objc_subscripts10SomeObjectCySiACcigTo" to i8*) -// CHECK-ptrauth: i8* bitcast ({ i8*, i32, i64, i64 }* @"$s15objc_subscripts10SomeObjectCySiACcigTo.ptrauth" to i8*) +// CHECK: ptr @"\01L_selector_data(objectForKeyedSubscript:)", +// CHECK: ptr @".str.10.q24@0:8@16", +// CHECK-noptrauth: ptr @"$s15objc_subscripts10SomeObjectCySiACcigTo" +// CHECK-ptrauth: ptr @"$s15objc_subscripts10SomeObjectCySiACcigTo.ptrauth" // CHECK: }, -// CHECK: { i8*, i8*, i8* } +// CHECK: { ptr, ptr, ptr } // CHECK: { -// CHECK: i8* getelementptr inbounds ([29 x i8], [29 x i8]* @"\01L_selector_data(setObject:forKeyedSubscript:)", i64 0, i64 0), -// CHECK: i8* getelementptr inbounds ([14 x i8], [14 x i8]* @".str.13.v32@0:8q16@24", i64 0, i64 0), -// CHECK-noptrauth: i8* bitcast (void ([[OPAQUE6:%.*]]*, i8*, i64, [[OPAQUE7:%.*]]*)* @"$s15objc_subscripts10SomeObjectCySiACcisTo" to i8*) -// CHECK-ptrauth: i8* bitcast ({ i8*, i32, i64, i64 }* @"$s15objc_subscripts10SomeObjectCySiACcisTo.ptrauth" to i8*) +// CHECK: ptr @"\01L_selector_data(setObject:forKeyedSubscript:)", +// CHECK: ptr @".str.13.v32@0:8q16@24", +// CHECK-noptrauth: ptr @"$s15objc_subscripts10SomeObjectCySiACcisTo" +// CHECK-ptrauth: ptr @"$s15objc_subscripts10SomeObjectCySiACcisTo.ptrauth" // CHECK: }, -// CHECK: { i8*, i8*, i8* } +// CHECK: { ptr, ptr, ptr } // CHECK: { -// CHECK: i8* getelementptr inbounds ([5 x i8], [5 x i8]* @"\01L_selector_data(init)", i64 0, i64 0), -// CHECK: i8* getelementptr inbounds ([8 x i8], [8 x i8]* @".str.7.@16@0:8", i64 0, i64 0), -// CHECK-noptrauth: i8* bitcast ([[OPAQUE8:%.*]]* ([[OPAQUE9:%.*]]*, i8*)* @"$s15objc_subscripts10SomeObjectCACycfcTo" to i8*) -// CHECK-ptrauth: i8* bitcast ({ i8*, i32, i64, i64 }* @"$s15objc_subscripts10SomeObjectCACycfcTo.ptrauth" to i8*) +// CHECK: ptr @"\01L_selector_data(init)", +// CHECK: ptr @".str.7.@16@0:8", +// CHECK-noptrauth: ptr @"$s15objc_subscripts10SomeObjectCACycfcTo" +// CHECK-ptrauth: ptr @"$s15objc_subscripts10SomeObjectCACycfcTo.ptrauth" // CHECK: } // CHECK: ] // CHECK: } @objc class SomeObject { @objc subscript (i : Int) -> SomeObject { - // CHECK-noptrauth: define internal [[OPAQUE0:%.*]]* @"$s15objc_subscripts10SomeObjectCyACSicigTo"([[OPAQUE1]]* %0, i8* %1, i64 %2) {{[#0-9]*}} { - // CHECK-ptrauth: define internal [[OPAQUE0:%.*]]* @"$s15objc_subscripts10SomeObjectCyACSicigTo"([[OPAQUE1:%.*]]* %0, i8* %1, i64 %2) {{[#0-9]*}} { + // CHECK-noptrauth: define internal ptr @"$s15objc_subscripts10SomeObjectCyACSicigTo"(ptr %0, ptr %1, i64 %2) {{[#0-9]*}} { + // CHECK-ptrauth: define internal ptr @"$s15objc_subscripts10SomeObjectCyACSicigTo"(ptr %0, ptr %1, i64 %2) {{[#0-9]*}} { get { - // CHECK: call swiftcc %T15objc_subscripts10SomeObjectC* @"$s15objc_subscripts10SomeObjectCyACSicig" + // CHECK: call swiftcc ptr @"$s15objc_subscripts10SomeObjectCyACSicig" return self } diff --git a/test/IRGen/objc_typeof.swift b/test/IRGen/objc_typeof.swift index cedb639f87e7c..419f0b436f7c4 100644 --- a/test/IRGen/objc_typeof.swift +++ b/test/IRGen/objc_typeof.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir %s +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir %s | %FileCheck %s // REQUIRES: objc_interop import Foundation @@ -10,28 +9,28 @@ open class Mixed: NSObject {} // CHECK-LABEL: define{{.*@.*}}14typeOfAllSwift public func typeOfAllSwift(_ x: AllSwift) -> AllSwift.Type { - // CHECK: [[ISA:%.*]] = load %swift.type* - // CHECK: ret %swift.type* [[ISA]] + // CHECK: [[ISA:%.*]] = load ptr + // CHECK: ret ptr [[ISA]] return type(of: x) } // CHECK-LABEL: define{{.*@.*}}11typeOfMixed public func typeOfMixed(_ x: Mixed) -> Mixed.Type { - // CHECK: [[ISA:%.*]] = call %swift.type* @swift_getObjectType - // CHECK: ret %swift.type* [[ISA]] + // CHECK: [[ISA:%.*]] = call ptr @swift_getObjectType + // CHECK: ret ptr [[ISA]] return type(of: x) } // CHECK-LABEL: define{{.*@.*}}14typeOfNSObject public func typeOfNSObject(_ x: NSObject) -> NSObject.Type { - // CHECK: [[ISA:%.*]] = call %swift.type* @swift_getObjectType - // CHECK: ret %swift.type* [[ISA]] + // CHECK: [[ISA:%.*]] = call ptr @swift_getObjectType + // CHECK: ret ptr [[ISA]] return type(of: x) } // CHECK-LABEL: define{{.*@.*}}13typeOfUnknown public func typeOfUnknown(_ x: AnyObject) -> AnyObject.Type { - // CHECK: [[ISA:%.*]] = call %swift.type* @swift_getObjectType - // CHECK: ret %swift.type* [[ISA]] + // CHECK: [[ISA:%.*]] = call ptr @swift_getObjectType + // CHECK: ret ptr [[ISA]] return type(of: x) } diff --git a/test/IRGen/objc_types_as_member.sil b/test/IRGen/objc_types_as_member.sil index a737fdd9f5f60..71a82a4ea269e 100644 --- a/test/IRGen/objc_types_as_member.sil +++ b/test/IRGen/objc_types_as_member.sil @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %build-irgen-test-overlays -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %use_no_opaque_pointers %s -emit-ir | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %s -emit-ir +// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %s -emit-ir | %FileCheck %s -DINT=i%target-ptrsize // REQUIRES: objc_interop @@ -9,11 +8,11 @@ import gizmo sil @use_metatype : $@convention(thin) (@thin T.Type) -> () -// CHECK-LABEL: define swiftcc void @test(%TSo014OuterTypeInnerB0C* swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define swiftcc void @test(ptr swiftself %0, ptr %Self, ptr %SelfWitnessTable) // FIXME: Metadata realization via demangling is disabled for now // CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$sSo9OuterTypeCMa" // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response %1, 0 -// CHECK: call swiftcc void @use_metatype(%swift.type* [[METADATA]]) +// CHECK: call swiftcc void @use_metatype(ptr [[METADATA]]) // CHECK: ret void sil @test : $@convention(witness_method: NSRuncing) (@guaranteed OuterType.InnerType) -> () { diff --git a/test/IRGen/opaque_result_type.swift b/test/IRGen/opaque_result_type.swift index 12fbda964ad72..965be9a64d269 100644 --- a/test/IRGen/opaque_result_type.swift +++ b/test/IRGen/opaque_result_type.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %{python} %utils/chex.py < %s > %t/opaque_result_type.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -enable-experimental-named-opaque-types -enable-implicit-dynamic -disable-availability-checking -emit-ir %t/opaque_result_type.swift | %FileCheck --check-prefix=CHECK --check-prefix=CHECK-NODEBUG %t/opaque_result_type.swift -// RUN: %target-swift-frontend -enable-experimental-named-opaque-types -enable-implicit-dynamic -disable-availability-checking -emit-ir %t/opaque_result_type.swift +// RUN: %target-swift-frontend -enable-experimental-named-opaque-types -enable-implicit-dynamic -disable-availability-checking -emit-ir %t/opaque_result_type.swift | %FileCheck --check-prefix=CHECK --check-prefix=CHECK-NODEBUG %t/opaque_result_type.swift // rdar://76863553 // UNSUPPORTED: OS=watchos && CPU=x86_64 @@ -193,9 +192,9 @@ public func useFoo(x: String, y: C) { // CHECK-LABEL: define {{.*}} @"$s18opaque_result_type6useFoo1x1yySS_AA1CCtF" // CHECK: [[OPAQUE:%.*]] = call {{.*}} @"$s18opaque_result_type3baz1zQrx_tAA1PRzAA1QRzlFQOMg" -// CHECK: [[CONFORMANCE:%.*]] = call swiftcc i8** @swift_getOpaqueTypeConformance(i8* {{.*}}, %swift.type_descriptor* [[OPAQUE]], [[WORD:i32|i64]] 1) +// CHECK: [[CONFORMANCE:%.*]] = call swiftcc ptr @swift_getOpaqueTypeConformance(ptr {{.*}}, ptr [[OPAQUE]], [[WORD:i32|i64]] 1) // CHECK: [[TYPE:%.*]] = call {{.*}} @__swift_instantiateConcreteTypeFromMangledName{{.*}}({{.*}} @"$s18opaque_result_type3baz1zQrx_tAA1PRzAA1QRzlFQOyAA1CCQo_MD") -// CHECK: call swiftcc i8** @swift_getAssociatedConformanceWitness(i8** [[CONFORMANCE]], %swift.type* [[TYPE]] +// CHECK: call swiftcc ptr @swift_getAssociatedConformanceWitness(ptr [[CONFORMANCE]], ptr [[TYPE]] // Make sure we can mangle named opaque result types struct Boom { @@ -211,7 +210,7 @@ public func gimmeBoom() -> Any { // CHECK-LABEL: define {{.*}} @"$sSS18opaque_result_type1PAA1AAaBP_AA1OPWT" // CHECK: [[OPAQUE:%.*]] = call {{.*}} @"$sSS18opaque_result_typeE3pooQryFQOMg" -// CHECK: call swiftcc i8** @swift_getOpaqueTypeConformance(i8* {{.*}}, %swift.type_descriptor* [[OPAQUE]], [[WORD]] 1) +// CHECK: call swiftcc ptr @swift_getOpaqueTypeConformance(ptr {{.*}}, ptr [[OPAQUE]], [[WORD]] 1) // rdar://problem/49585457 protocol R { diff --git a/test/IRGen/opaque_result_type_metadata_peephole.swift b/test/IRGen/opaque_result_type_metadata_peephole.swift index 375240c0694e3..0cda87e55aab7 100644 --- a/test/IRGen/opaque_result_type_metadata_peephole.swift +++ b/test/IRGen/opaque_result_type_metadata_peephole.swift @@ -1,9 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -swift-version 5 -disable-availability-checking -static -enable-library-evolution -emit-module-path %t/opaque_result_type_metadata_external.swiftmodule %S/Inputs/opaque_result_type_metadata_external.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -swift-version 5 -disable-availability-checking -emit-ir -I %t %s | %FileCheck %s --check-prefix=CHECK --check-prefix=DEFAULT -// RUN: %target-swift-frontend %use_no_opaque_pointers -swift-version 5 -disable-availability-checking -emit-ir -I %t %s -enable-implicit-dynamic | %FileCheck %s --check-prefix=CHECK --check-prefix=IMPLICIT-DYNAMIC -// RUN: %target-swift-frontend -swift-version 5 -disable-availability-checking -emit-ir -I %t %s -// RUN: %target-swift-frontend -swift-version 5 -disable-availability-checking -emit-ir -I %t %s -enable-implicit-dynamic +// RUN: %target-swift-frontend -swift-version 5 -disable-availability-checking -emit-ir -I %t %s | %FileCheck %s --check-prefix=CHECK --check-prefix=DEFAULT +// RUN: %target-swift-frontend -swift-version 5 -disable-availability-checking -emit-ir -I %t %s -enable-implicit-dynamic | %FileCheck %s --check-prefix=CHECK --check-prefix=IMPLICIT-DYNAMIC import opaque_result_type_metadata_external @@ -45,32 +43,32 @@ dynamic var replaceable_opaque_var: some P { // CHECK-LABEL: define {{.*}} @"$s36opaque_result_type_metadata_peephole26testOpaqueMetadataAccessesyyF" public func testOpaqueMetadataAccesses() { // We can look through, since it's internal - // DEFAULT: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* @"$sSiN", i8** @"$sSi36opaque_result_type_metadata_external1PAAWP") - // IMPLICIT-DYNAMIC: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* %{{.*}}, i8** %{{.*}}) + // DEFAULT: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr @"$sSiN", ptr @"$sSi36opaque_result_type_metadata_external1PAAWP") + // IMPLICIT-DYNAMIC: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr %{{.*}}, ptr %{{.*}}) bar(x: foo()) // We can look through, since it's internal - // DEFAULT: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* @"$sSiN", i8** @"$sSi36opaque_result_type_metadata_external1PAAWP") - // IMPLICIT-DYNAMIC: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* %{{.*}}, i8** %{{.*}}) + // DEFAULT: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr @"$sSiN", ptr @"$sSi36opaque_result_type_metadata_external1PAAWP") + // IMPLICIT-DYNAMIC: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr %{{.*}}, ptr %{{.*}}) bar(x: foo2()) // We can't look through, since it's resilient - // CHECK: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* %[[EXTERNAL_OPAQUE_METADATA:.*]], i8** %[[EXTERNAL_OPAQUE_PROTO:.*]]) + // CHECK: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr %[[EXTERNAL_OPAQUE_METADATA:.*]], ptr %[[EXTERNAL_OPAQUE_PROTO:.*]]) bar(x: external_opaque()) // We can look through, since it's inlinable - // CHECK: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* @"$sSiN", i8** @"$sSi36opaque_result_type_metadata_external1PAAWP") + // CHECK: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr @"$sSiN", ptr @"$sSi36opaque_result_type_metadata_external1PAAWP") bar(x: external_inlinable()) // We can look through to the wrapped resilient opaque type - // DEFAULT: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* %[[EXTERNAL_OPAQUE_METADATA]], i8** %[[EXTERNAL_OPAQUE_PROTO]]) - // IMPLICIT-DYNAMIC: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* %{{.*}}, i8** %{{.*}}) + // DEFAULT: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr %[[EXTERNAL_OPAQUE_METADATA]], ptr %[[EXTERNAL_OPAQUE_PROTO]]) + // IMPLICIT-DYNAMIC: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr %{{.*}}, ptr %{{.*}}) bar(x: external_opaque_wrap()) // We can look all the way through to the inlinable underlying type - // DEFAULT: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* @"$sSiN", i8** @"$sSi36opaque_result_type_metadata_external1PAAWP") - // IMPLICIT-DYNAMIC: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* %{{.*}}, i8** %{{.*}}) + // DEFAULT: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr @"$sSiN", ptr @"$sSi36opaque_result_type_metadata_external1PAAWP") + // IMPLICIT-DYNAMIC: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr %{{.*}}, ptr %{{.*}}) bar(x: external_inlinable_wrap()) // We can't look through since it's dynamically replaceable - // CHECK: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* %{{.*}}, i8** %{{.*}}) + // CHECK: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr %{{.*}}, ptr %{{.*}}) bar(x: replaceable_opaque()) // We can't look through since it's dynamically replaceable - // CHECK: call {{.*}}3bar{{.*}}(%swift.opaque* {{.*}}, %swift.type* %{{.*}}, i8** %{{.*}}) + // CHECK: call {{.*}}3bar{{.*}}(ptr {{.*}}, ptr %{{.*}}, ptr %{{.*}}) bar(x: replaceable_opaque_var) } diff --git a/test/IRGen/opaque_result_type_substitution.swift b/test/IRGen/opaque_result_type_substitution.swift index 4e990fe3fd735..c9061d32fab66 100644 --- a/test/IRGen/opaque_result_type_substitution.swift +++ b/test/IRGen/opaque_result_type_substitution.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-type-layout -enable-library-evolution -disable-availability-checking -emit-ir -primary-file %s | %FileCheck %s -// RUN: %target-swift-frontend -disable-type-layout -enable-library-evolution -disable-availability-checking -emit-ir -primary-file %s +// RUN: %target-swift-frontend -disable-type-layout -enable-library-evolution -disable-availability-checking -emit-ir -primary-file %s | %FileCheck %s public protocol E {} @@ -26,9 +25,9 @@ public func usePair(_ t: T, _ v: V) { print(p) } -// CHECK-LABEL: define{{.*}} swiftcc void @"$s31opaque_result_type_substitution7usePairyyx_q_tr0_lF"({{.*}}, %swift.type* %T, %swift.type* %V) -// CHECK: [[PAIR_TV:%.*]] = call swiftcc %swift.metadata_response @"$s31opaque_result_type_substitution4PairVMa"({{.*}}, %swift.type* %T, %swift.type* %V) +// CHECK-LABEL: define{{.*}} swiftcc void @"$s31opaque_result_type_substitution7usePairyyx_q_tr0_lF"({{.*}}, ptr %T, ptr %V) +// CHECK: [[PAIR_TV:%.*]] = call swiftcc %swift.metadata_response @"$s31opaque_result_type_substitution4PairVMa"({{.*}}, ptr %T, ptr %V) // CHECK: [[MD:%.*]] = extractvalue %swift.metadata_response [[PAIR_TV]], 0 -// CHECK: [[PAIR_OPAQUE:%.*]] = call swiftcc %swift.metadata_response @"$s31opaque_result_type_substitution4PairVMa"({{.*}}, %swift.type* [[MD]], %swift.type* [[MD]]) +// CHECK: [[PAIR_OPAQUE:%.*]] = call swiftcc %swift.metadata_response @"$s31opaque_result_type_substitution4PairVMa"({{.*}}, ptr [[MD]], ptr [[MD]]) // CHECK: [[MD2:%.*]] = extractvalue %swift.metadata_response [[PAIR_OPAQUE]], 0 -// CHECK: call {{.*}}* @"$s31opaque_result_type_substitution4PairVyACyxq_GADGr0_lWOh"({{.*}}, %swift.type* {{.*}}, %swift.type* [[MD2]]) +// CHECK: call ptr @"$s31opaque_result_type_substitution4PairVyACyxq_GADGr0_lWOh"({{.*}}, ptr {{.*}}, ptr [[MD2]]) diff --git a/test/IRGen/open_boxed_existential.sil b/test/IRGen/open_boxed_existential.sil index 8d9c310eaaf84..681376b32f838 100644 --- a/test/IRGen/open_boxed_existential.sil +++ b/test/IRGen/open_boxed_existential.sil @@ -1,12 +1,11 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers %s -emit-ir | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-%target-runtime -// RUN: %target-swift-frontend %s -emit-ir +// RUN: %target-swift-frontend %s -emit-ir | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-%target-runtime import Swift -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc {{i[0-9]+}} @open_boxed_existential(%swift.error* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc {{i[0-9]+}} @open_boxed_existential(ptr %0) sil @open_boxed_existential : $@convention(thin) (@owned Error) -> Int { entry(%b : $Error): - // CHECK: call void @swift_getErrorValue(%swift.error* %0, i8** {{%.*}}, [[TRIPLE:{ %swift.opaque\*, %swift.type\*, i8\*\* }]]* [[OUT:%.*]]) + // CHECK: call void @swift_getErrorValue(ptr %0, ptr {{%.*}}, ptr [[OUT:%.*]]) // CHECK: [[OUT_ADDR:%.*]] = getelementptr inbounds {{.*}} [[OUT]], i32 0, i32 0 // CHECK: [[ADDR:%.*]] = load {{.*}} [[OUT_ADDR]] // CHECK: [[OUT_TYPE:%.*]] = getelementptr inbounds {{.*}} [[OUT]], i32 0, i32 1 @@ -15,7 +14,7 @@ entry(%b : $Error): // CHECK: [[WITNESS:%.*]] = load {{.*}} [[OUT_WITNESS]] %o = open_existential_box %b : $Error to $*@opened("01234567-89AB-CDEF-0123-000000000000", Error) Self %m = witness_method $@opened("01234567-89AB-CDEF-0123-000000000000", Error) Self, #Error._code!getter, %o : $*@opened("01234567-89AB-CDEF-0123-000000000000", Error) Self : $@convention(witness_method: Error) (@in_guaranteed Self) -> Int - // CHECK: [[RESULT:%.*]] = call swiftcc [[INT:i[0-9]+]] @"$ss5ErrorP5_codeSivgTj"(%swift.opaque* noalias nocapture swiftself [[ADDR]], %swift.type* [[TYPE]], i8** [[WITNESS]]) + // CHECK: [[RESULT:%.*]] = call swiftcc [[INT:i[0-9]+]] @"$ss5ErrorP5_codeSivgTj"(ptr noalias nocapture swiftself [[ADDR]], ptr [[TYPE]], ptr [[WITNESS]]) %c = apply %m<@opened("01234567-89AB-CDEF-0123-000000000000", Error) Self>(%o) : $@convention(witness_method: Error) (@in_guaranteed Self) -> Int // CHECK: ret [[INT]] [[RESULT]] return %c : $Int diff --git a/test/IRGen/original-defined-attr.swift b/test/IRGen/original-defined-attr.swift index d15acf33ef17a..a8cfab56368f5 100644 --- a/test/IRGen/original-defined-attr.swift +++ b/test/IRGen/original-defined-attr.swift @@ -1,7 +1,5 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -swift-version 4 -enforce-exclusivity=checked %s -emit-ir -module-name CurrentModule -D CURRENT_MODULE | %FileCheck %s --check-prefix=CHECK-COMMON --check-prefix=CHECK-CURRENT --check-prefix=CHECK-CURRENT-%target-ptrsize -// RUN: %target-swift-frontend %use_no_opaque_pointers -swift-version 4 -enforce-exclusivity=checked %s -emit-ir -module-name OriginalModule | %FileCheck %s --check-prefix=CHECK-COMMON --check-prefix=CHECK-ORIGINAL --check-prefix=CHECK-ORIGINAL-%target-ptrsize -// RUN: %target-swift-frontend -swift-version 4 -enforce-exclusivity=checked %s -emit-ir -module-name CurrentModule -D CURRENT_MODULE -// RUN: %target-swift-frontend -swift-version 4 -enforce-exclusivity=checked %s -emit-ir -module-name OriginalModule +// RUN: %target-swift-frontend -swift-version 4 -enforce-exclusivity=checked %s -emit-ir -module-name CurrentModule -D CURRENT_MODULE | %FileCheck %s --check-prefix=CHECK-COMMON --check-prefix=CHECK-CURRENT --check-prefix=CHECK-CURRENT-%target-ptrsize +// RUN: %target-swift-frontend -swift-version 4 -enforce-exclusivity=checked %s -emit-ir -module-name OriginalModule | %FileCheck %s --check-prefix=CHECK-COMMON --check-prefix=CHECK-ORIGINAL --check-prefix=CHECK-ORIGINAL-%target-ptrsize // REQUIRES: OS=macosx #if CURRENT_MODULE @@ -59,7 +57,7 @@ func entityClient() { root.addEntity(leaf) // CHECK-COMMON: call swiftcc void @"$s14OriginalModule6EntityV03addC0yyACF"() let moved = MovedClass() - // CHECK-COMMON: call swiftcc %T14OriginalModule10MovedClassC* @"$s14OriginalModule10MovedClassCACycfC" + // CHECK-COMMON: call swiftcc ptr @"$s14OriginalModule10MovedClassCACycfC" moved.MovableFuncFoo() // CHECK-COMMON: call swiftcc void @"$s14OriginalModule10MovedClassC14MovableFuncFooyyF" } diff --git a/test/IRGen/outlined_copy_addr.swift b/test/IRGen/outlined_copy_addr.swift index 216a76f147f3c..e8129522e460c 100644 --- a/test/IRGen/outlined_copy_addr.swift +++ b/test/IRGen/outlined_copy_addr.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-type-layout -emit-ir -module-name outcopyaddr -primary-file %s | %FileCheck %s -// RUN: %target-swift-frontend -disable-type-layout -emit-ir -module-name outcopyaddr -primary-file %s +// RUN: %target-swift-frontend -disable-type-layout -emit-ir -module-name outcopyaddr -primary-file %s | %FileCheck %s public protocol BaseProt { } @@ -19,8 +18,8 @@ public struct StructWithBaseStruct { var elem2: BaseStruct } -// CHECK-LABEL: define hidden swiftcc void @"$s11outcopyaddr010StructWithbc4BaseB0V4elemAA0bcdB0VyxGvg"(%swift.opaque* noalias nocapture sret({{.*}}) %0, %swift.type* %"StructWithStructWithBaseStruct", %T11outcopyaddr010StructWithbc4BaseB0V* noalias nocapture swiftself %1) -// CHECK: call %T11outcopyaddr014StructWithBaseB0V.5* @"$s11outcopyaddr014StructWithBaseB0VyxGAA9ChildProtRzlWOc" +// CHECK-LABEL: define hidden swiftcc void @"$s11outcopyaddr010StructWithbc4BaseB0V4elemAA0bcdB0VyxGvg"(ptr noalias nocapture sret({{.*}}) %0, ptr %"StructWithStructWithBaseStruct", ptr noalias nocapture swiftself %1) +// CHECK: call ptr @"$s11outcopyaddr014StructWithBaseB0VyxGAA9ChildProtRzlWOc" public struct StructWithStructWithBaseStruct { public typealias Element = T let elem: StructWithBaseStruct @@ -37,8 +36,8 @@ struct OtherInternal { struct MyPrivate { var otherHelper: OtherInternal? = nil - // CHECK-LABEL: define hidden swiftcc {{i32|i64}} @"$s11outcopyaddr9MyPrivateVyACyxGxcfC"(%swift.opaque* noalias nocapture %0, %swift.type* %T, i8** %T.P) {{.*}} { - // CHECK: call %T11outcopyaddr9MyPrivateV* @"$s11outcopyaddr9MyPrivateVyxGAA1PRzlWOh"(%T11outcopyaddr9MyPrivateV* {{%.*}}) + // CHECK-LABEL: define hidden swiftcc {{i32|i64}} @"$s11outcopyaddr9MyPrivateVyACyxGxcfC"(ptr noalias nocapture %0, ptr %T, ptr %T.P) {{.*}} { + // CHECK: call ptr @"$s11outcopyaddr9MyPrivateVyxGAA1PRzlWOh"(ptr {{%.*}}) // CHECK: ret init(_: T) { } } diff --git a/test/IRGen/preserve_exclusivity.swift b/test/IRGen/preserve_exclusivity.swift index a991df4ef3ff9..fd36054fe9de4 100644 --- a/test/IRGen/preserve_exclusivity.swift +++ b/test/IRGen/preserve_exclusivity.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -swift-version 4 -parse-stdlib -Xllvm -sil-disable-pass=FunctionSignatureOpts -Xllvm -sil-disable-pass=GenericSpecializer -emit-ir -O %s | %FileCheck %s -// RUN: %target-swift-frontend -swift-version 4 -parse-stdlib -Xllvm -sil-disable-pass=FunctionSignatureOpts -Xllvm -sil-disable-pass=GenericSpecializer -emit-ir -O %s +// RUN: %target-swift-frontend -swift-version 4 -parse-stdlib -Xllvm -sil-disable-pass=FunctionSignatureOpts -Xllvm -sil-disable-pass=GenericSpecializer -emit-ir -O %s | %FileCheck %s // // Check that the -O pipeline always preserves the runtime calls for Builtin access markers and that the KeyPath implementation is fully inlined. @@ -12,7 +11,7 @@ func marker2() -> () @_silgen_name("marker3") func marker3() -> () -// IR-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity11beginAccessyyBp_BpxmtlF"(i8*, i8*, %swift.type*{{.*}}, %swift.type*{{.*}} %T1) +// IR-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity11beginAccessyyBp_BpxmtlF"(ptr, ptr, ptr{{.*}}, ptr{{.*}} %T1) // IR: call void @swift_beginAccess // IR-NEXT: ret void @@ -21,7 +20,7 @@ public func beginAccess(_ address: Builtin.RawPointer, _ scratch: Builtin.Ra Builtin.beginUnpairedModifyAccess(address, scratch, ty1); } -// CHECK-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity9endAccessyyBpF"(i8*{{.*}}) +// CHECK-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity9endAccessyyBpF"(ptr{{.*}}) // CHECK: call void @swift_endAccess // CHECK-NEXT: ret void public func endAccess(_ address: Builtin.RawPointer) { @@ -29,7 +28,7 @@ public func endAccess(_ address: Builtin.RawPointer) { Builtin.endUnpairedAccess(address) } -// CHECK-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity10readAccessyyBp_xmtlF"(i8* %0, %swift.type*{{.*}}, %swift.type*{{.*}} %T1) +// CHECK-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity10readAccessyyBp_xmtlF"(ptr %0, ptr{{.*}}, ptr{{.*}} %T1) // CHECK: call void @swift_beginAccess // CHECK: ret void public func readAccess(_ address: Builtin.RawPointer, _ ty1: T1.Type) { @@ -39,7 +38,7 @@ public func readAccess(_ address: Builtin.RawPointer, _ ty1: T1.Type) { // Make sure testAccess properly inlines in our functions. // -// CHECK-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity10testAccessyyBpF"(i8* %0) +// CHECK-LABEL: define {{.*}}swiftcc void @"$s20preserve_exclusivity10testAccessyyBpF"(ptr %0) // CHECK: call swiftcc void @marker1 // CHECK: call void @swift_beginAccess // CHECK: call swiftcc void @marker2 diff --git a/test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1argument-1ancestor-1distinct_use-1st_ancestor_nongeneric-external-resilient.swift b/test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1argument-1ancestor-1distinct_use-1st_ancestor_nongeneric-external-resilient.swift index 7926eb3c11b24..55cf5c87a4997 100644 --- a/test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1argument-1ancestor-1distinct_use-1st_ancestor_nongeneric-external-resilient.swift +++ b/test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1argument-1ancestor-1distinct_use-1st_ancestor_nongeneric-external-resilient.swift @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift -emit-library -module-name TestModule -module-link-name TestModule %S/Inputs/class-open-0argument.swift -emit-module-interface -swift-version 5 -o %t/%target-library-name(TestModule) -enable-library-evolution -// RUN: %target-swift-frontend %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir -I %t -L %t %s | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment --check-prefix=CHECK --check-prefix=CHECK-%target-vendor -// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir -I %t -L %t %s +// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir -I %t -L %t %s | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment --check-prefix=CHECK --check-prefix=CHECK-%target-vendor // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -34,5 +33,5 @@ func doit() { doit() // CHECK-LABEL: define hidden swiftcc void @"$s4main4doityyF"() -// CHECK: call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s4main5Value{{[A-Za-z_0-9]+}}LLCySiGMD") +// CHECK: call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s4main5Value{{[A-Za-z_0-9]+}}LLCySiGMD") // CHECK: } diff --git a/test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1argument-2ancestor-1du-1st_ancestor_nongeneric-fileprivate-2nd_ancestor_generic.swift b/test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1argument-2ancestor-1du-1st_ancestor_nongeneric-fileprivate-2nd_ancestor_generic.swift index bb361f09496b8..092fae0233c62 100644 --- a/test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1argument-2ancestor-1du-1st_ancestor_nongeneric-fileprivate-2nd_ancestor_generic.swift +++ b/test/IRGen/prespecialized-metadata/class-fileprivate-inmodule-1argument-2ancestor-1du-1st_ancestor_nongeneric-fileprivate-2nd_ancestor_generic.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir -I %t -L %t %s | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment --check-prefix=CHECK --check-prefix=CHECK-%target-vendor -// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir -I %t -L %t %s +// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir -I %t -L %t %s | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment --check-prefix=CHECK --check-prefix=CHECK-%target-vendor // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -48,5 +47,5 @@ doit() // TODO: Prespecialize Value. // CHECK-LABEL: define hidden swiftcc void @"$s4main4doityyF"() -// CHECK: call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s4main5Value{{[A-Za-z_0-9]+}}LLCySiGMD") +// CHECK: call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s4main5Value{{[A-Za-z_0-9]+}}LLCySiGMD") // CHECK: } diff --git a/test/IRGen/prespecialized-metadata/enum-extradata-payload_size-no_trailing_flags.swift b/test/IRGen/prespecialized-metadata/enum-extradata-payload_size-no_trailing_flags.swift index 546d14dca9637..08ade99997ac3 100644 --- a/test/IRGen/prespecialized-metadata/enum-extradata-payload_size-no_trailing_flags.swift +++ b/test/IRGen/prespecialized-metadata/enum-extradata-payload_size-no_trailing_flags.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -enable-library-evolution -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %target-swift-frontend -enable-library-evolution -emit-ir %s +// RUN: %target-swift-frontend -enable-library-evolution -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -25,14 +24,14 @@ // : i32 trunc ( // : i64 sub ( // : i64 ptrtoint ( -// : %swift.type* ( -// : %swift.type_descriptor*, -// : i8**, -// : i8* +// : ptr ( +// : ptr, +// : ptr, +// : ptr // : )* @"$s4main6EitherOMi" to i64 // : ), // : i64 ptrtoint ( -// : <{ i32, i32, i32, i32, i32, i16, i16 }>* @"$s4main6EitherOMP" to i64 +// : ptr @"$s4main6EitherOMP" to i64 // : ) // : ) to i32 // : ), @@ -41,12 +40,12 @@ // : i32 trunc ( // : i64 sub ( // : i64 ptrtoint ( -// : %swift.enum_vwtable* @"$s4main6EitherOWV" to i64 +// : ptr @"$s4main6EitherOWV" to i64 // : ), // : i64 ptrtoint ( -// : i32* getelementptr inbounds ( +// : ptr getelementptr inbounds ( // : <{ i32, i32, i32, i32, i32, i16, i16 }>, -// : <{ i32, i32, i32, i32, i32, i16, i16 }>* @"$s4main6EitherOMP", +// : ptr @"$s4main6EitherOMP", // : i32 0, // : i32 3 // : ) to i64 @@ -56,12 +55,12 @@ // : i32 trunc ( // CHECK-SAME: [[INT]] sub ( // CHECK-SAME: [[INT]] ptrtoint ( -// CHECK-SAME: <{ [[INT]] }>* [[EXTRA_DATA_PATTERN]] to [[INT]] +// CHECK-SAME: ptr [[EXTRA_DATA_PATTERN]] to [[INT]] // CHECK-SAME: ), // CHECK-SAME: [[INT]] ptrtoint ( -// CHECK-SAME: i32* getelementptr inbounds ( +// CHECK-SAME: ptr getelementptr inbounds ( // CHECK-SAME: <{ i32, i32, i32, i32, i32, i16, i16 }>, -// CHECK-SAME: <{ i32, i32, i32, i32, i32, i16, i16 }>* @"$s4main6EitherOMP", +// CHECK-SAME: ptr @"$s4main6EitherOMP", // CHECK-SAME: i32 0, // CHECK-SAME: i32 4 // CHECK-SAME: ) to [[INT]] diff --git a/test/IRGen/prespecialized-metadata/enum-extradata-payload_size-trailing_flags.swift b/test/IRGen/prespecialized-metadata/enum-extradata-payload_size-trailing_flags.swift index 07d27bc76d911..116e593f69ffc 100644 --- a/test/IRGen/prespecialized-metadata/enum-extradata-payload_size-trailing_flags.swift +++ b/test/IRGen/prespecialized-metadata/enum-extradata-payload_size-trailing_flags.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -enable-library-evolution -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -enable-library-evolution -emit-ir %s +// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -enable-library-evolution -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -26,14 +25,14 @@ // : i32 trunc ( // : i64 sub ( // : i64 ptrtoint ( -// : %swift.type* ( -// : %swift.type_descriptor*, -// : i8**, -// : i8* +// : ptr ( +// : ptr, +// : ptr, +// : ptr // : )* @"$s4main6EitherOMi" to i64 // : ), // : i64 ptrtoint ( -// : <{ i32, i32, i32, i32, i32, i16, i16 }>* @"$s4main6EitherOMP" to i64 +// : ptr @"$s4main6EitherOMP" to i64 // : ) // : ) to i32 // : ), @@ -42,12 +41,12 @@ // : i32 trunc ( // : i64 sub ( // : i64 ptrtoint ( -// : %swift.enum_vwtable* @"$s4main6EitherOWV" to i64 +// : ptr @"$s4main6EitherOWV" to i64 // : ), // : i64 ptrtoint ( -// : i32* getelementptr inbounds ( +// : ptr getelementptr inbounds ( // : <{ i32, i32, i32, i32, i32, i16, i16 }>, -// : <{ i32, i32, i32, i32, i32, i16, i16 }>* @"$s4main6EitherOMP", +// : ptr @"$s4main6EitherOMP", // : i32 0, // : i32 3 // : ) to i64 @@ -57,12 +56,12 @@ // : i32 trunc ( // CHECK-SAME: [[INT]] sub ( // CHECK-SAME: [[INT]] ptrtoint ( -// CHECK-SAME: <{ [[INT]], i64 }>* [[EXTRA_DATA_PATTERN]] to [[INT]] +// CHECK-SAME: ptr [[EXTRA_DATA_PATTERN]] to [[INT]] // CHECK-SAME: ), // CHECK-SAME: [[INT]] ptrtoint ( -// CHECK-SAME: i32* getelementptr inbounds ( +// CHECK-SAME: ptr getelementptr inbounds ( // CHECK-SAME: <{ i32, i32, i32, i32, i32, i16, i16 }>, -// CHECK-SAME: <{ i32, i32, i32, i32, i32, i16, i16 }>* @"$s4main6EitherOMP", +// CHECK-SAME: ptr @"$s4main6EitherOMP", // CHECK-SAME: i32 0, // CHECK-SAME: i32 4 // CHECK-SAME: ) to [[INT]] diff --git a/test/IRGen/prespecialized-metadata/struct-inmodule-0argument.swift b/test/IRGen/prespecialized-metadata/struct-inmodule-0argument.swift index 9050aea692ca6..bb79acf028960 100644 --- a/test/IRGen/prespecialized-metadata/struct-inmodule-0argument.swift +++ b/test/IRGen/prespecialized-metadata/struct-inmodule-0argument.swift @@ -1,5 +1,4 @@ -// RUN: %swift %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s +// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -17,7 +16,7 @@ func consume(_ t: T) { } // CHECK: define hidden swiftcc void @"$s4main4doityyF"() #{{[0-9]+}} { -// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(%swift.opaque* noalias nocapture %{{[0-9]+}}, %swift.type* bitcast ([[INT]]* getelementptr inbounds (<{ i8*, i8**, [[INT]], <{ i32, i32, i32, i32, i32, i32, i32 }>*, i32{{(, \[4 x i8\])?}}, i64 }>, <{ i8*, i8**, [[INT]], <{ i32, i32, i32, i32, i32, i32, i32 }>*, i32{{(, \[4 x i8\])?}}, i64 }>* @"$s4main5ValueVMf", i32 0, i32 2) to %swift.type*)) +// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(ptr noalias nocapture %{{[0-9]+}}, ptr getelementptr inbounds (<{ ptr, ptr, [[INT]], ptr, i32{{(, \[4 x i8\])?}}, i64 }>, ptr @"$s4main5ValueVMf", i32 0, i32 2)) // CHECK: } func doit() { consume( Value(first: 13) ) diff --git a/test/IRGen/prespecialized-metadata/struct-outmodule-frozen-1argument-1distinct_use-struct-outmodule-resilient-othermodule.swift b/test/IRGen/prespecialized-metadata/struct-outmodule-frozen-1argument-1distinct_use-struct-outmodule-resilient-othermodule.swift index 59706bb3212cc..047d0178134db 100644 --- a/test/IRGen/prespecialized-metadata/struct-outmodule-frozen-1argument-1distinct_use-struct-outmodule-resilient-othermodule.swift +++ b/test/IRGen/prespecialized-metadata/struct-outmodule-frozen-1argument-1distinct_use-struct-outmodule-resilient-othermodule.swift @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-frozen-1argument.swift -emit-library -o %t/%target-library-name(Generic) -emit-module -module-name Generic -emit-module-path %t/Generic.swiftmodule -enable-library-evolution // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-nonfrozen-0argument.swift -emit-library -o %t/%target-library-name(Argument) -emit-module -module-name Argument -emit-module-path %t/Argument.swiftmodule -enable-library-evolution -// RUN: %swift %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument +// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -21,8 +20,8 @@ import Generic import Argument // CHECK: define hidden swiftcc void @"$s4main4doityyF"() #{{[0-9]+}} { -// CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s7Generic11OneArgumentVy0C07IntegerVGMD") -// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(%swift.opaque* noalias nocapture {{%[0-9]+}}, %swift.type* [[METADATA]]) +// CHECK: [[METADATA:%[0-9]+]] = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s7Generic11OneArgumentVy0C07IntegerVGMD") +// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(ptr noalias nocapture {{%[0-9]+}}, ptr [[METADATA]]) // CHECK: } func doit() { consume( OneArgument(Integer(13)) ) diff --git a/test/IRGen/prespecialized-metadata/struct-outmodule-frozen-1argument-1distinct_use-struct-outmodule-resilient-samemodule.swift b/test/IRGen/prespecialized-metadata/struct-outmodule-frozen-1argument-1distinct_use-struct-outmodule-resilient-samemodule.swift index 4b6cf60e32a80..9ddd6ef077828 100644 --- a/test/IRGen/prespecialized-metadata/struct-outmodule-frozen-1argument-1distinct_use-struct-outmodule-resilient-samemodule.swift +++ b/test/IRGen/prespecialized-metadata/struct-outmodule-frozen-1argument-1distinct_use-struct-outmodule-resilient-samemodule.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-frozen-1argument.swift %S/Inputs/struct-public-nonfrozen-0argument.swift -emit-library -o %t/%target-library-name(Generic) -emit-module -module-name Generic -emit-module-path %t/Generic.swiftmodule -enable-library-evolution -// RUN: %swift %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument +// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -19,8 +18,8 @@ func consume(_ t: T) { import Generic // CHECK: define hidden swiftcc void @"$s4main4doityyF"() #{{[0-9]+}} { -// CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s7Generic11OneArgumentVyAA7IntegerVGMD") -// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(%swift.opaque* noalias nocapture {{%[0-9]+}}, %swift.type* [[METADATA]]) +// CHECK: [[METADATA:%[0-9]+]] = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s7Generic11OneArgumentVyAA7IntegerVGMD") +// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(ptr noalias nocapture {{%[0-9]+}}, ptr [[METADATA]]) // CHECK: } func doit() { consume( OneArgument(Integer(13)) ) diff --git a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-inmodule.swift b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-inmodule.swift index 59e354ef218a9..cffdab3c0b1f6 100644 --- a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-inmodule.swift +++ b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-inmodule.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-nonfrozen-1argument.swift -emit-library -o %t/%target-library-name(Generic) -emit-module -module-name Generic -emit-module-path %t/Generic.swiftmodule -enable-library-evolution -// RUN: %swift %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument +// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -23,8 +22,8 @@ struct TheArgument { } // CHECK: define hidden swiftcc void @"$s4main4doityyF"() #{{[0-9]+}} { -// CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s7Generic11OneArgumentVy4main03TheC0VGMD") -// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(%swift.opaque* noalias nocapture {{%[0-9]+}}, %swift.type* [[METADATA]]) +// CHECK: [[METADATA:%[0-9]+]] = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s7Generic11OneArgumentVy4main03TheC0VGMD") +// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(ptr noalias nocapture {{%[0-9]+}}, ptr [[METADATA]]) // CHECK: } func doit() { consume( OneArgument(TheArgument(value: 13)) ) diff --git a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-frozen-othermodule.swift b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-frozen-othermodule.swift index 04540fe723146..5b27d8a167c02 100644 --- a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-frozen-othermodule.swift +++ b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-frozen-othermodule.swift @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-nonfrozen-1argument.swift -emit-library -o %t/%target-library-name(Generic) -emit-module -module-name Generic -emit-module-path %t/Generic.swiftmodule -enable-library-evolution // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-frozen-0argument.swift -emit-library -o %t/%target-library-name(Argument) -emit-module -module-name Argument -emit-module-path %t/Argument.swiftmodule -enable-library-evolution -// RUN: %swift %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument +// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -21,8 +20,8 @@ import Generic import Argument // CHECK: define hidden swiftcc void @"$s4main4doityyF"() #{{[0-9]+}} { -// CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s7Generic11OneArgumentVy0C07IntegerVGMD") -// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(%swift.opaque* noalias nocapture {{%[0-9]+}}, %swift.type* [[METADATA]]) +// CHECK: [[METADATA:%[0-9]+]] = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s7Generic11OneArgumentVy0C07IntegerVGMD") +// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(ptr noalias nocapture {{%[0-9]+}}, ptr [[METADATA]]) // CHECK: } func doit() { consume( OneArgument(Integer(13)) ) diff --git a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-frozen-samemodule.swift b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-frozen-samemodule.swift index d4c0741e9a4d0..c8d6dd13ed78c 100644 --- a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-frozen-samemodule.swift +++ b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-frozen-samemodule.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-nonfrozen-1argument.swift %S/Inputs/struct-public-frozen-0argument.swift -emit-library -o %t/%target-library-name(Generic) -emit-module -module-name Generic -emit-module-path %t/Generic.swiftmodule -enable-library-evolution -// RUN: %swift %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric +// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -19,8 +18,8 @@ func consume(_ t: T) { import Generic // CHECK: define hidden swiftcc void @"$s4main4doityyF"() #{{[0-9]+}} { -// CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s7Generic11OneArgumentVyAA7IntegerVGMD") -// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(%swift.opaque* noalias nocapture {{%[0-9]+}}, %swift.type* [[METADATA]]) +// CHECK: [[METADATA:%[0-9]+]] = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s7Generic11OneArgumentVyAA7IntegerVGMD") +// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(ptr noalias nocapture {{%[0-9]+}}, ptr [[METADATA]]) // CHECK: } func doit() { consume( OneArgument(Integer(13)) ) diff --git a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-othermodule.swift b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-othermodule.swift index ec2766707de80..b00db8bf47aa2 100644 --- a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-othermodule.swift +++ b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-othermodule.swift @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-nonfrozen-1argument.swift -emit-library -o %t/%target-library-name(Generic) -emit-module -module-name Generic -emit-module-path %t/Generic.swiftmodule -enable-library-evolution // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-nonfrozen-0argument.swift -emit-library -o %t/%target-library-name(Argument) -emit-module -module-name Argument -emit-module-path %t/Argument.swiftmodule -// RUN: %swift %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument +// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -21,8 +20,8 @@ import Generic import Argument // CHECK: define hidden swiftcc void @"$s4main4doityyF"() #{{[0-9]+}} { -// CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s7Generic11OneArgumentVy0C07IntegerVGMD") -// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(%swift.opaque* noalias nocapture {{%[0-9]+}}, %swift.type* [[METADATA]]) +// CHECK: [[METADATA:%[0-9]+]] = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s7Generic11OneArgumentVy0C07IntegerVGMD") +// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(ptr noalias nocapture {{%[0-9]+}}, ptr [[METADATA]]) // CHECK: } func doit() { consume( OneArgument(Integer(13)) ) diff --git a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-resilient-othermodule.swift b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-resilient-othermodule.swift index f458807a78c2a..788d6c5a2fe00 100644 --- a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-resilient-othermodule.swift +++ b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-resilient-othermodule.swift @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-nonfrozen-1argument.swift -emit-library -o %t/%target-library-name(Generic) -emit-module -module-name Generic -emit-module-path %t/Generic.swiftmodule -enable-library-evolution // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-nonfrozen-0argument.swift -emit-library -o %t/%target-library-name(Argument) -emit-module -module-name Argument -emit-module-path %t/Argument.swiftmodule -enable-library-evolution -// RUN: %swift %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument +// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric -lArgument | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -21,8 +20,8 @@ import Generic import Argument // CHECK: define hidden swiftcc void @"$s4main4doityyF"() #{{[0-9]+}} { -// CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s7Generic11OneArgumentVy0C07IntegerVGMD") -// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(%swift.opaque* noalias nocapture {{%[0-9]+}}, %swift.type* [[METADATA]]) +// CHECK: [[METADATA:%[0-9]+]] = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s7Generic11OneArgumentVy0C07IntegerVGMD") +// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(ptr noalias nocapture {{%[0-9]+}}, ptr [[METADATA]]) // CHECK: } func doit() { consume( OneArgument(Integer(13)) ) diff --git a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-resilient-samemodule.swift b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-resilient-samemodule.swift index 026da0b0a00e6..9fca340d3c03a 100644 --- a/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-resilient-samemodule.swift +++ b/test/IRGen/prespecialized-metadata/struct-outmodule-resilient-1argument-1distinct_use-struct-outmodule-resilient-samemodule.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift -Xfrontend -prespecialize-generic-metadata -target %module-target-future %S/Inputs/struct-public-nonfrozen-1argument.swift %S/Inputs/struct-public-nonfrozen-0argument.swift -emit-library -o %t/%target-library-name(Generic) -emit-module -module-name Generic -emit-module-path %t/Generic.swiftmodule -enable-library-evolution -// RUN: %swift %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric +// RUN: %swift -prespecialize-generic-metadata -target %module-target-future -emit-ir %s -L %t -I %t -lGeneric | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -19,8 +18,8 @@ func consume(_ t: T) { import Generic // CHECK: define hidden swiftcc void @"$s4main4doityyF"() #{{[0-9]+}} { -// CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s7Generic11OneArgumentVyAA7IntegerVGMD") -// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(%swift.opaque* noalias nocapture {{%[0-9]+}}, %swift.type* [[METADATA]]) +// CHECK: [[METADATA:%[0-9]+]] = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s7Generic11OneArgumentVyAA7IntegerVGMD") +// CHECK: call swiftcc void @"$s4main7consumeyyxlF"(ptr noalias nocapture {{%[0-9]+}}, ptr [[METADATA]]) // CHECK: } func doit() { consume( OneArgument(Integer(13)) ) diff --git a/test/IRGen/protocol_resilience.sil b/test/IRGen/protocol_resilience.sil index cff832e725de6..ee4627d7f63ba 100644 --- a/test/IRGen/protocol_resilience.sil +++ b/test/IRGen/protocol_resilience.sil @@ -1,8 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_protocol.swiftmodule -module-name=resilient_protocol %S/../Inputs/resilient_protocol.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -Xllvm -sil-disable-pass=Simplification -enable-library-evolution %s | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -Xllvm -sil-disable-pass=Simplification -enable-library-evolution -O %s -// RUN: %target-swift-frontend -I %t -emit-ir -Xllvm -sil-disable-pass=Simplification -enable-library-evolution %s +// RUN: %target-swift-frontend -I %t -emit-ir -Xllvm -sil-disable-pass=Simplification -enable-library-evolution %s | %FileCheck %s -DINT=i%target-ptrsize // RUN: %target-swift-frontend -I %t -emit-ir -Xllvm -sil-disable-pass=Simplification -enable-library-evolution -O %s sil_stage canonical @@ -57,19 +55,19 @@ import resilient_protocol // CHECK-SAME: %swift.protocol_requirement { i32 {{(-1745420271)|(17)}}, i32 0 }, // CHECK-SAME: %swift.protocol_requirement { i32 {{(-544407535)|(17)}}, -// CHECK-SAME: i32{{ | trunc \(i64 }}sub ([[INT]] ptrtoint (void (%swift.opaque*, %swift.type*, i8**)* @defaultC to [[INT]]), +// CHECK-SAME: i32{{ | trunc \(i64 }}sub ([[INT]] ptrtoint (ptr @defaultC to [[INT]]), // CHECK-SAME: }, // CHECK-SAME: %swift.protocol_requirement { i32 {{(1717370897)|(17)}}, -// CHECK-SAME: i32{{ | trunc \(i64 }}sub ([[INT]] ptrtoint (void (%swift.opaque*, %swift.type*, i8**)* @defaultD to [[INT]]), +// CHECK-SAME: i32{{ | trunc \(i64 }}sub ([[INT]] ptrtoint (ptr @defaultD to [[INT]]), // CHECK-SAME: }, // CHECK-SAME: %swift.protocol_requirement { i32 {{(297926657)|(1)}}, -// CHECK-SAME: i32{{ | trunc \(i64 }}sub ([[INT]] ptrtoint (void (%swift.type*, %swift.type*, i8**)* @defaultE to [[INT]]), +// CHECK-SAME: i32{{ | trunc \(i64 }}sub ([[INT]] ptrtoint (ptr @defaultE to [[INT]]), // CHECK-SAME: }, // CHECK-SAME: %swift.protocol_requirement { i32 {{(351797249)|(1)}}, -// CHECK-SAME: i32{{ | trunc \(i64 }}sub ([[INT]] ptrtoint (void (%swift.type*, %swift.type*, i8**)* @defaultF to [[INT]]), +// CHECK-SAME: i32{{ | trunc \(i64 }}sub ([[INT]] ptrtoint (ptr @defaultF to [[INT]]), // CHECK-SAME: } // CHECK-SAME: } @@ -138,48 +136,45 @@ protocol InternalProtocol { // CHECK-SAME: } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @defaultC(%swift.opaque* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @defaultC(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: sil @defaultC : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () { bb0(%0 : $*Self): - // CHECK-NEXT: %[[SELF:.*]] = alloca %swift.type* - // CHECK-NEXT: store %swift.type* %Self, %swift.type** %[[SELF]] + // CHECK-NEXT: %[[SELF:.*]] = alloca ptr + // CHECK-NEXT: store ptr %Self, ptr %[[SELF]] // CHECK-NEXT: ret void %result = tuple () return %result : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @defaultD(%swift.opaque* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @defaultD(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: sil @defaultD : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () { bb0(%0 : $*Self): // Make sure we can emit direct references to other default implementations - // CHECK-NEXT: %[[SELF:.*]] = alloca %swift.type* - // CHECK-NEXT: store %swift.type* %Self, %swift.type** %[[SELF]] - // CHECK-NEXT: call swiftcc void @defaultC(%swift.opaque* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) + // CHECK-NEXT: %[[SELF:.*]] = alloca ptr + // CHECK-NEXT: store ptr %Self, ptr %[[SELF]] + // CHECK-NEXT: call swiftcc void @defaultC(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) %fn1 = function_ref @defaultC : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () %ignore1 = apply %fn1(%0) : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () // Make sure we can do dynamic dispatch to other protocol requirements // from a default implementation - // CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 5 - // CHECK-NEXT: [[WITNESS_FN:%.*]] = load i8*, i8** [[WITNESS_ADDR]] - // CHECK-NEXT: [[WITNESS:%.*]] = bitcast i8* [[WITNESS_FN]] to void (%swift.opaque*, %swift.type*, i8**)* - // CHECK: call swiftcc void [[WITNESS]](%swift.opaque* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) + // CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 5 + // CHECK-NEXT: [[WITNESS_FN:%.*]] = load ptr, ptr [[WITNESS_ADDR]] + // CHECK: call swiftcc void [[WITNESS_FN]](ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) %fn2 = witness_method $Self, #ResilientProtocol.defaultC : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () %ignore2 = apply %fn2(%0) : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () // Make sure we can partially apply a static reference to a default // implementation - // CHECK-NEXT: [[WTABLE:%.*]] = bitcast i8** %SelfWitnessTable to i8* - // 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]] + // CHECK-NEXT: [[CONTEXT:%.*]] = call noalias ptr @swift_allocObject({{.*}}) + // CHECK: [[WTABLE_ADDR:%.*]] = getelementptr inbounds <{ %swift.refcounted, [{{4|8}} x i8], ptr }>, ptr [[CONTEXT]], i32 0, i32 2 + // CHECK-NEXT: store ptr %SelfWitnessTable, ptr [[WTABLE_ADDR]] %fn3 = function_ref @defaultC : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () %ignore3 = partial_apply %fn3() : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () @@ -190,37 +185,34 @@ bb0(%0 : $*Self): } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @defaultE(%swift.type* swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @defaultE(ptr swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: sil @defaultE : $@convention(witness_method: ResilientProtocol) (@thick Self.Type) -> () { bb0(%0 : $@thick Self.Type): // Make sure we can emit direct references to other default implementations - // CHECK-NEXT: %[[SELF:.*]] = alloca %swift.type* - // CHECK-NEXT: store %swift.type* %Self, %swift.type** %[[SELF]] - // CHECK-NEXT: call swiftcc void @defaultF(%swift.type* swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) + // CHECK-NEXT: %[[SELF:.*]] = alloca ptr + // CHECK-NEXT: store ptr %Self, ptr %[[SELF]] + // CHECK-NEXT: call swiftcc void @defaultF(ptr swiftself %0, ptr %Self, ptr %SelfWitnessTable) %fn1 = function_ref @defaultF : $@convention(witness_method: ResilientProtocol) (@thick Self.Type) -> () %ignore1 = apply %fn1(%0) : $@convention(witness_method: ResilientProtocol) (@thick Self.Type) -> () // Make sure we can do dynamic dispatch to other protocol requirements // from a default implementation - // CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 8 - // CHECK-NEXT: [[WITNESS_FN:%.*]] = load i8*, i8** [[WITNESS_ADDR]] - // CHECK-NEXT: [[WITNESS:%.*]] = bitcast i8* [[WITNESS_FN]] to void (%swift.type*, %swift.type*, i8**)* - // CHECK: call swiftcc void [[WITNESS]](%swift.type* swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) + // CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 8 + // CHECK-NEXT: [[WITNESS_FN:%.*]] = load ptr, ptr [[WITNESS_ADDR]] + // CHECK: call swiftcc void [[WITNESS_FN]](ptr swiftself %0, ptr %Self, ptr %SelfWitnessTable) %fn2 = witness_method $Self, #ResilientProtocol.defaultF : $@convention(witness_method: ResilientProtocol) (@thick Self.Type) -> () %ignore2 = apply %fn2(%0) : $@convention(witness_method: ResilientProtocol) (@thick Self.Type) -> () // Make sure we can partially apply a static reference to a default // implementation - // CHECK-NEXT: [[WTABLE:%.*]] = bitcast i8** %SelfWitnessTable to i8* - // 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]] + // CHECK-NEXT: [[CONTEXT:%.*]] = call noalias ptr @swift_allocObject({{.*}}) + // CHECK: [[WTABLE_ADDR:%.*]] = getelementptr inbounds <{ %swift.refcounted, [{{4|8}} x i8], ptr }>, ptr [[CONTEXT]], i32 0, i32 2 + // CHECK-NEXT: store ptr %SelfWitnessTable, ptr [[WTABLE_ADDR]] %fn3 = function_ref @defaultF : $@convention(witness_method: ResilientProtocol) (@thick Self.Type) -> () %ignore3 = partial_apply %fn3() : $@convention(witness_method: ResilientProtocol) (@thick Self.Type) -> () @@ -231,13 +223,13 @@ bb0(%0 : $@thick Self.Type): } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @defaultF(%swift.type* swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @defaultF(ptr swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: sil @defaultF : $@convention(witness_method: ResilientProtocol) (@thick Self.Type) -> () { bb0(%0 : $@thick Self.Type): - // CHECK-NEXT: %[[SELF:.*]] = alloca %swift.type* - // CHECK-NEXT: store %swift.type* %Self, %swift.type** %[[SELF]] + // CHECK-NEXT: %[[SELF:.*]] = alloca ptr + // CHECK-NEXT: store ptr %Self, ptr %[[SELF]] // CHECK-NEXT: ret void %result = tuple () return %result : $() @@ -270,7 +262,7 @@ struct ConformingStruct : ResilientProtocol { static func defaultF() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @noDefaultA(%T19protocol_resilience16ConformingStructV* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @noDefaultA(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: sil @noDefaultA : $@convention(witness_method: ResilientProtocol) (@in_guaranteed ConformingStruct) -> () { @@ -279,8 +271,7 @@ bb0(%0 : $*ConformingStruct): // Make sure we can emit direct references to default implementations with a // concrete Self type. - // CHECK-NEXT: [[SELF:%.*]] = bitcast %T19protocol_resilience16ConformingStructV* %0 to %swift.opaque* - // CHECK-NEXT: call swiftcc void @defaultC(%swift.opaque* noalias nocapture swiftself [[SELF]], %swift.type* %Self, i8** %SelfWitnessTable) + // CHECK-NEXT: call swiftcc void @defaultC(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) %fn1 = function_ref @defaultC : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () %ignore1 = apply %fn1(%0) : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () @@ -290,18 +281,16 @@ bb0(%0 : $*ConformingStruct): } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @noDefaultB(%T19protocol_resilience16ConformingStructV* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @noDefaultB(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: sil @noDefaultB : $@convention(witness_method: ResilientProtocol) (@in_guaranteed ConformingStruct) -> () { bb0(%0 : $*ConformingStruct): // Make sure we can partially apply direct references to default implementations - // CHECK-NEXT: [[CONF:%.*]] = bitcast i8** %SelfWitnessTable to i8* - // 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* [[CONF]], i8** [[WTABLE]] + // CHECK-NEXT: [[CONTEXT:%.*]] = call noalias ptr @swift_allocObject({{.*}}) + // CHECK-NEXT: [[WTABLE:%.*]] = getelementptr inbounds <{ %swift.refcounted, ptr }>, ptr [[CONTEXT]], i32 0, i32 1 + // CHECK-NEXT: store ptr %SelfWitnessTable, ptr [[WTABLE]] %fn1 = function_ref @defaultC : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () %ignore1 = partial_apply %fn1() : $@convention(witness_method: ResilientProtocol) (@in_guaranteed Self) -> () @@ -328,21 +317,20 @@ sil_witness_table ConformingStruct : ResilientProtocol module protocol_resilienc // Make sure resilient conformances are accessed with an accessor function // -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @doSomething(%swift.opaque* noalias nocapture %0, %swift.type* %T, i8** %T.OtherResilientProtocol) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @doSomething(ptr noalias nocapture %0, ptr %T, ptr %T.OtherResilientProtocol) sil @doSomething : $@convention(thin) (@in T) -> () { bb0(%0 : $*T): %result = tuple () return %result : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @passConformingType(%T19protocol_resilience23ResilientConformingTypeV* noalias nocapture %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @passConformingType(ptr noalias nocapture %0) sil @passConformingType : $@convention(thin) (@in ResilientConformingType) -> () { bb0(%0 : $*ResilientConformingType): // CHECK-NEXT: entry: - // CHECK-NEXT: [[ARG:%.*]] = bitcast %T19protocol_resilience23ResilientConformingTypeV* %0 to %swift.opaque* - // CHECK-NEXT: [[WTABLE:%.*]] = call i8** @"$s19protocol_resilience23ResilientConformingTypeVAC010resilient_A005OtherC8ProtocolAAWl"() - // CHECK-NEXT: call swiftcc void @doSomething(%swift.opaque* noalias nocapture [[ARG]], %swift.type* bitcast ({{i32|i64}}* getelementptr inbounds ({{.*}} @"$s19protocol_resilience23ResilientConformingTypeVMf", i32 0, i32 2) to %swift.type*), i8** [[WTABLE]]) + // CHECK-NEXT: [[WTABLE:%.*]] = call ptr @"$s19protocol_resilience23ResilientConformingTypeVAC010resilient_A005OtherC8ProtocolAAWl"() + // CHECK-NEXT: call swiftcc void @doSomething(ptr noalias nocapture %0, ptr getelementptr inbounds ({{.*}} @"$s19protocol_resilience23ResilientConformingTypeVMf", i32 0, i32 2), ptr [[WTABLE]]) %fn = function_ref @doSomething : $@convention(thin) (@in T) -> () %ignore = apply %fn(%0) : $@convention(thin) (@in T) -> () @@ -354,20 +342,20 @@ bb0(%0 : $*ResilientConformingType): // Caching witness table accessor -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} linkonce_odr hidden i8** @"$s19protocol_resilience23ResilientConformingTypeVAC010resilient_A005OtherC8ProtocolAAWl"() +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} linkonce_odr hidden ptr @"$s19protocol_resilience23ResilientConformingTypeVAC010resilient_A005OtherC8ProtocolAAWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s19protocol_resilience23ResilientConformingTypeVAC010resilient_A005OtherC8ProtocolAAWL" -// CHECK-NEXT: [[COND:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s19protocol_resilience23ResilientConformingTypeVAC010resilient_A005OtherC8ProtocolAAWL" +// CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// CHECK: [[WTABLE:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: store atomic i8** [[WTABLE]], i8*** @"$s19protocol_resilience23ResilientConformingTypeVAC010resilient_A005OtherC8ProtocolAAWL" release +// CHECK: [[WTABLE:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: store atomic ptr [[WTABLE]], ptr @"$s19protocol_resilience23ResilientConformingTypeVAC010resilient_A005OtherC8ProtocolAAWL" release // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[RESULT:%.*]] = phi i8** [ [[CCHE:%.*]], %entry ], [ [[WTABLE:%.*]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[RESULT]] +// CHECK-NEXT: [[RESULT:%.*]] = phi ptr [ [[CCHE:%.*]], %entry ], [ [[WTABLE:%.*]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[RESULT]] // @@ -386,21 +374,20 @@ sil_witness_table AnotherConformingStruct : RefinesOtherResilientProtocol module sil_witness_table hidden AnotherConformingStruct: OtherResilientProtocol module protocol_resilience { } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @doSomethingRefined(%swift.opaque* noalias nocapture %0, %swift.type* %T, i8** %T.RefinesOtherResilientProtocol) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @doSomethingRefined(ptr noalias nocapture %0, ptr %T, ptr %T.RefinesOtherResilientProtocol) sil @doSomethingRefined : $@convention(thin) (@in T) -> () { bb0(%0 : $*T): %result = tuple () return %result : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @passConformingTypeRefined(%T19protocol_resilience23AnotherConformingStructV* noalias nocapture %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @passConformingTypeRefined(ptr noalias nocapture %0) sil @passConformingTypeRefined : $@convention(thin) (@in AnotherConformingStruct) -> () { bb0(%0 : $*AnotherConformingStruct): // CHECK-NEXT: entry: - // CHECK-NEXT: [[ARG:%.*]] = bitcast %T19protocol_resilience23AnotherConformingStructV* %0 to %swift.opaque* - // CHECK-NEXT: [[WTABLE:%.*]] = call i8** @"$s19protocol_resilience23AnotherConformingStructVAcA29RefinesOtherResilientProtocolAAWl"() - // CHECK-NEXT: call swiftcc void @doSomethingRefined(%swift.opaque* noalias nocapture [[ARG]], %swift.type* bitcast ({{i32|i64}}* getelementptr inbounds ({{.*}} @"$s19protocol_resilience23AnotherConformingStructVMf", i32 0, i32 2) to %swift.type*), i8** [[WTABLE]]) + // CHECK-NEXT: [[WTABLE:%.*]] = call ptr @"$s19protocol_resilience23AnotherConformingStructVAcA29RefinesOtherResilientProtocolAAWl"() + // CHECK-NEXT: call swiftcc void @doSomethingRefined(ptr noalias nocapture %0, ptr getelementptr inbounds ({{.*}} @"$s19protocol_resilience23AnotherConformingStructVMf", i32 0, i32 2), ptr [[WTABLE]]) %fn = function_ref @doSomethingRefined : $@convention(thin) (@in T) -> () %ignore = apply %fn(%0) : $@convention(thin) (@in T) -> () @@ -430,21 +417,20 @@ sil_witness_table ConformsWithResilientAssoc : HasResilientAssoc module protocol associated_type T: ResilientConformingType } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @doSomethingAssoc(%swift.opaque* noalias nocapture %0, %swift.type* %T, i8** %T.HasResilientAssoc) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @doSomethingAssoc(ptr noalias nocapture %0, ptr %T, ptr %T.HasResilientAssoc) sil @doSomethingAssoc : $@convention(thin) (@in T) -> () { bb0(%0 : $*T): %result = tuple () return %result : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @passConformingTypeAssoc(%T19protocol_resilience26ConformsWithResilientAssocV* noalias nocapture %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @passConformingTypeAssoc(ptr noalias nocapture %0) sil @passConformingTypeAssoc : $@convention(thin) (@in ConformsWithResilientAssoc) -> () { bb0(%0 : $*ConformsWithResilientAssoc): // CHECK-NEXT: entry: - // CHECK-NEXT: [[ARG:%.*]] = bitcast %T19protocol_resilience26ConformsWithResilientAssocV* %0 to %swift.opaque* - // CHECK-NEXT: [[WTABLE:%.*]] = call i8** @"$s19protocol_resilience26ConformsWithResilientAssocVAcA03HaseF0AAWl - // CHECK-NEXT: call swiftcc void @doSomethingAssoc(%swift.opaque* noalias nocapture [[ARG]], %swift.type* bitcast ({{i32|i64}}* getelementptr inbounds ({{.*}} @"$s19protocol_resilience26ConformsWithResilientAssocVMf", i32 0, i32 2) to %swift.type*), i8** [[WTABLE]]) + // CHECK-NEXT: [[WTABLE:%.*]] = call ptr @"$s19protocol_resilience26ConformsWithResilientAssocVAcA03HaseF0AAWl + // CHECK-NEXT: call swiftcc void @doSomethingAssoc(ptr noalias nocapture %0, ptr getelementptr inbounds ({{.*}} @"$s19protocol_resilience26ConformsWithResilientAssocVMf", i32 0, i32 2), ptr [[WTABLE]]) %fn = function_ref @doSomethingAssoc : $@convention(thin) (@in T) -> () %ignore = apply %fn(%0) : $@convention(thin) (@in T) -> () diff --git a/test/IRGen/protocol_resilience_descriptors.swift b/test/IRGen/protocol_resilience_descriptors.swift index d3ad192b361e6..72f7422123463 100644 --- a/test/IRGen/protocol_resilience_descriptors.swift +++ b/test/IRGen/protocol_resilience_descriptors.swift @@ -1,14 +1,12 @@ // RUN: %empty-directory(%t) // Resilient protocol definition -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -enable-library-evolution -module-name=resilient_protocol %S/../Inputs/resilient_protocol.swift | %FileCheck -DINT=i%target-ptrsize -check-prefix=CHECK-DEFINITION %s -// RUN: %target-swift-frontend -emit-ir -enable-library-evolution -module-name=resilient_protocol %S/../Inputs/resilient_protocol.swift +// RUN: %target-swift-frontend -emit-ir -enable-library-evolution -module-name=resilient_protocol %S/../Inputs/resilient_protocol.swift | %FileCheck -DINT=i%target-ptrsize -check-prefix=CHECK-DEFINITION %s // Resilient protocol usage // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_protocol.swiftmodule -module-name=resilient_protocol %S/../Inputs/resilient_protocol.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -enable-library-evolution %s | %FileCheck %s -DINT=i%target-ptrsize -check-prefix=CHECK-USAGE -// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %s +// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %s | %FileCheck %s -DINT=i%target-ptrsize -check-prefix=CHECK-USAGE // ---------------------------------------------------------------------------- // Resilient protocol definition @@ -29,7 +27,7 @@ // CHECK-DEFINITION-SAME: [[INT]] 1 // Protocol requirements base descriptor -// CHECK-DEFINITION: @"$s18resilient_protocol21ResilientBaseProtocolTL" ={{( dllexport)?}}{{( protected)?}} alias %swift.protocol_requirement, getelementptr (%swift.protocol_requirement, %swift.protocol_requirement* getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32, %swift.protocol_requirement }>, <{ i32, i32, i32, i32, i32, i32, %swift.protocol_requirement }>* @"$s18resilient_protocol21ResilientBaseProtocolMp", i32 0, i32 6), i32 -1) +// CHECK-DEFINITION: @"$s18resilient_protocol21ResilientBaseProtocolTL" ={{( dllexport)?}}{{( protected)?}} alias %swift.protocol_requirement, getelementptr (%swift.protocol_requirement, ptr getelementptr inbounds (<{ i32, i32, i32, i32, i32, i32, %swift.protocol_requirement }>, ptr @"$s18resilient_protocol21ResilientBaseProtocolMp", i32 0, i32 6), i32 -1) // Associated conformance descriptor for inherited protocol // CHECK-DEFINITION-LABEL: s18resilient_protocol24ResilientDerivedProtocolPAA0c4BaseE0Tb" ={{( dllexport)?}}{{( protected)?}} alias @@ -40,7 +38,7 @@ // CHECK-DEFINITION: @"$s18resilient_protocol29ProtocolWithAssocTypeDefaultsP2T2AC_AA014OtherResilientC0Tn" ={{( dllexport)?}}{{( protected)?}} alias // Default associated conformance witnesses -// CHECK-DEFINITION-LABEL: define internal swiftcc i8** @"$s18resilient_protocol29ProtocolWithAssocTypeDefaultsP2T2AC_AA014OtherResilientC0TN" +// CHECK-DEFINITION-LABEL: define internal swiftcc ptr @"$s18resilient_protocol29ProtocolWithAssocTypeDefaultsP2T2AC_AA014OtherResilientC0TN" import resilient_protocol @@ -100,9 +98,9 @@ public struct ConformsToDerived : ResilientDerivedProtocol { // Resilient protocol usage // ---------------------------------------------------------------------------- -// CHECK-USAGE: define{{( dllexport)?}}{{( protected)?}} swiftcc %swift.type* @"$s31protocol_resilience_descriptors17assocTypeMetadatay1TQzmxm010resilient_A024ProtocolWithRequirementsRzlF"(%swift.type* %0, %swift.type* [[PWD:%.*]], i8** [[WTABLE:%.*]]) +// CHECK-USAGE: define{{( dllexport)?}}{{( protected)?}} swiftcc ptr @"$s31protocol_resilience_descriptors17assocTypeMetadatay1TQzmxm010resilient_A024ProtocolWithRequirementsRzlF"(ptr %0, ptr [[PWD:%.*]], ptr [[WTABLE:%.*]]) public func assocTypeMetadata(_: PWR.Type) -> PWR.T.Type { - // CHECK-USAGE: call swiftcc %swift.metadata_response @swift_getAssociatedTypeWitness([[INT]] 0, i8** %PWR.ProtocolWithRequirements, %swift.type* %PWR, %swift.protocol_requirement* @"$s18resilient_protocol24ProtocolWithRequirementsTL", %swift.protocol_requirement* @"$s1T18resilient_protocol24ProtocolWithRequirementsPTl") + // CHECK-USAGE: call swiftcc %swift.metadata_response @swift_getAssociatedTypeWitness([[INT]] 0, ptr %PWR.ProtocolWithRequirements, ptr %PWR, ptr @"$s18resilient_protocol24ProtocolWithRequirementsTL", ptr @"$s1T18resilient_protocol24ProtocolWithRequirementsPTl") return PWR.T.self } diff --git a/test/IRGen/protocol_synthesized.swift b/test/IRGen/protocol_synthesized.swift index a30e64e2da950..32461bb3447b8 100644 --- a/test/IRGen/protocol_synthesized.swift +++ b/test/IRGen/protocol_synthesized.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -parse-stdlib -module-name=Swift -I%S/Inputs %s | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir -parse-stdlib -module-name=Swift -I%S/Inputs %s +// RUN: %target-swift-frontend -emit-ir -parse-stdlib -module-name=Swift -I%S/Inputs %s | %FileCheck %s // This module contains an enum that gets imported by the compiler as an // OptionSet. What we're trying to test here is that a *non-resilient* @@ -10,7 +9,7 @@ import SynthesizedProtocol -// CHECK: @"$sSo5Flagsas9OptionSetSCMc" = linkonce_odr hidden constant { i32, i32, i32, i32, i16, i16, i32, i32 } { i32 {{(trunc \(i64 )?}}sub ({{i(32|64)}} ptrtoint (<{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %swift.protocol_requirement, %swift.protocol_requirement }>* @"$ss9OptionSetMp" to {{i(32|64)}}), {{i(32|64)}} ptrtoint ({ i32, i32, i32, i32, i16, i16, i32, i32 }* @"$sSo5Flagsas9OptionSetSCMc" to {{i(32|64)}})){{( to i32\))?}}, i32 {{(trunc \(i64 )?}}sub ({{i(32|64)}} ptrtoint (<{ i32, i32, i32, i32, i32, i32, i32, i32 }>* @"$sSo5FlagsaMn" to {{i(32|64)}}), {{i(32|64)}} ptrtoint (i32* getelementptr inbounds ({ i32, i32, i32, i32, i16, i16, i32, i32 }, { i32, i32, i32, i32, i16, i16, i32, i32 }* @"$sSo5Flagsas9OptionSetSCMc", i32 0, i32 1) to {{i(32|64)}})){{( to i32\))?}}, i32 {{(trunc \(i64 )?}}sub ({{i(32|64)}} ptrtoint ([3 x i8*]* @"$sSo5Flagsas9OptionSetSCWP" to {{i(32|64)}}), {{i(32|64)}} ptrtoint (i32* getelementptr inbounds ({ i32, i32, i32, i32, i16, i16, i32, i32 }, { i32, i32, i32, i32, i16, i16, i32, i32 }* @"$sSo5Flagsas9OptionSetSCMc", i32 0, i32 2) to {{i(32|64)}})){{( to i32\))?}}, i32 131200, i16 3, i16 1, i32 {{(trunc \(i64 )?}}sub ({{i(32|64)}} ptrtoint (void (i8**, %swift.type*, i8**)* @"$sSo5Flagsas9OptionSetSCWI" to {{i(32|64)}}), {{i(32|64)}} ptrtoint (i32* getelementptr inbounds ({ i32, i32, i32, i32, i16, i16, i32, i32 }, { i32, i32, i32, i32, i16, i16, i32, i32 }* @"$sSo5Flagsas9OptionSetSCMc", i32 0, i32 6) to {{i(32|64)}})){{( to i32\))?}}, i32 {{(trunc \(i64 )?}}sub ({{i(32|64)}} ptrtoint ([16 x i8*]* @"$sSo5Flagsas9OptionSetSCMcMK" to {{i(32|64)}}), {{i(32|64)}} ptrtoint (i32* getelementptr inbounds ({ i32, i32, i32, i32, i16, i16, i32, i32 }, { i32, i32, i32, i32, i16, i16, i32, i32 }* @"$sSo5Flagsas9OptionSetSCMc", i32 0, i32 7) to {{i(32|64)}})) {{(to i32\) )?}}}, section "{{[^"]*}}"{{(, comdat)?}},{{.*}} align 4 +// CHECK: @"$sSo5Flagsas9OptionSetSCMc" = linkonce_odr hidden constant { i32, i32, i32, i32, i16, i16, i32, i32 } { i32 {{(trunc \(i64 )?}}sub ({{i(32|64)}} ptrtoint (ptr @"$ss9OptionSetMp" to {{i(32|64)}}), {{i(32|64)}} ptrtoint (ptr @"$sSo5Flagsas9OptionSetSCMc" to {{i(32|64)}})){{( to i32\))?}}, i32 {{(trunc \(i64 )?}}sub ({{i(32|64)}} ptrtoint (ptr @"$sSo5FlagsaMn" to {{i(32|64)}}), {{i(32|64)}} ptrtoint (ptr getelementptr inbounds ({ i32, i32, i32, i32, i16, i16, i32, i32 }, ptr @"$sSo5Flagsas9OptionSetSCMc", i32 0, i32 1) to {{i(32|64)}})){{( to i32\))?}}, i32 {{(trunc \(i64 )?}}sub ({{i(32|64)}} ptrtoint (ptr @"$sSo5Flagsas9OptionSetSCWP" to {{i(32|64)}}), {{i(32|64)}} ptrtoint (ptr getelementptr inbounds ({ i32, i32, i32, i32, i16, i16, i32, i32 }, ptr @"$sSo5Flagsas9OptionSetSCMc", i32 0, i32 2) to {{i(32|64)}})){{( to i32\))?}}, i32 131200, i16 3, i16 1, i32 {{(trunc \(i64 )?}}sub ({{i(32|64)}} ptrtoint (ptr @"$sSo5Flagsas9OptionSetSCWI" to {{i(32|64)}}), {{i(32|64)}} ptrtoint (ptr getelementptr inbounds ({ i32, i32, i32, i32, i16, i16, i32, i32 }, ptr @"$sSo5Flagsas9OptionSetSCMc", i32 0, i32 6) to {{i(32|64)}})){{( to i32\))?}}, i32 {{(trunc \(i64 )?}}sub ({{i(32|64)}} ptrtoint (ptr @"$sSo5Flagsas9OptionSetSCMcMK" to {{i(32|64)}}), {{i(32|64)}} ptrtoint (ptr getelementptr inbounds ({ i32, i32, i32, i32, i16, i16, i32, i32 }, ptr @"$sSo5Flagsas9OptionSetSCMc", i32 0, i32 7) to {{i(32|64)}})) {{(to i32\) )?}}}, section "{{[^"]*}}"{{(, comdat)?}},{{.*}} align 4 // Triggers the inclusion of the relevant ProtocolConformanceDescriptor public func doFlags(f: Flags) -> Any diff --git a/test/IRGen/protocol_with_superclass.sil b/test/IRGen/protocol_with_superclass.sil index 25fe2e21beb38..6e312fdfb555d 100644 --- a/test/IRGen/protocol_with_superclass.sil +++ b/test/IRGen/protocol_with_superclass.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-runtime -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -primary-file %s -emit-ir +// RUN: %target-swift-frontend -primary-file %s -emit-ir | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-runtime -DINT=i%target-ptrsize sil_stage canonical @@ -26,147 +25,111 @@ class SubDerived : Derived {} class MoreDerived : Concrete, SubProto {} -// CHECK-objc-LABEL: define hidden swiftcc void @checkExistentialDowncast(%T24protocol_with_superclass8ConcreteC* %0, {{.*}} { -// CHECK-native-LABEL: define hidden swiftcc void @checkExistentialDowncast(%T24protocol_with_superclass8ConcreteC* %0, %swift.refcounted* %1, i8** %2, %T24protocol_with_superclass8ConcreteC* %3, i8** %4, %T24protocol_with_superclass8ConcreteC* %5, i8** %6, %T24protocol_with_superclass8ConcreteC* %7, i8** %8) {{.*}} { +// CHECK-objc-LABEL: define hidden swiftcc void @checkExistentialDowncast(ptr %0, {{.*}} { +// CHECK-native-LABEL: define hidden swiftcc void @checkExistentialDowncast(ptr %0, ptr %1, ptr %2, ptr %3, ptr %4, ptr %5, ptr %6, ptr %7, ptr %8) {{.*}} { sil hidden @checkExistentialDowncast : $@convention(thin) (@owned Concrete, @owned SuperProto, @owned SuperProto & Concrete, @owned ProtoRefinesClass, @owned SubProto) -> () { bb0(%0 : $Concrete, %1 : $SuperProto, %2 : $SuperProto & Concrete, %3 : $ProtoRefinesClass, %4 : $SubProto): - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %0 to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %0 to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %0 + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %0, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %5 = unconditional_checked_cast %0 : $Concrete to ProtoRefinesClass - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %5 : $ProtoRefinesClass - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %0 to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %0 to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %0 + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %0, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %6 = unconditional_checked_cast %0 : $Concrete to SubProto - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %6 : $SubProto - // CHECK-objc: [[ISA:%.*]] = call %swift.type* @swift_getObjectType(%objc_object* %{{[0-9]+}}) - // CHECK-objc-NEXT: [[OBJECT:%.*]] = bitcast %objc_object* %{{[0-9]+}} to i8* - // CHECK-native: [[ISA_ADDR:%.*]] = bitcast %swift.refcounted* %1 - // CHECK-native-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-native-NEXT: [[OBJECT:%.*]] = bitcast %swift.refcounted* %1 to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK-objc: [[ISA:%.*]] = call ptr @swift_getObjectType(ptr %{{[0-9]+}}) + // CHECK-native: [[ISA_ADDR:%.*]] = bitcast ptr %1 + // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr [[ISA_ADDR]] + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %1, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %7 = unconditional_checked_cast %1 : $SuperProto to ProtoRefinesClass - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %7 : $ProtoRefinesClass - // CHECK-objc: [[ISA:%.*]] = call %swift.type* @swift_getObjectType(%objc_object* %{{[0-9]+}}) - // CHECK-objc-NEXT: [[OBJECT:%.*]] = bitcast %objc_object* %{{[0-9]+}} to i8* - // CHECK-native: [[ISA_ADDR:%.*]] = bitcast %swift.refcounted* %1 - // CHECK-native-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-native-NEXT: [[OBJECT:%.*]] = bitcast %swift.refcounted* %1 to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK-objc: [[ISA:%.*]] = call ptr @swift_getObjectType(ptr %{{[0-9]+}}) + // CHECK-native: [[ISA_ADDR:%.*]] = bitcast ptr %1 + // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr [[ISA_ADDR]] + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %1, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %8 = unconditional_checked_cast %1 : $SuperProto to SubProto - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %8 : $SubProto - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %{{[0-9]+}} + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %{{[0-9]+}}, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %9 = unconditional_checked_cast %2 : $SuperProto & Concrete to ProtoRefinesClass - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %9 : $ProtoRefinesClass - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %{{[0-9]+}} + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %{{[0-9]+}}, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %10 = unconditional_checked_cast %2 : $SuperProto & Concrete to SubProto - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %10 : $SubProto - // CHECK: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass7DerivedCMa"(i{{[0-9]+}} 0) + // CHECK: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass7DerivedCMa"(i{{[0-9]+}} 0) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 - // CHECK-NEXT: [[METADATA_PTR:%.*]] = bitcast %swift.type* [[METADATA]] to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call i8* @swift_dynamicCastClassUnconditional(i8* [[OBJECT]], i8* [[METADATA_PTR]], {{.*}}) - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[RESULT]] to %T24protocol_with_superclass7DerivedC* + // CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_dynamicCastClassUnconditional(ptr %{{[0-9]+}}, ptr [[METADATA]], {{.*}}) %11 = unconditional_checked_cast %3 : $ProtoRefinesClass to Derived - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass7DerivedC*)*)(%T24protocol_with_superclass7DerivedC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[RESULT]]) strong_release %11 : $Derived - // CHECK: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass10SubDerivedCMa"(i{{[0-9]+}} 0) + // CHECK: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass10SubDerivedCMa"(i{{[0-9]+}} 0) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 - // CHECK-NEXT: [[METADATA_PTR:%.*]] = bitcast %swift.type* [[METADATA]] to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call i8* @swift_dynamicCastClassUnconditional(i8* [[OBJECT]], i8* [[METADATA_PTR]], {{.*}}) - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[RESULT]] to %T24protocol_with_superclass10SubDerivedC* + // CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_dynamicCastClassUnconditional(ptr %{{[0-9]+}}, ptr [[METADATA]], {{.*}}) %12 = unconditional_checked_cast %3 : $ProtoRefinesClass to SubDerived - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass10SubDerivedC*)*)(%T24protocol_with_superclass10SubDerivedC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[RESULT]]) strong_release %12 : $SubDerived - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %{{[0-9]+}} + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %{{[0-9]+}}, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %13 = unconditional_checked_cast %3 : $ProtoRefinesClass to OtherProto & Concrete - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %13 : $OtherProto & Concrete - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* + // CHECK: [[ISA:%.*]] = load ptr, ptr %{{[0-9]+}} // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass11SubConcreteCMa"(i{{[0-9]+}} 0) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_superclass_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], %swift.type* [[METADATA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass11SubConcreteC* + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_superclass_unconditional(ptr %{{[0-9]+}}, ptr [[ISA]], ptr [[METADATA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %14 = unconditional_checked_cast %3 : $ProtoRefinesClass to OtherProto & SubConcrete - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass11SubConcreteC*)*)(%T24protocol_with_superclass11SubConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %14 : $OtherProto & SubConcrete - // CHECK: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass11MoreDerivedCMa"(i{{[0-9]+}} 0) + // CHECK: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass11MoreDerivedCMa"(i{{[0-9]+}} 0) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 - // CHECK-NEXT: [[METADATA_PTR:%.*]] = bitcast %swift.type* [[METADATA]] to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call i8* @swift_dynamicCastClassUnconditional(i8* [[OBJECT]], i8* [[METADATA_PTR]], {{.*}}) - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[RESULT]] to %T24protocol_with_superclass11MoreDerivedC* + // CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_dynamicCastClassUnconditional(ptr %{{[0-9]+}}, ptr [[METADATA]], {{.*}}) %15 = unconditional_checked_cast %4 : $SubProto to MoreDerived - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass11MoreDerivedC*)*)(%T24protocol_with_superclass11MoreDerivedC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[RESULT]]) strong_release %15 : $MoreDerived - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %{{[0-9]+}} + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %{{[0-9]+}}, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %16 = unconditional_checked_cast %4 : $SubProto to OtherProto & Concrete - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %16 : $OtherProto & Concrete %result = tuple () diff --git a/test/IRGen/protocol_with_superclass_where_clause.sil b/test/IRGen/protocol_with_superclass_where_clause.sil index 4807139e283fb..94961309fe4f7 100644 --- a/test/IRGen/protocol_with_superclass_where_clause.sil +++ b/test/IRGen/protocol_with_superclass_where_clause.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir -module-name protocol_with_superclass | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-runtime -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -primary-file %s -emit-ir -module-name protocol_with_superclass +// RUN: %target-swift-frontend -primary-file %s -emit-ir -module-name protocol_with_superclass | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-runtime -DINT=i%target-ptrsize sil_stage canonical @@ -26,147 +25,111 @@ class SubDerived : Derived {} class MoreDerived : Concrete, SubProto {} -// CHECK-objc-LABEL: define hidden swiftcc void @checkExistentialDowncast(%T24protocol_with_superclass8ConcreteC* %0, {{.*}} { -// CHECK-native-LABEL: define hidden swiftcc void @checkExistentialDowncast(%T24protocol_with_superclass8ConcreteC* %0, %swift.refcounted* %1, i8** %2, %T24protocol_with_superclass8ConcreteC* %3, i8** %4, %T24protocol_with_superclass8ConcreteC* %5, i8** %6, %T24protocol_with_superclass8ConcreteC* %7, i8** %8) {{.*}} { +// CHECK-objc-LABEL: define hidden swiftcc void @checkExistentialDowncast(ptr %0, {{.*}} { +// CHECK-native-LABEL: define hidden swiftcc void @checkExistentialDowncast(ptr %0, ptr %1, ptr %2, ptr %3, ptr %4, ptr %5, ptr %6, ptr %7, ptr %8) {{.*}} { sil hidden @checkExistentialDowncast : $@convention(thin) (@owned Concrete, @owned SuperProto, @owned SuperProto & Concrete, @owned ProtoRefinesClass, @owned SubProto) -> () { bb0(%0 : $Concrete, %1 : $SuperProto, %2 : $SuperProto & Concrete, %3 : $ProtoRefinesClass, %4 : $SubProto): - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %0 to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %0 to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %0 + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %0, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %5 = unconditional_checked_cast %0 : $Concrete to ProtoRefinesClass - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %5 : $ProtoRefinesClass - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %0 to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %0 to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %0 + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %0, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %6 = unconditional_checked_cast %0 : $Concrete to SubProto - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %6 : $SubProto - // CHECK-objc: [[ISA:%.*]] = call %swift.type* @swift_getObjectType(%objc_object* %{{[0-9]+}}) - // CHECK-objc-NEXT: [[OBJECT:%.*]] = bitcast %objc_object* %{{[0-9]+}} to i8* - // CHECK-native: [[ISA_ADDR:%.*]] = bitcast %swift.refcounted* %1 - // CHECK-native-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-native-NEXT: [[OBJECT:%.*]] = bitcast %swift.refcounted* %1 to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK-objc: [[ISA:%.*]] = call ptr @swift_getObjectType(ptr %{{[0-9]+}}) + // CHECK-native: [[ISA_ADDR:%.*]] = bitcast ptr %1 + // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr [[ISA_ADDR]] + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %1, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %7 = unconditional_checked_cast %1 : $SuperProto to ProtoRefinesClass - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %7 : $ProtoRefinesClass - // CHECK-objc: [[ISA:%.*]] = call %swift.type* @swift_getObjectType(%objc_object* %{{[0-9]+}}) - // CHECK-objc-NEXT: [[OBJECT:%.*]] = bitcast %objc_object* %{{[0-9]+}} to i8* - // CHECK-native: [[ISA_ADDR:%.*]] = bitcast %swift.refcounted* %1 - // CHECK-native-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-native-NEXT: [[OBJECT:%.*]] = bitcast %swift.refcounted* %1 to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK-objc: [[ISA:%.*]] = call ptr @swift_getObjectType(ptr %{{[0-9]+}}) + // CHECK-native: [[ISA_ADDR:%.*]] = bitcast ptr %1 + // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr [[ISA_ADDR]] + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %1, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %8 = unconditional_checked_cast %1 : $SuperProto to SubProto - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %8 : $SubProto - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %{{[0-9]+}} + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %{{[0-9]+}}, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %9 = unconditional_checked_cast %2 : $SuperProto & Concrete to ProtoRefinesClass - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %9 : $ProtoRefinesClass - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %{{[0-9]+}} + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %{{[0-9]+}}, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %10 = unconditional_checked_cast %2 : $SuperProto & Concrete to SubProto - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %10 : $SubProto - // CHECK: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass7DerivedCMa"(i{{[0-9]+}} 0) + // CHECK: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass7DerivedCMa"(i{{[0-9]+}} 0) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 - // CHECK-NEXT: [[METADATA_PTR:%.*]] = bitcast %swift.type* [[METADATA]] to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call i8* @swift_dynamicCastClassUnconditional(i8* [[OBJECT]], i8* [[METADATA_PTR]], {{.*}}) - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[RESULT]] to %T24protocol_with_superclass7DerivedC* + // CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_dynamicCastClassUnconditional(ptr %{{[0-9]+}}, ptr [[METADATA]], {{.*}}) %11 = unconditional_checked_cast %3 : $ProtoRefinesClass to Derived - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass7DerivedC*)*)(%T24protocol_with_superclass7DerivedC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[RESULT]]) strong_release %11 : $Derived - // CHECK: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass10SubDerivedCMa"(i{{[0-9]+}} 0) + // CHECK: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass10SubDerivedCMa"(i{{[0-9]+}} 0) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 - // CHECK-NEXT: [[METADATA_PTR:%.*]] = bitcast %swift.type* [[METADATA]] to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call i8* @swift_dynamicCastClassUnconditional(i8* [[OBJECT]], i8* [[METADATA_PTR]], {{.*}}) - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[RESULT]] to %T24protocol_with_superclass10SubDerivedC* + // CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_dynamicCastClassUnconditional(ptr %{{[0-9]+}}, ptr [[METADATA]], {{.*}}) %12 = unconditional_checked_cast %3 : $ProtoRefinesClass to SubDerived - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass10SubDerivedC*)*)(%T24protocol_with_superclass10SubDerivedC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[RESULT]]) strong_release %12 : $SubDerived - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %{{[0-9]+}} + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %{{[0-9]+}}, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %13 = unconditional_checked_cast %3 : $ProtoRefinesClass to OtherProto & Concrete - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %13 : $OtherProto & Concrete - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* + // CHECK: [[ISA:%.*]] = load ptr, ptr %{{[0-9]+}} // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass11SubConcreteCMa"(i{{[0-9]+}} 0) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_superclass_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], %swift.type* [[METADATA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass11SubConcreteC* + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_superclass_unconditional(ptr %{{[0-9]+}}, ptr [[ISA]], ptr [[METADATA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %14 = unconditional_checked_cast %3 : $ProtoRefinesClass to OtherProto & SubConcrete - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass11SubConcreteC*)*)(%T24protocol_with_superclass11SubConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %14 : $OtherProto & SubConcrete - // CHECK: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass11MoreDerivedCMa"(i{{[0-9]+}} 0) + // CHECK: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s24protocol_with_superclass11MoreDerivedCMa"(i{{[0-9]+}} 0) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 - // CHECK-NEXT: [[METADATA_PTR:%.*]] = bitcast %swift.type* [[METADATA]] to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call i8* @swift_dynamicCastClassUnconditional(i8* [[OBJECT]], i8* [[METADATA_PTR]], {{.*}}) - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[RESULT]] to %T24protocol_with_superclass11MoreDerivedC* + // CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_dynamicCastClassUnconditional(ptr %{{[0-9]+}}, ptr [[METADATA]], {{.*}}) %15 = unconditional_checked_cast %4 : $SubProto to MoreDerived - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass11MoreDerivedC*)*)(%T24protocol_with_superclass11MoreDerivedC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[RESULT]]) strong_release %15 : $MoreDerived - // CHECK: [[ISA_ADDR:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to %swift.type** - // CHECK-NEXT: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] - // CHECK-NEXT: [[OBJECT:%.*]] = bitcast %T24protocol_with_superclass8ConcreteC* %{{[0-9]+}} to i8* - // CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[OBJECT]], %swift.type* [[ISA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" - // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 - // CHECK-NEXT: [[REFERENCE:%.*]] = bitcast i8* [[FIRST]] to %T24protocol_with_superclass8ConcreteC* + // CHECK: [[ISA:%.*]] = load ptr, ptr %{{[0-9]+}} + // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %{{[0-9]+}}, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass10OtherProtoMp" + // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %16 = unconditional_checked_cast %4 : $SubProto to OtherProto & Concrete - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T24protocol_with_superclass8ConcreteC*)*)(%T24protocol_with_superclass8ConcreteC* [[REFERENCE]]) + // CHECK: call void @swift_release(ptr [[FIRST]]) strong_release %16 : $OtherProto & Concrete %result = tuple () diff --git a/test/IRGen/related_entity.sil b/test/IRGen/related_entity.sil index 2a84325118fc9..78c069044e7ce 100644 --- a/test/IRGen/related_entity.sil +++ b/test/IRGen/related_entity.sil @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %{python} %utils/chex.py < %s > %t/checkfile -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers -enable-objc-interop -emit-ir -o - -primary-file %s -import-objc-header %S/Inputs/error_domains.h > %t/out.ir -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-objc-interop -emit-ir -o - -primary-file %s -import-objc-header %S/Inputs/error_domains.h +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-objc-interop -emit-ir -o - -primary-file %s -import-objc-header %S/Inputs/error_domains.h > %t/out.ir // RUN: %FileCheck --input-file=%t/out.ir %t/checkfile --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize sil_stage canonical @@ -18,32 +17,32 @@ bb0: // CHECK: @"$sSo18NestedTypedefErroraMn" = linkonce_odr hidden constant // CHECK-SAME: // CHECK-SAME: @"$sSoMXM" -// CHECK-SAME: [29 x i8]* @.str.28.Code_NNestedTypedefError_St_.nul12.nul32.nul35 +// CHECK-SAME: ptr @.str.28.Code_NNestedTypedefError_St_.nul12.nul32.nul35 // CHECK: @"$sSC14NestedTagErrorLeVMn" = linkonce_odr hidden constant // CHECK-SAME: // CHECK-SAME: @"$sSCMXM" -// CHECK-SAME: [29 x i8]* @.str.28.TagError_NNestedTagError_Re_.nul16.nul32.nul35 +// CHECK-SAME: ptr @.str.28.TagError_NNestedTagError_Re_.nul16.nul32.nul35 // CHECK: @"$sSo13TypedefError2aMn" = linkonce_odr hidden constant // CHECK-SAME: // CHECK-SAME: @"$sSoMXM" -// CHECK-SAME: [24 x i8]* @.str.23.Code_NTypedefError2_St_.nul12.nul27.nul30 +// CHECK-SAME: ptr @.str.23.Code_NTypedefError2_St_.nul12.nul27.nul30 // CHECK: @"$sSC13TypedefError1LEVMn" = linkonce_odr hidden constant // CHECK-SAME: // CHECK-SAME: @"$sSCMXM" -// CHECK-SAME: [18 x i8]* @.str.17.TypedefError1_RE_.nul21.nul24 +// CHECK-SAME: ptr @.str.17.TypedefError1_RE_.nul21.nul24 // CHECK: @"$sSo9TagError2VMn" = linkonce_odr hidden constant // CHECK-SAME: // CHECK-SAME: @"$sSoMXM" -// CHECK-SAME: [17 x i8]* @.str.16.Code_NTagError2_.nul12.nul23 +// CHECK-SAME: ptr @.str.16.Code_NTagError2_.nul12.nul23 // CHECK: @"$sSC9TagError1LeVMn" = linkonce_odr hidden constant // CHECK-SAME: // CHECK-SAME: @"$sSCMXM" -// CHECK-SAME: [14 x i8]* @.str.13.TagError1_Re_.nul17.nul20 +// CHECK-SAME: ptr @.str.13.TagError1_Re_.nul17.nul20 %0 = metatype $@thick TagError1.Type apply %take(%0) : $@convention(thin) (@thick T.Type) -> () diff --git a/test/IRGen/run_variadic_generics.sil b/test/IRGen/run_variadic_generics.sil index f01f38e555af3..c271348a4d5b7 100644 --- a/test/IRGen/run_variadic_generics.sil +++ b/test/IRGen/run_variadic_generics.sil @@ -1,10 +1,8 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift-dylib(%t/%target-library-name(PrintShims)) -parse-stdlib %S/../Inputs/print-shims-stdlib.swift -module-name PrintShims -emit-module -emit-module-path %t/PrintShims.swiftmodule // RUN: %target-codesign %t/%target-library-name(PrintShims) -// RUN: %target-build-swift %use_no_opaque_pointers -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim -Onone | %FileCheck %s --check-prefixes=CHECK-LL,CHECK-LL-UNOPT -// RUN: %target-build-swift %use_no_opaque_pointers -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim -O | %FileCheck %s --check-prefixes=CHECK-LL,CHECK-LL-OPT -// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim -Onone -// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim -O +// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim -Onone | %FileCheck %s --check-prefixes=CHECK-LL,CHECK-LL-UNOPT +// RUN: %target-build-swift -g -parse-sil %s -emit-ir -I %t -L %t -lPrintShim -O | %FileCheck %s --check-prefixes=CHECK-LL,CHECK-LL-OPT // RUN: %target-build-swift -g -parse-sil %s -module-name main -o %t/main -I %t -L %t -lPrintShims %target-rpath(%t) // RUN: %target-codesign %t/main // RUN: %target-run %t/main %t/%target-library-name(PrintShims) | %FileCheck %s @@ -570,14 +568,14 @@ entry(%intIndex : $Builtin.Word): } // Verify that we just gep into a parameter pack when that's all that the pack consists of. -// CHECK-LL: define {{.*}}void @direct_access_from_parameter(i{{(32|64)}} [[INDEX:%[^,]+]], i{{(32|64)}} {{%[^,]+}}, %swift.type** [[PACK:%[^,]+]]) -// CHECK-LL-UNOPT: [[PACK_ADDR_FOR_DI:%.*]] = ptrtoint %swift.type** [[PACK]] to i{{(32|64)}} -// CHECK-LL: [[PACK_ADDR:%.*]] = ptrtoint %swift.type** [[PACK]] to i{{(32|64)}} +// CHECK-LL: define {{.*}}void @direct_access_from_parameter(i{{(32|64)}} [[INDEX:%[^,]+]], i{{(32|64)}} {{%[^,]+}}, ptr [[PACK:%[^,]+]]) +// CHECK-LL-UNOPT: [[PACK_ADDR_FOR_DI:%.*]] = ptrtoint ptr [[PACK]] to i{{(32|64)}} +// CHECK-LL: [[PACK_ADDR:%.*]] = ptrtoint ptr [[PACK]] to i{{(32|64)}} // CHECK-LL: [[PACK_ADDR2:%.*]] = and i{{(32|64)}} [[PACK_ADDR]], -2 -// CHECK-LL: [[PACK:%.*]] = inttoptr i{{(32|64)}} [[PACK_ADDR2]] to %swift.type** -// CHECK-LL: [[ELEMENT_ADDRESS:%[^,]+]] = getelementptr inbounds %swift.type*, %swift.type** [[PACK]], i{{(32|64)}} [[INDEX]] -// CHECK-LL: [[ELEMENT:%[^,]+]] = load %swift.type*, %swift.type** [[ELEMENT_ADDRESS]] -// CHECK-LL: call swiftcc void @printGenericType(%swift.type* [[ELEMENT]], %swift.type* [[ELEMENT]]) +// CHECK-LL: [[PACK:%.*]] = inttoptr i{{(32|64)}} [[PACK_ADDR2]] to ptr +// CHECK-LL: [[ELEMENT_ADDRESS:%[^,]+]] = getelementptr inbounds ptr, ptr [[PACK]], i{{(32|64)}} [[INDEX]] +// CHECK-LL: [[ELEMENT:%[^,]+]] = load ptr, ptr [[ELEMENT_ADDRESS]] +// CHECK-LL: call swiftcc void @printGenericType(ptr [[ELEMENT]], ptr [[ELEMENT]]) sil @direct_access_from_parameter : $ (Builtin.Word) -> () { entry(%intIndex : $Builtin.Word): %innerIndex = dynamic_pack_index %intIndex of $Pack{repeat each T_1} @@ -593,20 +591,20 @@ entry(%intIndex : $Builtin.Word): // CHECK-LL-LABEL: define {{.*}}@direct_access_from_parameter_with_conformance( // CHECK-LL-SAME: i{{(32|64)}} [[INDEX:%[^,]+]], // CHECK-LL-SAME: i{{(32|64)}} {{%[^,]+}}, -// CHECK-LL-SAME: %swift.type** [[METADATA_PACK:%[^,]+]], -// CHECK-LL-SAME: i8*** [[WTABLE_PACK:%[^,]+]]) -// CHECK-LL-UNOPT: [[PACK_ADDR_FOR_DI:%.*]] = ptrtoint %swift.type** [[METADATA_PACK]] to i{{(32|64)}} -// CHECK-LL: [[PACK_ADDR:%.*]] = ptrtoint %swift.type** [[METADATA_PACK]] to i{{(32|64)}} +// CHECK-LL-SAME: ptr [[METADATA_PACK:%[^,]+]], +// CHECK-LL-SAME: ptr [[WTABLE_PACK:%[^,]+]]) +// CHECK-LL-UNOPT: [[PACK_ADDR_FOR_DI:%.*]] = ptrtoint ptr [[METADATA_PACK]] to i{{(32|64)}} +// CHECK-LL: [[PACK_ADDR:%.*]] = ptrtoint ptr [[METADATA_PACK]] to i{{(32|64)}} // CHECK-LL: [[PACK_ADDR2:%.*]] = and i{{(32|64)}} [[PACK_ADDR]], -2 -// CHECK-LL: [[METADATA_PACK:%.*]] = inttoptr i{{(32|64)}} [[PACK_ADDR2]] to %swift.type** -// CHECK-LL: [[METADATA_ADDRESS:%[^,]+]] = getelementptr inbounds %swift.type*, %swift.type** [[METADATA_PACK]], i{{(32|64)}} [[INDEX]] -// CHECK-LL: [[METADATA:%[^,]+]] = load %swift.type*, %swift.type** [[METADATA_ADDRESS]] -// CHECK-LL: [[PACK_ADDR:%.*]] = ptrtoint i8*** [[WTABLE_PACK]] to i{{(32|64)}} +// CHECK-LL: [[METADATA_PACK:%.*]] = inttoptr i{{(32|64)}} [[PACK_ADDR2]] to ptr +// CHECK-LL: [[METADATA_ADDRESS:%[^,]+]] = getelementptr inbounds ptr, ptr [[METADATA_PACK]], i{{(32|64)}} [[INDEX]] +// CHECK-LL: [[METADATA:%[^,]+]] = load ptr, ptr [[METADATA_ADDRESS]] +// CHECK-LL: [[PACK_ADDR:%.*]] = ptrtoint ptr [[WTABLE_PACK]] to i{{(32|64)}} // CHECK-LL: [[PACK_ADDR2:%.*]] = and i{{(32|64)}} [[PACK_ADDR]], -2 -// CHECK-LL: [[WTABLE_PACK:%.*]] = inttoptr i{{(32|64)}} [[PACK_ADDR2]] to i8*** -// CHECK-LL: [[WTABLE_ADDRESS:%[^,]+]] = getelementptr inbounds i8**, i8*** [[WTABLE_PACK]], i{{(32|64)}} [[INDEX]] -// CHECK-LL: [[WTABLE:%[^,]+]] = load i8**, i8*** [[WTABLE_ADDRESS]], align -// CHECK-LL: call swiftcc void @printGenericType(%swift.type* [[METADATA]], %swift.type* [[METADATA]]) +// CHECK-LL: [[WTABLE_PACK:%.*]] = inttoptr i{{(32|64)}} [[PACK_ADDR2]] to ptr +// CHECK-LL: [[WTABLE_ADDRESS:%[^,]+]] = getelementptr inbounds ptr, ptr [[WTABLE_PACK]], i{{(32|64)}} [[INDEX]] +// CHECK-LL: [[WTABLE:%[^,]+]] = load ptr, ptr [[WTABLE_ADDRESS]], align +// CHECK-LL: call swiftcc void @printGenericType(ptr [[METADATA]], ptr [[METADATA]]) sil @direct_access_from_parameter_with_conformance : $ (Builtin.Word) -> () { entry(%intIndex : $Builtin.Word): %innerIndex = dynamic_pack_index %intIndex of $Pack{repeat each T_1} diff --git a/test/IRGen/runtime-records-are-used.swift b/test/IRGen/runtime-records-are-used.swift index e5df1e0d6ebe2..a47199eaba796 100644 --- a/test/IRGen/runtime-records-are-used.swift +++ b/test/IRGen/runtime-records-are-used.swift @@ -1,5 +1,4 @@ -// RUN: %swift %use_no_opaque_pointers -target arm64-apple-macos11.0 -parse-stdlib %s -module-name Swift -emit-ir -o - | %FileCheck %s -// RUN: %swift -target arm64-apple-macos11.0 -parse-stdlib %s -module-name Swift -emit-ir -o - +// RUN: %swift -target arm64-apple-macos11.0 -parse-stdlib %s -module-name Swift -emit-ir -o - | %FileCheck %s public protocol Simple {} @@ -17,7 +16,7 @@ public struct Other : Simple {} // CHECK-SAME: @"$ss5OtherVMn" // CHECK-SAME: , section "__TEXT, __swift5_types, regular" -// CHECK: @llvm.used = appending global [{{.*}} x i8*] [ +// CHECK: @llvm.used = appending global [{{.*}} x ptr] [ // CHECK-SAME: @"$ss6SimpleHr" // CHECK-SAME: @"$ss5OtherVs6SimplesHc" // CHECK-SAME: @"$ss5OtherVHn" diff --git a/test/IRGen/runtime_attributes.swift b/test/IRGen/runtime_attributes.swift index 38da098162d6f..6e44b5c2b941f 100644 --- a/test/IRGen/runtime_attributes.swift +++ b/test/IRGen/runtime_attributes.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module-path=%t/RAD.swiftmodule -module-name=RAD -enable-experimental-feature RuntimeDiscoverableAttrs %S/Inputs/runtime_attrs.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir -I %t -swift-version 5 -enable-experimental-feature RuntimeDiscoverableAttrs | %IRGenFileCheck %s -// RUN: %target-swift-frontend -primary-file %s -emit-ir -I %t -swift-version 5 -enable-experimental-feature RuntimeDiscoverableAttrs +// RUN: %target-swift-frontend -primary-file %s -emit-ir -I %t -swift-version 5 -enable-experimental-feature RuntimeDiscoverableAttrs | %IRGenFileCheck %s // REQUIRES: asserts // REQUIRES: OS=macosx @@ -91,7 +90,7 @@ // CHECK: @"$s3RAD6IgnoreVHa" = internal constant // CHECK-SAME: i32 0 -// CHECK-SAME: %swift.type_descriptor** @"got.$s3RAD6IgnoreVMn" +// CHECK-SAME: ptr @"got.$s3RAD6IgnoreVMn" // CHECK-SAME: i32 5 // CHECK-SAME: @"$s3RAD6IgnoreV18runtime_attributes1AV5InnerC11extComputedSivpfaHF" // CHECK-SAME: @"$s3RAD6IgnoreV18runtime_attributes16WithExternalAttrVfaHF" @@ -102,7 +101,7 @@ // CHECK: @"$s3RAD13TestAmbiguityVHa" = internal constant // CHECK-SAME: i32 0 -// CHECK-SAME: %swift.type_descriptor** @"got.$s3RAD13TestAmbiguityVMn" +// CHECK-SAME: ptr @"got.$s3RAD13TestAmbiguityVMn" // CHECK-SAME: i32 6 // CHECK-SAME: @"$s3RAD13TestAmbiguityV18runtime_attributes4testyySiFfaHF" // CHECK-SAME: @"$s3RAD13TestAmbiguityV18runtime_attributes4testyySSFfaHF" @@ -142,7 +141,7 @@ // CHECK: @"$s3RAD8EnumFlagOHa" = internal constant // CHECK-SAME: i32 0 -// CHECK-SAME: %swift.type_descriptor** @"got.$s3RAD8EnumFlagOMn" +// CHECK-SAME: ptr @"got.$s3RAD8EnumFlagOMn" // CHECK-SAME: i32 5 // CHECK-SAME: @"$s3RAD8EnumFlagO18runtime_attributes06globalB4TestSi_SaySSGtSgyFfaHF" // CHECK-SAME: @"$s3RAD8EnumFlagO18runtime_attributes0B8TypeTestV1xSivpfaHF" @@ -167,89 +166,89 @@ struct OnlyPropsTest { // - Check that all of the generator functions have been emitted -// CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA8globalFnyyFfa"(%T18runtime_attributes4FlagVyytGSg* noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA8globalFnyyFfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) @Flag("global") func globalFn() {} @Flag struct A { - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV2v1SSvpfa"(%T18runtime_attributes4FlagVySSGSg* noalias nocapture sret(%T18runtime_attributes4FlagVySSGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV2v1SSvpfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVySSGSg) %0) @Flag("v1") var v1: String = "" - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV4compSivpfa"(%T18runtime_attributes4FlagVySiGSg* noalias nocapture sret(%T18runtime_attributes4FlagVySiGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV4compSivpfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVySiGSg) %0) @Flag var comp: Int { get { 42 } } - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5test1SiyFZfa"(%T18runtime_attributes4FlagVySiGSg* noalias nocapture sret(%T18runtime_attributes4FlagVySiGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5test1SiyFZfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVySiGSg) %0) @Flag static func test1() -> Int { 42 } - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5test2yyFfa"(%T18runtime_attributes4FlagVyytGSg* noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5test2yyFfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) @Flag("test2") func test2() {} // Ok - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV1xSaySiGSgvpfa"(%T18runtime_attributes4FlagVySaySiGSgGSg* noalias nocapture sret(%T18runtime_attributes4FlagVySaySiGSgGSg) %0) - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes13OnlyPropsTestVAA1AV1xSaySiGSgvpfa"(%T18runtime_attributes13OnlyPropsTestVyAA1AVSaySiGSgGSg* noalias nocapture sret(%T18runtime_attributes13OnlyPropsTestVyAA1AVSaySiGSgGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV1xSaySiGSgvpfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVySaySiGSgGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes13OnlyPropsTestVAA1AV1xSaySiGSgvpfa"(ptr noalias nocapture sret(%T18runtime_attributes13OnlyPropsTestVyAA1AVSaySiGSgGSg) %0) @OnlyPropsTest @Flag("x") var x: [Int]? = [] // Ok @Flag("Inner type") class Inner { - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC4testSaySiGSgvpfa"(%T18runtime_attributes4FlagVySaySiGSgGSg* noalias nocapture sret(%T18runtime_attributes4FlagVySaySiGSgGSg) %0) - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes13OnlyPropsTestVAA1AV5InnerC4testSaySiGSgvpfa"(%T18runtime_attributes13OnlyPropsTestVyAA1AV5InnerCSaySiGSgGSg* noalias nocapture sret(%T18runtime_attributes13OnlyPropsTestVyAA1AV5InnerCSaySiGSgGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC4testSaySiGSgvpfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVySaySiGSgGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes13OnlyPropsTestVAA1AV5InnerC4testSaySiGSgvpfa"(ptr noalias nocapture sret(%T18runtime_attributes13OnlyPropsTestVyAA1AV5InnerCSaySiGSgGSg) %0) @OnlyPropsTest @Flag("test property") var test: [Int]? = nil // Ok - } // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerCfa"(%T18runtime_attributes4FlagVyAA1AV5InnerCGSg* noalias nocapture sret(%T18runtime_attributes4FlagVyAA1AV5InnerCGSg) %0) + } // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerCfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVyAA1AV5InnerCGSg) %0) } // The generator for `struct A` is emitted last. -// CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AVfa"(%T18runtime_attributes4FlagVyAA1AVGSg* noalias nocapture sret(%T18runtime_attributes4FlagVyAA1AVGSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AVfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVyAA1AVGSg) %0) extension A.Inner { @Flag("B type") struct B { - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC1BV03extD10StaticTestyyFZfa"(%T18runtime_attributes4FlagVyytGSg* noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC1BV03extD10StaticTestyyFZfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) @Flag static func extInnerStaticTest() {} - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC1BV03extD4TestyyFZfa"(%T18runtime_attributes4FlagVyytGSg* noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC1BV03extD4TestyyFZfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) @Flag static func extInnerTest() {} - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes13OnlyPropsTestVAA1AV5InnerC1BV6storedSivpfa"(%T18runtime_attributes13OnlyPropsTestVyAA1AV5InnerC1BVSiGSg* noalias nocapture sret(%T18runtime_attributes13OnlyPropsTestVyAA1AV5InnerC1BVSiGSg) %0) - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC1BV6storedSivpfa"(%T18runtime_attributes4FlagVySiGSg* noalias nocapture sret(%T18runtime_attributes4FlagVySiGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes13OnlyPropsTestVAA1AV5InnerC1BV6storedSivpfa"(ptr noalias nocapture sret(%T18runtime_attributes13OnlyPropsTestVyAA1AV5InnerC1BVSiGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC1BV6storedSivpfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVySiGSg) %0) @Flag("stored prop") @OnlyPropsTest let stored: Int = 42 - } // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC1BVfa"(%T18runtime_attributes4FlagVyAA1AV5InnerC1BVGSg* noalias nocapture sret(%T18runtime_attributes4FlagVyAA1AV5InnerC1BVGSg) %0 + } // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC1BVfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVyAA1AV5InnerC1BVGSg) %0 - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC13extStaticTestyyFZfa"(%T18runtime_attributes4FlagVyytGSg* noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC13extStaticTestyyFZfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) @Flag static func extStaticTest() {} - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC7extTestyyFZfa"(%T18runtime_attributes4FlagVyytGSg* noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC7extTestyyFZfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVyytGSg) %0) @Flag static func extTest() {} - // CHECK-LABEL: define hidden swiftcc void @"$s3RAD6IgnoreV18runtime_attributes1AV5InnerC11extComputedSivpfa"(%T3RAD6IgnoreVys7KeyPathCy18runtime_attributes1AV5InnerCSiGGSg* noalias nocapture sret(%T3RAD6IgnoreVys7KeyPathCy18runtime_attributes1AV5InnerCSiGGSg) %0) - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC11extComputedSivpfa"(%T18runtime_attributes4FlagVySiGSg* noalias nocapture sret(%T18runtime_attributes4FlagVySiGSg) %0) - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes13OnlyPropsTestVAA1AV5InnerC11extComputedSivpfa"(%T18runtime_attributes13OnlyPropsTestVyAA1AV5InnerCSiGSg* noalias nocapture sret(%T18runtime_attributes13OnlyPropsTestVyAA1AV5InnerCSiGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s3RAD6IgnoreV18runtime_attributes1AV5InnerC11extComputedSivpfa"(ptr noalias nocapture sret(%T3RAD6IgnoreVys7KeyPathCy18runtime_attributes1AV5InnerCSiGGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes4FlagVAA1AV5InnerC11extComputedSivpfa"(ptr noalias nocapture sret(%T18runtime_attributes4FlagVySiGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes13OnlyPropsTestVAA1AV5InnerC11extComputedSivpfa"(ptr noalias nocapture sret(%T18runtime_attributes13OnlyPropsTestVyAA1AV5InnerCSiGSg) %0) @OnlyPropsTest @Flag @Ignore var extComputed: Int { get { 42 } } } -// CHECK-LABEL: define hidden swiftcc void @"$s3RAD6IgnoreV18runtime_attributes16WithExternalAttrVfa"(%T3RAD6IgnoreVy18runtime_attributes16WithExternalAttrVmGSg* noalias nocapture sret(%T3RAD6IgnoreVy18runtime_attributes16WithExternalAttrVmGSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s3RAD6IgnoreV18runtime_attributes16WithExternalAttrVfa"(ptr noalias nocapture sret(%T3RAD6IgnoreVy18runtime_attributes16WithExternalAttrVmGSg) %0) @Ignore struct WithExternalAttr {} -// CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes4testyySiFfa"(%T3RAD13TestAmbiguityVSg* noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes4testyySiFfa"(ptr noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) @TestAmbiguity public func test(_: Int) {} -// CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes4testyySSFfa"(%T3RAD13TestAmbiguityVSg* noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes4testyySSFfa"(ptr noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) @TestAmbiguity public func test(_: String) {} public struct TestNoAmbiguity { - // CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes0b2NoC0V10testStaticSiyFZfa"(%T3RAD13TestAmbiguityVSg* noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes0b2NoC0V10testStaticSiyFZfa"(ptr noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) @TestAmbiguity static func testStatic() -> Int { 42 } - // CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes0b2NoC0V10testStaticyyFZfa"(%T3RAD13TestAmbiguityVSg* noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes0b2NoC0V10testStaticyyFZfa"(ptr noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) @TestAmbiguity static func testStatic() {} - // CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes0b2NoC0V8testInstyySi_SStFfa"(%T3RAD13TestAmbiguityVSg* noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes0b2NoC0V8testInstyySi_SStFfa"(ptr noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) @TestAmbiguity func testInst(_: Int, _: String) {} - // CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes0b2NoC0V8testInstyySi_SitFfa"(%T3RAD13TestAmbiguityVSg* noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s3RAD13TestAmbiguityV18runtime_attributes0b2NoC0V8testInstyySi_SitFfa"(ptr noalias nocapture sret(%T3RAD13TestAmbiguityVSg) %0) @TestAmbiguity func testInst(_: Int, _: Int) {} } -// CHECK-LABEL: define hidden swiftcc void @"$s3RAD6IgnoreV18runtime_attributes14TestInference1Vfa"(%T3RAD6IgnoreVy18runtime_attributes14TestInference1VmGSg* noalias nocapture sret(%T3RAD6IgnoreVy18runtime_attributes14TestInference1VmGSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s3RAD6IgnoreV18runtime_attributes14TestInference1Vfa"(ptr noalias nocapture sret(%T3RAD6IgnoreVy18runtime_attributes14TestInference1VmGSg) %0) public struct TestInference1 : Ignored {} -// CHECK-LABEL: define hidden swiftcc void @"$s3RAD6IgnoreV18runtime_attributes14TestInference2Cfa"(%T3RAD6IgnoreVy18runtime_attributes14TestInference2CmGSg* noalias nocapture sret(%T3RAD6IgnoreVy18runtime_attributes14TestInference2CmGSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s3RAD6IgnoreV18runtime_attributes14TestInference2Cfa"(ptr noalias nocapture sret(%T3RAD6IgnoreVy18runtime_attributes14TestInference2CmGSg) %0) public class TestInference2 : Ignored {} -// CHECK-LABEL: define hidden swiftcc void @"$s3RAD6IgnoreV18runtime_attributes14TestInference3Ofa"(%T3RAD6IgnoreVy18runtime_attributes14TestInference3OmGSg* noalias nocapture sret(%T3RAD6IgnoreVy18runtime_attributes14TestInference3OmGSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s3RAD6IgnoreV18runtime_attributes14TestInference3Ofa"(ptr noalias nocapture sret(%T3RAD6IgnoreVy18runtime_attributes14TestInference3OmGSg) %0) public enum TestInference3 : Ignored {} @runtimeMetadata @@ -257,14 +256,14 @@ struct AvailabilityTests { init(attachedTo: Any) {} } -// CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes17AvailabilityTestsVAA08testWithC0yySiFfa"(%T18runtime_attributes17AvailabilityTestsVSg* noalias nocapture sret(%T18runtime_attributes17AvailabilityTestsVSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes17AvailabilityTestsVAA08testWithC0yySiFfa"(ptr noalias nocapture sret(%T18runtime_attributes17AvailabilityTestsVSg) %0) // CHECK: entry: // CHECK: {{.*}} = call swiftcc i1 @"$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF"(i64 42, i64 0, i64 0) @available(macOS, introduced: 42.0) @AvailabilityTests func testWithAvailability(_: Int) {} -// CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes17AvailabilityTestsVAA08TypeWithC0Cfa"(%T18runtime_attributes17AvailabilityTestsVSg* noalias nocapture sret(%T18runtime_attributes17AvailabilityTestsVSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes17AvailabilityTestsVAA08TypeWithC0Cfa"(ptr noalias nocapture sret(%T18runtime_attributes17AvailabilityTestsVSg) %0) // CHECK: entry: // CHECK: {{.*}} = call swiftcc i1 @"$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF"(i64 100, i64 0, i64 0) @available(macOS, introduced: 100.0) @@ -272,21 +271,21 @@ func testWithAvailability(_: Int) {} class TypeWithAvailability {} class MembersWithAvailability { - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes17AvailabilityTestsVAA011MembersWithC0C8staticFnyyFZfa"(%T18runtime_attributes17AvailabilityTestsVSg* noalias nocapture sret(%T18runtime_attributes17AvailabilityTestsVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes17AvailabilityTestsVAA011MembersWithC0C8staticFnyyFZfa"(ptr noalias nocapture sret(%T18runtime_attributes17AvailabilityTestsVSg) %0) // CHECK: entry: // CHECK: {{.*}} = call swiftcc i1 @"$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF"(i64 201, i64 0, i64 0) @AvailabilityTests @available(macOS, introduced: 201.0) static func staticFn() {} - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes17AvailabilityTestsVAA011MembersWithC0C6instFnyyFfa"(%T18runtime_attributes17AvailabilityTestsVSg* noalias nocapture sret(%T18runtime_attributes17AvailabilityTestsVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes17AvailabilityTestsVAA011MembersWithC0C6instFnyyFfa"(ptr noalias nocapture sret(%T18runtime_attributes17AvailabilityTestsVSg) %0) // CHECK: entry: // CHECK: {{.*}} = call swiftcc i1 @"$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF"(i64 202, i64 0, i64 0) @AvailabilityTests @available(macOS, introduced: 202.0) func instFn() {} - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes17AvailabilityTestsVAA011MembersWithC0C4propSivpfa"(%T18runtime_attributes17AvailabilityTestsVSg* noalias nocapture sret(%T18runtime_attributes17AvailabilityTestsVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes17AvailabilityTestsVAA011MembersWithC0C4propSivpfa"(ptr noalias nocapture sret(%T18runtime_attributes17AvailabilityTestsVSg) %0) // CHECK: entry: // CHECK: {{.*}} = call swiftcc i1 @"$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF"(i64 203, i64 0, i64 0) @AvailabilityTests @@ -300,7 +299,7 @@ struct FlagWithAvail { init(attachedTo: Any) {} } -// CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes13FlagWithAvailVAA20attrIsHigherThanFuncyyFfa"(%T18runtime_attributes13FlagWithAvailVSg* noalias nocapture sret(%T18runtime_attributes13FlagWithAvailVSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes13FlagWithAvailVAA20attrIsHigherThanFuncyyFfa"(ptr noalias nocapture sret(%T18runtime_attributes13FlagWithAvailVSg) %0) // CHECK: entry: // CHECK: {{.*}} = call swiftcc i1 @"$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF"(i64 110, i64 0, i64 0) @FlagWithAvail @@ -323,32 +322,32 @@ struct FlagForInnerMethods { struct OuterType { struct Inner { - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes19FlagForInnerMethodsVAA9OuterTypeV0E0V15innerInstFnTestyyFfa"(%T18runtime_attributes19FlagForInnerMethodsVyytGSg* noalias nocapture sret(%T18runtime_attributes19FlagForInnerMethodsVyytGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes19FlagForInnerMethodsVAA9OuterTypeV0E0V15innerInstFnTestyyFfa"(ptr noalias nocapture sret(%T18runtime_attributes19FlagForInnerMethodsVyytGSg) %0) @FlagForInnerMethods func innerInstFnTest() {} - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes19FlagForInnerMethodsVAA9OuterTypeV0E0V17innerStaticFnTestyyFZfa"(%T18runtime_attributes19FlagForInnerMethodsVyytGSg* noalias nocapture sret(%T18runtime_attributes19FlagForInnerMethodsVyytGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes19FlagForInnerMethodsVAA9OuterTypeV0E0V17innerStaticFnTestyyFZfa"(ptr noalias nocapture sret(%T18runtime_attributes19FlagForInnerMethodsVyytGSg) %0) @FlagForInnerMethods static func innerStaticFnTest() {} - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes19FlagForInnerMethodsVAA9OuterTypeV0E0V07mutableE6FnTest1x_ySS_SiztFfa"(%T18runtime_attributes19FlagForInnerMethodsVyytGSg* noalias nocapture sret(%T18runtime_attributes19FlagForInnerMethodsVyytGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes19FlagForInnerMethodsVAA9OuterTypeV0E0V07mutableE6FnTest1x_ySS_SiztFfa"(ptr noalias nocapture sret(%T18runtime_attributes19FlagForInnerMethodsVyytGSg) %0) @FlagForInnerMethods mutating func mutableInnerFnTest(x: String, _ y: inout Int) {} } } extension OuterType { - // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes19FlagForInnerMethodsVAA9OuterTypeV15outerMutatingFnSiyFfa"(%T18runtime_attributes19FlagForInnerMethodsVySiGSg* noalias nocapture sret(%T18runtime_attributes19FlagForInnerMethodsVySiGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s18runtime_attributes19FlagForInnerMethodsVAA9OuterTypeV15outerMutatingFnSiyFfa"(ptr noalias nocapture sret(%T18runtime_attributes19FlagForInnerMethodsVySiGSg) %0) @FlagForInnerMethods mutating func outerMutatingFn() -> Int { 42 } } -// CHECK-LABEL: define hidden swiftcc void @"$s3RAD8EnumFlagO18runtime_attributes06globalB4TestSi_SaySSGtSgyFfa"(%T3RAD8EnumFlagOyytSi_SaySSGtSgGSg* noalias nocapture sret(%T3RAD8EnumFlagOyytSi_SaySSGtSgGSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s3RAD8EnumFlagO18runtime_attributes06globalB4TestSi_SaySSGtSgyFfa"(ptr noalias nocapture sret(%T3RAD8EnumFlagOyytSi_SaySSGtSgGSg) %0) @EnumFlag func globalEnumTest() -> (Int, [String])? { nil } @EnumFlag struct EnumTypeTest { - // CHECK-LABEL: define hidden swiftcc void @"$s3RAD8EnumFlagO18runtime_attributes0B8TypeTestV1xSivpfa"(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVSiGSg* noalias nocapture sret(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVSiGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s3RAD8EnumFlagO18runtime_attributes0B8TypeTestV1xSivpfa"(ptr noalias nocapture sret(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVSiGSg) %0) @EnumFlag var x: Int = 42 - // CHECK-LABEL: define hidden swiftcc void @"$s3RAD8EnumFlagO18runtime_attributes0B8TypeTestV8testInstyyFfa"(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVytGSg* noalias nocapture sret(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVytGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s3RAD8EnumFlagO18runtime_attributes0B8TypeTestV8testInstyyFfa"(ptr noalias nocapture sret(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVytGSg) %0) @EnumFlag func testInst() {} - // CHECK-LABEL: define hidden swiftcc void @"$s3RAD8EnumFlagO18runtime_attributes0B8TypeTestV10testStaticSiyFZfa"(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVmSiGSg* noalias nocapture sret(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVmSiGSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s3RAD8EnumFlagO18runtime_attributes0B8TypeTestV10testStaticSiyFZfa"(ptr noalias nocapture sret(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVmSiGSg) %0) @EnumFlag static func testStatic() -> Int { 42 } } -// CHECK-LABEL: define hidden swiftcc void @"$s3RAD8EnumFlagO18runtime_attributes0B8TypeTestVfa"(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVytGSg* noalias nocapture sret(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVytGSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s3RAD8EnumFlagO18runtime_attributes0B8TypeTestVfa"(ptr noalias nocapture sret(%T3RAD8EnumFlagOy18runtime_attributes0B8TypeTestVytGSg) %0) diff --git a/test/IRGen/runtime_attributes_on_actors.swift b/test/IRGen/runtime_attributes_on_actors.swift index fc267dfd59f69..4cde46ceacae6 100644 --- a/test/IRGen/runtime_attributes_on_actors.swift +++ b/test/IRGen/runtime_attributes_on_actors.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module-path=%t/RAD.swiftmodule -module-name=RAD -enable-experimental-feature RuntimeDiscoverableAttrs -disable-availability-checking %S/Inputs/runtime_attrs.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir -I %t -swift-version 5 -enable-experimental-feature RuntimeDiscoverableAttrs -disable-availability-checking | %IRGenFileCheck %s -// RUN: %target-swift-frontend -primary-file %s -emit-ir -I %t -swift-version 5 -enable-experimental-feature RuntimeDiscoverableAttrs -disable-availability-checking +// RUN: %target-swift-frontend -primary-file %s -emit-ir -I %t -swift-version 5 -enable-experimental-feature RuntimeDiscoverableAttrs -disable-availability-checking | %IRGenFileCheck %s // REQUIRES: asserts // REQUIRES: OS=macosx @@ -15,11 +14,11 @@ // CHECK: @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVHa" = internal constant // CHECK-SAME: i32 5 -// CHECK-SAME: %swift.accessible_function* @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC15asyncExternallyyyKFfaHF" -// CHECK-SAME: %swift.accessible_function* @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyyYaKFfaHF" -// CHECK-SAME: %swift.accessible_function* @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyySiYaFfaHF" -// CHECK-SAME: %swift.accessible_function* @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomething_1xySi_SaySiGztYaFfaHF" -// CHECK-SAME: %swift.accessible_function* @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA06globalG2FnSaySSGyYaFfaHF" +// CHECK-SAME: ptr @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC15asyncExternallyyyKFfaHF" +// CHECK-SAME: ptr @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyyYaKFfaHF" +// CHECK-SAME: ptr @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyySiYaFfaHF" +// CHECK-SAME: ptr @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomething_1xySi_SaySiGztYaFfaHF" +// CHECK-SAME: ptr @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA06globalG2FnSaySSGyYaFfaHF" @runtimeMetadata struct FlagForAsyncFuncs { @@ -30,24 +29,24 @@ struct FlagForAsyncFuncs { } actor TestActor { - // CHECK-LABEL: define hidden swiftcc void @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC15asyncExternallyyyKFfa"(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg* noalias nocapture sret(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC15asyncExternallyyyKFfa"(ptr noalias nocapture sret(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg) %0) @FlagForAsyncFuncs func asyncExternally() throws { } - // CHECK-LABEL: define hidden swiftcc void @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyyYaKFfa"(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg* noalias nocapture sret(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyyYaKFfa"(ptr noalias nocapture sret(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg) %0) @FlagForAsyncFuncs func doSomething() async throws { } - // CHECK-LABEL: define hidden swiftcc void @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyySiYaFfa"(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg* noalias nocapture sret(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyySiYaFfa"(ptr noalias nocapture sret(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg) %0) @FlagForAsyncFuncs nonisolated func doSomething(_: Int) async { } - // CHECK-LABEL: define hidden swiftcc void @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomething_1xySi_SaySiGztYaFfa"(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg* noalias nocapture sret(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA9TestActorC11doSomething_1xySi_SaySiGztYaFfa"(ptr noalias nocapture sret(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg) %0) @FlagForAsyncFuncs func doSomething(_: Int, x: inout [Int]) async { } } -// CHECK-LABEL: define hidden swiftcc void @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA06globalG2FnSaySSGyYaFfa"(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg* noalias nocapture sret(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg) %0) +// CHECK-LABEL: define hidden swiftcc void @"$s28runtime_attributes_on_actors17FlagForAsyncFuncsVAA06globalG2FnSaySSGyYaFfa"(ptr noalias nocapture sret(%T28runtime_attributes_on_actors17FlagForAsyncFuncsVSg) %0) @FlagForAsyncFuncs func globalAsyncFn() async -> [String] { return [] diff --git a/test/IRGen/runtime_attributes_on_distributed_actors.swift b/test/IRGen/runtime_attributes_on_distributed_actors.swift index 3825458ebee53..8ab735fc9d90c 100644 --- a/test/IRGen/runtime_attributes_on_distributed_actors.swift +++ b/test/IRGen/runtime_attributes_on_distributed_actors.swift @@ -1,7 +1,6 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module-path=%t/RAD.swiftmodule -module-name=RAD -enable-experimental-feature RuntimeDiscoverableAttrs -disable-availability-checking %S/Inputs/runtime_attrs.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir -I %t -swift-version 5 -enable-experimental-feature RuntimeDiscoverableAttrs -disable-availability-checking | %IRGenFileCheck %s -// RUN: %target-swift-frontend -primary-file %s -emit-ir -I %t -swift-version 5 -enable-experimental-feature RuntimeDiscoverableAttrs -disable-availability-checking +// RUN: %target-swift-frontend -primary-file %s -emit-ir -I %t -swift-version 5 -enable-experimental-feature RuntimeDiscoverableAttrs -disable-availability-checking | %IRGenFileCheck %s // REQUIRES: asserts // REQUIRES: OS=macosx @@ -14,10 +13,10 @@ // : @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVHa" = internal constant // SAME: i32 5 4 -// SAME: %swift.accessible_function* @"s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC15asyncExternallyyyKFfaHF" -// SAME: %swift.accessible_function* @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyyYaKFfaHF" -// SAME: %swift.accessible_function* @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyySiYaFfaHF" -// SAME: %swift.accessible_function* @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomething_1xySi_SaySiGtYaFfaHF" +// SAME: ptr @"s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC15asyncExternallyyyKFfaHF" +// SAME: ptr @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyyYaKFfaHF" +// SAME: ptr @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyySiYaFfaHF" +// SAME: ptr @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomething_1xySi_SaySiGtYaFfaHF" import Distributed @@ -32,15 +31,15 @@ struct FlagForAsyncFuncs { distributed actor TestActor { typealias ActorSystem = LocalTestingDistributedActorSystem - // CHECK-LABEL: define hidden swiftcc void @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC15asyncExternallyyyKFfa"(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg* noalias nocapture sret(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC15asyncExternallyyyKFfa"(ptr noalias nocapture sret(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg) %0) @FlagForAsyncFuncs distributed func asyncExternally() throws {} - // CHECK-LABEL: define hidden swiftcc void @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyyYaKFfa"(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg* noalias nocapture sret(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyyYaKFfa"(ptr noalias nocapture sret(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg) %0) @FlagForAsyncFuncs distributed func doSomething() async throws {} - // CHECK-LABEL: define hidden swiftcc void @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyySiYaFfa"(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg* noalias nocapture sret(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomethingyySiYaFfa"(ptr noalias nocapture sret(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg) %0) @FlagForAsyncFuncs nonisolated func doSomething(_: Int) async {} - // CHECK-LABEL: define hidden swiftcc void @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomething_1xySi_SaySiGtYaFfa"(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg* noalias nocapture sret(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg) %0) + // CHECK-LABEL: define hidden swiftcc void @"$s40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVAA9TestActorC11doSomething_1xySi_SaySiGtYaFfa"(ptr noalias nocapture sret(%T40runtime_attributes_on_distributed_actors17FlagForAsyncFuncsVSg) %0) @FlagForAsyncFuncs distributed func doSomething(_: Int, x: [Int]) async {} } diff --git a/test/IRGen/runtime_calling_conventions.swift b/test/IRGen/runtime_calling_conventions.swift index 3d621a4153f0b..dda42edbc069d 100644 --- a/test/IRGen/runtime_calling_conventions.swift +++ b/test/IRGen/runtime_calling_conventions.swift @@ -1,19 +1,17 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name runtime_calling_conventions -parse-as-library -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name runtime_calling_conventions -parse-as-library -O -emit-ir %s | %FileCheck --check-prefix=OPT-CHECK %s -// RUN: %target-swift-frontend -module-name runtime_calling_conventions -parse-as-library -emit-ir %s -// RUN: %target-swift-frontend -module-name runtime_calling_conventions -parse-as-library -O -emit-ir %s +// RUN: %target-swift-frontend -module-name runtime_calling_conventions -parse-as-library -emit-ir %s | %FileCheck %s +// RUN: %target-swift-frontend -module-name runtime_calling_conventions -parse-as-library -O -emit-ir %s | %FileCheck --check-prefix=OPT-CHECK %s // Test that runtime functions are invoked using the new calling convention. public class C { } -// CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc void @"$s27runtime_calling_conventions3fooyyAA1CCF"(%T27runtime_calling_conventions1CC* %0) +// CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc void @"$s27runtime_calling_conventions3fooyyAA1CCF"(ptr %0) // Check that runtime functions use a proper calling convention. // CHECK-NOT: call void {{.*}} @swift_release -// OPT-CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc void @"$s{{(27|28)}}runtime_calling_conventions3fooyyAA1CCF"(%T27runtime_calling_conventions1CC* nocapture{{.*}} %0) +// OPT-CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swiftcc void @"$s{{(27|28)}}runtime_calling_conventions3fooyyAA1CCF"(ptr nocapture{{.*}} %0) // Check that runtime functions use a proper calling convention. // OPT-CHECK-NOT: tail call void @swift_release diff --git a/test/IRGen/same_type_constraints.swift b/test/IRGen/same_type_constraints.swift index 5375de21aeb0f..4287f34a4c96f 100644 --- a/test/IRGen/same_type_constraints.swift +++ b/test/IRGen/same_type_constraints.swift @@ -1,7 +1,5 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -primary-file %s -disable-objc-attr-requires-foundation-module | %FileCheck %s -// RUN: %target-swift-frontend %use_no_opaque_pointers -Osize -emit-ir -primary-file %s -disable-objc-attr-requires-foundation-module | %FileCheck %s --check-prefix=OSIZE -// RUN: %target-swift-frontend -emit-ir -primary-file %s -disable-objc-attr-requires-foundation-module -// RUN: %target-swift-frontend -Osize -emit-ir -primary-file %s -disable-objc-attr-requires-foundation-module +// RUN: %target-swift-frontend -emit-ir -primary-file %s -disable-objc-attr-requires-foundation-module | %FileCheck %s +// RUN: %target-swift-frontend -Osize -emit-ir -primary-file %s -disable-objc-attr-requires-foundation-module | %FileCheck %s --check-prefix=OSIZE // Ensure that same-type constraints between generic arguments get reflected // correctly in the type context descriptor. @@ -69,7 +67,7 @@ where Self : CodingType, print(Self.ValueType.self) } -// OSIZE: define internal swiftcc i8** @"$s21same_type_constraints12GenericKlazzCyxq_GAA1EAA4DataAaEP_AA0F4TypePWT"(%swift.type* readnone %"GenericKlazz.Data", %swift.type* nocapture readonly %"GenericKlazz", i8** nocapture readnone %"GenericKlazz.E") [[ATTRS:#[0-9]+]] { +// OSIZE: define internal swiftcc ptr @"$s21same_type_constraints12GenericKlazzCyxq_GAA1EAA4DataAaEP_AA0F4TypePWT"(ptr readnone %"GenericKlazz.Data", ptr nocapture readonly %"GenericKlazz", ptr nocapture readnone %"GenericKlazz.E") [[ATTRS:#[0-9]+]] { // OSIZE: [[ATTRS]] = {{{.*}}noinline // Check that same-typing two generic parameters together lowers correctly. diff --git a/test/IRGen/select_enum.sil b/test/IRGen/select_enum.sil index 1504c071acfad..24f8439eb8ff4 100644 --- a/test/IRGen/select_enum.sil +++ b/test/IRGen/select_enum.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -Xllvm -sil-disable-pass=simplification -gnone -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -gnone -emit-ir %s +// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -gnone -emit-ir %s | %FileCheck %s import Builtin @@ -8,12 +7,12 @@ enum SinglePayloadSingleEmpty { case DataCase(Builtin.Word) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @select_enum_SinglePayloadSingleEmpty(%T11select_enum013SinglePayloadC5EmptyO* noalias nocapture dereferenceable({{.*}}) %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @select_enum_SinglePayloadSingleEmpty(ptr noalias nocapture dereferenceable({{.*}}) %0) sil @select_enum_SinglePayloadSingleEmpty : $@convention(thin) (@in SinglePayloadSingleEmpty) -> () { bb0(%0 : $*SinglePayloadSingleEmpty): %1 = load %0 : $*SinglePayloadSingleEmpty - // CHECK: [[PAYLOAD1:%[0-9]+]] = load [[WORD_TY:(i32|i64)]], [[WORD_TY:(i32|i64)]]* - // CHECK: [[TAG1:%[0-9]+]] = load i1, i1* + // CHECK: [[PAYLOAD1:%[0-9]+]] = load [[WORD_TY:(i32|i64)]], ptr + // CHECK: [[TAG1:%[0-9]+]] = load i1, ptr %2 = integer_literal $Builtin.Int32, 2 %3 = integer_literal $Builtin.Int32, 3 @@ -25,8 +24,8 @@ bb0(%0 : $*SinglePayloadSingleEmpty): // CHECK-NEXT: select i1 [[V3]], i32 3, i32 2 %5 = select_enum %1 : $SinglePayloadSingleEmpty, case #SinglePayloadSingleEmpty.DataCase!enumelt: %3, case #SinglePayloadSingleEmpty.EmptyCase!enumelt: %2 : $Builtin.Int32 - // CHECK: [[PAYLOAD0:%[0-9]+]] = load [[WORD_TY]], [[WORD_TY]]* - // CHECK: [[TAG0:%[0-9]+]] = load i1, i1* + // CHECK: [[PAYLOAD0:%[0-9]+]] = load [[WORD_TY:(i32|i64)]], ptr + // CHECK: [[TAG0:%[0-9]+]] = load i1, ptr // CHECK: select i1 [[TAG0]], i32 2, i32 3 %6 = select_enum_addr %0 : $*SinglePayloadSingleEmpty, case #SinglePayloadSingleEmpty.EmptyCase!enumelt: %2, case #SinglePayloadSingleEmpty.DataCase!enumelt: %3 : $Builtin.Int32 @@ -46,7 +45,7 @@ enum MyOptional { sil @select_enum_TwoCasesNoPayload :$ @convention(thin) (@in TwoCasesNoPayload, @in MyOptional) -> () { bb0(%0 : $*TwoCasesNoPayload, %10 : $*MyOptional): -// CHECK: [[PAYLOAD1:%[0-9]+]] = load i1, i1* +// CHECK: [[PAYLOAD1:%[0-9]+]] = load i1, ptr %1 = load %0 : $*TwoCasesNoPayload %2 = integer_literal $Builtin.Int32, 2 @@ -61,7 +60,7 @@ bb0(%0 : $*TwoCasesNoPayload, %10 : $*MyOptional): %5 = select_enum %1 : $TwoCasesNoPayload, case #TwoCasesNoPayload.Y!enumelt: %3, default %2 : $Builtin.Int32 - // CHECK: [[PAYLOAD2:%[0-9]+]] = load i8, i8* + // CHECK: [[PAYLOAD2:%[0-9]+]] = load i8, ptr %11 = load %10 : $*MyOptional // CHECK-NEXT: [[V1:%[0-9]+]] = icmp eq i8 [[PAYLOAD2]], 2 diff --git a/test/IRGen/signature_conformances_multifile.swift b/test/IRGen/signature_conformances_multifile.swift index 0dfc5e711e33c..6b2277584e1d7 100644 --- a/test/IRGen/signature_conformances_multifile.swift +++ b/test/IRGen/signature_conformances_multifile.swift @@ -1,15 +1,14 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-generic-metadata-prespecialization -emit-ir -primary-file %s %S/Inputs/signature_conformances_other.swift | %FileCheck %s -// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir -primary-file %s %S/Inputs/signature_conformances_other.swift +// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir -primary-file %s %S/Inputs/signature_conformances_other.swift | %FileCheck %s // Make sure we correctly determine the witness table is dependent, even though // it was defined in a different file. // CHECK-LABEL: define hidden swiftcc void @"$s32signature_conformances_multifile5passQyyF"() func passQ() { - // CHECK: call swiftcc void @"$s32signature_conformances_multifile12AlsoConformsVACyxGycfC"(%swift.type* @"$sSiN") + // CHECK: call swiftcc void @"$s32signature_conformances_multifile12AlsoConformsVACyxGycfC"(ptr @"$sSiN") // CHECK: %0 = call {{.*}} @"$s32signature_conformances_multifile12AlsoConformsVySiGMD" - // CHECK: %1 = call i8** @"$s32signature_conformances_multifile12AlsoConformsVySiGACyxGAA1QAAWl"() - // CHECK: call swiftcc void @"$s32signature_conformances_multifile6takesQyyxAA1QRzlF"(%swift.opaque* noalias nocapture undef, %swift.type* %0, i8** %1) + // CHECK: %1 = call ptr @"$s32signature_conformances_multifile12AlsoConformsVySiGACyxGAA1QAAWl"() + // CHECK: call swiftcc void @"$s32signature_conformances_multifile6takesQyyxAA1QRzlF"(ptr noalias nocapture undef, ptr %0, ptr %1) takesQ(AlsoConforms()) // CHECK: ret void @@ -17,10 +16,10 @@ func passQ() { // CHECK-LABEL: define hidden swiftcc void @"$s32signature_conformances_multifile5passPyyF"() func passP() { - // CHECK: call swiftcc void @"$s32signature_conformances_multifile8ConformsVACyxq_GycfC"(%swift.type* @"$sSiN", %swift.type* @"$sSSN") + // CHECK: call swiftcc void @"$s32signature_conformances_multifile8ConformsVACyxq_GycfC"(ptr @"$sSiN", ptr @"$sSSN") // CHECK: %0 = call {{.*}} @"$s32signature_conformances_multifile8ConformsVySiSSGMD" - // CHECK: %1 = call i8** @"$s32signature_conformances_multifile8ConformsVySiSSGACyxq_GAA1PAAWl"() - // CHECK: call swiftcc void @"$s32signature_conformances_multifile6takesPyyxAA1PRzlF"(%swift.opaque* noalias nocapture undef, %swift.type* %0, i8** %1) + // CHECK: %1 = call ptr @"$s32signature_conformances_multifile8ConformsVySiSSGACyxq_GAA1PAAWl"() + // CHECK: call swiftcc void @"$s32signature_conformances_multifile6takesPyyxAA1PRzlF"(ptr noalias nocapture undef, ptr %0, ptr %1) takesP(Conforms()) // CHECK: ret void diff --git a/test/IRGen/signature_conformances_multifile_future.swift b/test/IRGen/signature_conformances_multifile_future.swift index 07edd634a8f83..e95bfa274b5e3 100644 --- a/test/IRGen/signature_conformances_multifile_future.swift +++ b/test/IRGen/signature_conformances_multifile_future.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir -primary-file %s %S/Inputs/signature_conformances_other.swift | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir -primary-file %s %S/Inputs/signature_conformances_other.swift +// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir -primary-file %s %S/Inputs/signature_conformances_other.swift | %FileCheck %s -DINT=i%target-ptrsize // REQUIRES: VENDOR=apple || OS=linux-gnu // UNSUPPORTED: CPU=i386 && OS=ios @@ -11,13 +10,13 @@ // CHECK-LABEL: define hidden swiftcc void @"$s39signature_conformances_multifile_future5passQyyF"() func passQ() { - // CHECK: call swiftcc void @"$s39signature_conformances_multifile_future12AlsoConformsVACyxGycfC"(%swift.type* @"$sSiN") - // CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s39signature_conformances_multifile_future12AlsoConformsVySiGMD") - // CHECK: [[WITNESS_TABLE:%[0-9]+]] = call i8** @"$s39signature_conformances_multifile_future12AlsoConformsVySiGACyxGAA1QAAWl"() + // CHECK: call swiftcc void @"$s39signature_conformances_multifile_future12AlsoConformsVACyxGycfC"(ptr @"$sSiN") + // CHECK: [[METADATA:%[0-9]+]] = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s39signature_conformances_multifile_future12AlsoConformsVySiGMD") + // CHECK: [[WITNESS_TABLE:%[0-9]+]] = call ptr @"$s39signature_conformances_multifile_future12AlsoConformsVySiGACyxGAA1QAAWl"() // CHECK: call swiftcc void @"$s39signature_conformances_multifile_future6takesQyyxAA1QRzlF"( - // CHECK-SAME: %swift.opaque* noalias nocapture undef, - // CHECK-SAME: %swift.type* [[METADATA]], - // CHECK-SAME: i8** [[WITNESS_TABLE]] + // CHECK-SAME: ptr noalias nocapture undef, + // CHECK-SAME: ptr [[METADATA]], + // CHECK-SAME: ptr [[WITNESS_TABLE]] // CHECK-SAME: ) takesQ(AlsoConforms()) @@ -26,13 +25,13 @@ func passQ() { // CHECK-LABEL: define hidden swiftcc void @"$s39signature_conformances_multifile_future5passPyyF"() func passP() { - // CHECK: call swiftcc void @"$s39signature_conformances_multifile_future8ConformsVACyxq_GycfC"(%swift.type* @"$sSiN", %swift.type* @"$sSSN") - // CHECK: [[METADATA:%[0-9]+]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledName({ i32, i32 }* @"$s39signature_conformances_multifile_future8ConformsVySiSSGMD") - // CHECK: [[WITNESS_TABLE:%[0-9]+]] = call i8** @"$s39signature_conformances_multifile_future8ConformsVySiSSGACyxq_GAA1PAAWl"() + // CHECK: call swiftcc void @"$s39signature_conformances_multifile_future8ConformsVACyxq_GycfC"(ptr @"$sSiN", ptr @"$sSSN") + // CHECK: [[METADATA:%[0-9]+]] = call ptr @__swift_instantiateConcreteTypeFromMangledName(ptr @"$s39signature_conformances_multifile_future8ConformsVySiSSGMD") + // CHECK: [[WITNESS_TABLE:%[0-9]+]] = call ptr @"$s39signature_conformances_multifile_future8ConformsVySiSSGACyxq_GAA1PAAWl"() // CHECK: call swiftcc void @"$s39signature_conformances_multifile_future6takesPyyxAA1PRzlF"( - // CHECK-SAME: %swift.opaque* noalias nocapture undef, - // CHECK-SAME: %swift.type* [[METADATA]], - // CHECK-SAME: i8** [[WITNESS_TABLE]] + // CHECK-SAME: ptr noalias nocapture undef, + // CHECK-SAME: ptr [[METADATA]], + // CHECK-SAME: ptr [[WITNESS_TABLE]] // CHECK-SAME: ) takesP(Conforms()) diff --git a/test/IRGen/sil_witness_tables_external_witnesstable.swift b/test/IRGen/sil_witness_tables_external_witnesstable.swift index 3f88b7afaa903..211d584f23609 100644 --- a/test/IRGen/sil_witness_tables_external_witnesstable.swift +++ b/test/IRGen/sil_witness_tables_external_witnesstable.swift @@ -1,12 +1,11 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -static %S/Inputs/sil_witness_tables_external_input.swift -o %t/Swift.swiftmodule -parse-stdlib -parse-as-library -module-name Swift -module-link-name swiftCore -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -primary-file %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -I %t -primary-file %s -emit-ir +// RUN: %target-swift-frontend -I %t -primary-file %s -emit-ir | %FileCheck %s import Swift // CHECK: @"$ss1XVN" = external {{(dllimport )?}}global %swift.type -// CHECK: @"$ss1XVs1PsWP" = external {{(dllimport )?}}global i8* +// CHECK: @"$ss1XVs1PsWP" = external {{(dllimport )?}}global ptr func doSomething(_ t : T) -> Y { return t.doSomething() diff --git a/test/IRGen/sil_witness_tables_inherited_conformance.swift b/test/IRGen/sil_witness_tables_inherited_conformance.swift index 76af74e9cce24..53076ecfcfe91 100644 --- a/test/IRGen/sil_witness_tables_inherited_conformance.swift +++ b/test/IRGen/sil_witness_tables_inherited_conformance.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend %s -emit-ir +// RUN: %target-swift-frontend %s -emit-ir | %FileCheck %s // rdar://problem/20628295 @@ -24,7 +23,7 @@ class Anesthesiologist : Veterinarian { } func breed(_ t: T) { } -// CHECK-LABEL: define hidden swiftcc void @"$s40sil_witness_tables_inherited_conformance4feed{{[_0-9a-zA-Z]*}}F"(%T40sil_witness_tables_inherited_conformance3CatC* %0, %swift.type* %T) +// CHECK-LABEL: define hidden swiftcc void @"$s40sil_witness_tables_inherited_conformance4feed{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr %T) func feed(_ t: T) { // CHECK: call swiftcc void @"$s40sil_witness_tables_inherited_conformance5breed{{[_0-9a-zA-Z]*}}F"{{.*}} @"$s40sil_witness_tables_inherited_conformance3CatCAA5PandaAAWP" breed(t) @@ -34,7 +33,7 @@ func obtain(_ t: T.Type) { t.init() } -// CHECK-LABEL: define hidden swiftcc void @"$s40sil_witness_tables_inherited_conformance6wangle{{[_0-9a-zA-Z]*}}F"(%swift.type* %0, %swift.type* %T) +// CHECK-LABEL: define hidden swiftcc void @"$s40sil_witness_tables_inherited_conformance6wangle{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr %T) func wangle(_ t: T.Type) { // CHECK: call swiftcc void @"$s40sil_witness_tables_inherited_conformance6obtain{{[_0-9a-zA-Z]*}}F"{{.*}} @"$s40sil_witness_tables_inherited_conformance3CatCAA5PandaAAWP" obtain(t) diff --git a/test/IRGen/static-vtable-stubs.swift b/test/IRGen/static-vtable-stubs.swift index f0a56cdca5994..a1011cae93c3b 100644 --- a/test/IRGen/static-vtable-stubs.swift +++ b/test/IRGen/static-vtable-stubs.swift @@ -1,9 +1,7 @@ // RUN: %empty-directory(%t) // RUN: split-file --leading-lines %s %t -// RUN: %swift-target-frontend %use_no_opaque_pointers -disable-availability-checking -parse-as-library -static -O -module-name M -c -primary-file %t/A.swift %t/B.swift -S -emit-ir -o - | %FileCheck %t/A.swift -check-prefix CHECK -// RUN: %swift-target-frontend %use_no_opaque_pointers -disable-availability-checking -parse-as-library -static -O -module-name M -c %t/A.swift -primary-file %t/B.swift -S -emit-ir -o - | %FileCheck %t/B.swift -check-prefix CHECK -// RUN: %swift-target-frontend -disable-availability-checking -parse-as-library -static -O -module-name M -c -primary-file %t/A.swift %t/B.swift -S -emit-ir -o - -// RUN: %swift-target-frontend -disable-availability-checking -parse-as-library -static -O -module-name M -c %t/A.swift -primary-file %t/B.swift -S -emit-ir -o - +// RUN: %swift-target-frontend -disable-availability-checking -parse-as-library -static -O -module-name M -c -primary-file %t/A.swift %t/B.swift -S -emit-ir -o - | %FileCheck %t/A.swift -check-prefix CHECK +// RUN: %swift-target-frontend -disable-availability-checking -parse-as-library -static -O -module-name M -c %t/A.swift -primary-file %t/B.swift -S -emit-ir -o - | %FileCheck %t/B.swift -check-prefix CHECK // Verify that we can link successfully. // RUN: %target-build-swift -Xfrontend -disable-availability-checking -O %t/A.swift %t/B.swift -o %t/a.out @@ -19,17 +17,17 @@ open class C { // CHECK: @"$s1M1CC3foo33_{{.*}}Tu" = hidden global %swift.async_func_pointer <{ {{.*}} @_swift_dead_method_stub -// CHECK: @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvg" = hidden alias void (), void ()* @_swift_dead_method_stub -// CHECK: @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvs" = hidden alias void (), void ()* @_swift_dead_method_stub -// CHECK: @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvM" = hidden alias void (), void ()* @_swift_dead_method_stub +// CHECK: @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvg" = hidden alias void (), ptr @_swift_dead_method_stub +// CHECK: @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvs" = hidden alias void (), ptr @_swift_dead_method_stub +// CHECK: @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvM" = hidden alias void (), ptr @_swift_dead_method_stub //--- B.swift final class D: C { } -// CHECK: declare swiftcc %swift.bridge* @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvg"(%T1M1CC* swiftself) #0 -// CHECK: declare swiftcc void @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvs"(%swift.bridge*, %T1M1CC* swiftself) #0 -// CHECK: declare swiftcc { i8*, %TSD* } @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvM"(i8* noalias dereferenceable(32), %T1M1CC* swiftself) #0 +// CHECK: declare swiftcc ptr @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvg"(ptr swiftself) #0 +// CHECK: declare swiftcc void @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvs"(ptr, ptr swiftself) #0 +// CHECK: declare swiftcc { ptr, ptr } @"$s1M1CC1i33_807E3D81CC6CDD898084F3279464DDF9LLSDySOypGvM"(ptr noalias dereferenceable(32), ptr swiftself) #0 @main struct Main { diff --git a/test/IRGen/subclass_existentials.sil b/test/IRGen/subclass_existentials.sil index 32ead354460b7..348d0c7277a4b 100644 --- a/test/IRGen/subclass_existentials.sil +++ b/test/IRGen/subclass_existentials.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir | %FileCheck %s --check-prefix=CHECK-%target-runtime --check-prefix=CHECK -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -primary-file %s -emit-ir +// RUN: %target-swift-frontend -primary-file %s -emit-ir | %FileCheck %s --check-prefix=CHECK-%target-runtime --check-prefix=CHECK -DINT=i%target-ptrsize sil_stage canonical @@ -19,12 +18,12 @@ protocol R {} // Make sure we use native reference counting when the existential has a Swift // class bound. -// CHECK-objc-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkRefcounting(%T21subclass_existentials1CC* %0, i8** %1, %objc_object* %2, i8** %3) -// CHECK-native-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkRefcounting(%T21subclass_existentials1CC* %0, i8** %1, %swift.refcounted* %2, i8** %3) +// CHECK-objc-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkRefcounting(ptr %0, ptr %1, ptr %2, ptr %3) +// CHECK-native-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkRefcounting(ptr %0, ptr %1, ptr %2, ptr %3) // CHECK-NEXT: entry: -// CHECK-objc-NEXT: call void @swift_unknownObjectRelease(%objc_object* %2) -// 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-objc-NEXT: call void @swift_unknownObjectRelease(ptr %2) +// CHECK-native-NEXT: call void @swift_release(ptr %2) +// CHECK-NEXT: call void @swift_release(ptr %0) // CHECK-NEXT: ret void sil [ossa] @checkRefcounting : $@convention(thin) (@owned C & P, @owned AnyObject & P) -> () { @@ -43,7 +42,7 @@ sil @takesMetadata : $@convention(thin) (@thick T.Type) -> () // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkMetadata() // CHECK-NEXT: entry: // CHECK-NEXT: [[TYPE:%.*]] = call {{.*}}@"$s21subclass_existentials1P_AA1CCXcMD" -// CHECK-NEXT: call swiftcc void @takesMetadata(%swift.type* [[TYPE]], %swift.type* [[TYPE]]) +// CHECK-NEXT: call swiftcc void @takesMetadata(ptr [[TYPE]], ptr [[TYPE]]) // CHECK-NEXT: ret void sil [ossa] @checkMetadata : $@convention(thin) () -> () { @@ -56,53 +55,45 @@ bb0: return %4 : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { %T21subclass_existentials1CC*, i8** } @eraseToExistential(%T21subclass_existentials1DC* %0) -// CHECK: [[INSTANCE:%.*]] = bitcast %T21subclass_existentials1DC* %0 to %T21subclass_existentials1CC* -// CHECK-NEXT: [[RESULT1:%.*]] = insertvalue { %T21subclass_existentials1CC*, i8** } undef, %T21subclass_existentials1CC* [[INSTANCE]], 0 -// CHECK-NEXT: [[RESULT2:%.*]] = insertvalue { %T21subclass_existentials1CC*, i8** } [[RESULT1]], i8** @"$s21subclass_existentials1DCAA1PAAWP", 1 -// CHECK-NEXT: ret { %T21subclass_existentials1CC*, i8** } [[RESULT2]] +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { ptr, ptr } @eraseToExistential(ptr %0) +// CHECK: [[RESULT1:%.*]] = insertvalue { ptr, ptr } undef, ptr %0, 0 +// CHECK-NEXT: [[RESULT2:%.*]] = insertvalue { ptr, ptr } [[RESULT1]], ptr @"$s21subclass_existentials1DCAA1PAAWP", 1 +// CHECK-NEXT: ret { ptr, ptr } [[RESULT2]] sil @eraseToExistential : $@convention(thin) (@owned D) -> @owned C & P { bb0(%0 : $D): %2 = init_existential_ref %0 : $D : $D, $C & P return %2 : $C & P } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { %T21subclass_existentials1GC*, i8** } @eraseToExistentialWithGeneric(%T21subclass_existentials1EC* %0) -// CHECK: [[INSTANCE:%.*]] = bitcast %T21subclass_existentials1EC* %0 to %T21subclass_existentials1GC* -// CHECK-NEXT: [[RESULT1:%.*]] = insertvalue { %T21subclass_existentials1GC*, i8** } undef, %T21subclass_existentials1GC* [[INSTANCE]], 0 -// CHECK-NEXT: [[RESULT2:%.*]] = insertvalue { %T21subclass_existentials1GC*, i8** } [[RESULT1]], i8** @"$s21subclass_existentials1ECyxGAA1PAAWP", 1 -// CHECK-NEXT: ret { %T21subclass_existentials1GC*, i8** } [[RESULT2]] +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc { ptr, ptr } @eraseToExistentialWithGeneric(ptr %0) +// CHECK: [[RESULT1:%.*]] = insertvalue { ptr, ptr } undef, ptr %0, 0 +// CHECK-NEXT: [[RESULT2:%.*]] = insertvalue { ptr, ptr } [[RESULT1]], ptr @"$s21subclass_existentials1ECyxGAA1PAAWP", 1 +// CHECK-NEXT: ret { ptr, ptr } [[RESULT2]] sil @eraseToExistentialWithGeneric : $@convention(thin) <τ_0_0> (@owned E<τ_0_0>) -> @owned G<τ_0_0> & P { bb0(%0 : $E<τ_0_0>): %2 = init_existential_ref %0 : $E<τ_0_0> : $E<τ_0_0>, $G<τ_0_0> & P return %2 : $G<τ_0_0> & P } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkExistentialDowncast(%T21subclass_existentials1CC* %0, %T21subclass_existentials1CC* %1, i8** %2) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkExistentialDowncast(ptr %0, ptr %1, ptr %2) sil [ossa] @checkExistentialDowncast : $@convention(thin) (@owned C, @owned C & P) -> () { bb0(%0 : @owned $C, %1 : @owned $C & P): -// CHECK: [[METATYPE_PTR:%.*]] = bitcast %T21subclass_existentials1CC* %0 to %swift.type** -// CHECK-NEXT: [[METATYPE:%.*]] = load %swift.type*, %swift.type** [[METATYPE_PTR]], align {{4|8}} -// CHECK-NEXT: [[VALUE:%.*]] = bitcast %T21subclass_existentials1CC* %0 to i8* +// CHECK: [[METATYPE:%.*]] = load ptr, ptr %0, align {{4|8}} // CHECK-NEXT: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s21subclass_existentials1DCMa"([[INT]] 0) // CHECK-NEXT: [[SUPERCLASS:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 -// CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_superclass_unconditional(i8* [[VALUE]], %swift.type* [[METATYPE]], %swift.type* [[SUPERCLASS]], {{.*}} @"$s21subclass_existentials1RMp" -// CHECK-NEXT: [[VALUE_ADDR:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 -// CHECK-NEXT: [[VALUE:%.*]] = bitcast i8* [[VALUE_ADDR]] to %T21subclass_existentials1DC* -// CHECK-NEXT: [[WTABLE:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 1 +// CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_superclass_unconditional(ptr %0, ptr [[METATYPE]], ptr [[SUPERCLASS]], {{.*}} @"$s21subclass_existentials1RMp" +// CHECK-NEXT: [[VALUE_ADDR:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 +// CHECK-NEXT: [[WTABLE:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 1 %2 = unconditional_checked_cast %0 : $C to D & R -// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T21subclass_existentials1DC*)*)(%T21subclass_existentials1DC* [[VALUE]]) +// CHECK-NEXT: call void @swift_release(ptr [[VALUE_ADDR]]) destroy_value %2 : $D & R -// CHECK-NEXT: [[VALUE:%.*]] = bitcast %T21subclass_existentials1CC* %1 to i8* -// CHECK-NEXT: [[CLASS_ADDR:%.*]] = bitcast %swift.type* [[SUPERCLASS]] to i8* -// CHECK-NEXT: [[RESULT:%.*]] = call i8* @swift_dynamicCastClassUnconditional(i8* [[VALUE]], i8* [[CLASS_ADDR]], {{.*}}) -// CHECK-NEXT: [[VALUE:%.*]] = bitcast i8* [[RESULT]] to %T21subclass_existentials1DC* +// CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_dynamicCastClassUnconditional(ptr %1, ptr [[SUPERCLASS]], {{.*}}) %3 = unconditional_checked_cast %1 : $C & P to D -// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T21subclass_existentials1DC*)*)(%T21subclass_existentials1DC* [[VALUE]]) +// CHECK-NEXT: call void @swift_release(ptr [[RESULT]]) destroy_value %3 : $D // CHECK-NEXT: ret void @@ -110,40 +101,37 @@ bb0(%0 : @owned $C, %1 : @owned $C & P): return %result : $() } -// CHECK-LABEL: define linkonce_odr hidden { i8*, i8** } @dynamic_cast_existential_1_superclass_unconditional(i8* %0, %swift.type* %1, %swift.type* +// CHECK-LABEL: define linkonce_odr hidden { ptr, ptr } @dynamic_cast_existential_1_superclass_unconditional(ptr %0, ptr %1, ptr // CHECK: entry: -// CHECK-NEXT: [[RESULT:%.*]] = call %swift.type* @swift_dynamicCastMetatype(%swift.type* %1, %swift.type* %2) -// CHECK-NEXT: [[IS_SUBCLASS:%.*]] = icmp ne %swift.type* [[RESULT]], null +// CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_dynamicCastMetatype(ptr %1, ptr %2) +// CHECK-NEXT: [[IS_SUBCLASS:%.*]] = icmp ne ptr [[RESULT]], null // CHECK-NEXT: br i1 [[IS_SUBCLASS]], label %cont, label %fail // CHECK: cont: -// CHECK-NEXT: [[WTABLE:%.*]] = call i8** @swift_conformsToProtocol(%swift.type* %1, {{.*}} %3) -// CHECK-NEXT: [[IS_NOT_CONFORMING:%.*]] = icmp eq i8** [[WTABLE]], null +// CHECK-NEXT: [[WTABLE:%.*]] = call ptr @swift_conformsToProtocol(ptr %1, {{.*}} %3) +// CHECK-NEXT: [[IS_NOT_CONFORMING:%.*]] = icmp eq ptr [[WTABLE]], null // CHECK-NEXT: br i1 [[IS_NOT_CONFORMING]], label %fail, label %cont1 // CHECK: cont1: -// CHECK-NEXT: [[RESULT1:%.*]] = insertvalue { i8*, i8** } undef, i8* %0, 0 -// CHECK-NEXT: [[RESULT2:%.*]] = insertvalue { i8*, i8** } [[RESULT1]], i8** [[WTABLE]], 1 -// CHECK-NEXT: ret { i8*, i8** } [[RESULT2]] +// CHECK-NEXT: [[RESULT1:%.*]] = insertvalue { ptr, ptr } undef, ptr %0, 0 +// CHECK-NEXT: [[RESULT2:%.*]] = insertvalue { ptr, ptr } [[RESULT1]], ptr [[WTABLE]], 1 +// CHECK-NEXT: ret { ptr, ptr } [[RESULT2]] // CHECK: fail: // CHECK-NEXT: call void @llvm.trap() // CHECK-NEXT: unreachable -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkExistentialSameClassDowncast(%T21subclass_existentials1CC* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkExistentialSameClassDowncast(ptr %0) sil [ossa] @checkExistentialSameClassDowncast : $@convention(thin) (@owned C) -> () { bb0(%0 : @owned $C): -// CHECK: [[METATYPE_PTR:%.*]] = bitcast %T21subclass_existentials1CC* %0 to %swift.type** -// CHECK-NEXT: [[METATYPE:%.*]] = load %swift.type*, %swift.type** [[METATYPE_PTR]], align {{4|8}} -// CHECK-NEXT: [[VALUE:%.*]] = bitcast %T21subclass_existentials1CC* %0 to i8* -// CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[VALUE]], %swift.type* [[METATYPE]], {{.*}} @"$s21subclass_existentials1PMp" -// CHECK-NEXT: [[VALUE_ADDR:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 -// CHECK-NEXT: [[VALUE:%.*]] = bitcast i8* [[VALUE_ADDR]] to %T21subclass_existentials1CC* -// CHECK-NEXT: [[WTABLE:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 1 +// CHECK: [[METATYPE:%.*]] = load ptr, ptr %0, align {{4|8}} +// CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %0, ptr [[METATYPE]], {{.*}} @"$s21subclass_existentials1PMp" +// CHECK-NEXT: [[VALUE_ADDR:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 +// CHECK-NEXT: [[WTABLE:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 1 %2 = unconditional_checked_cast %0 : $C to C & P -// CHECK-NEXT: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T21subclass_existentials1CC*)*)(%T21subclass_existentials1CC* [[VALUE]]) +// CHECK-NEXT: call void @swift_release(ptr [[VALUE_ADDR]]) destroy_value %2 : $C & P // CHECK-NEXT: ret void @@ -151,35 +139,33 @@ bb0(%0 : @owned $C): return %result : $() } -// CHECK-LABEL: define linkonce_odr hidden { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* %0, %swift.type* +// CHECK-LABEL: define linkonce_odr hidden { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %0, ptr // CHECK: entry: -// CHECK-NEXT: [[WTABLE:%.*]] = call i8** @swift_conformsToProtocol(%swift.type* %1, {{.*}} %2) -// CHECK-NEXT: [[IS_NOT_CONFORMING:%.*]] = icmp eq i8** [[WTABLE]], null +// CHECK-NEXT: [[WTABLE:%.*]] = call ptr @swift_conformsToProtocol(ptr %1, {{.*}} %2) +// CHECK-NEXT: [[IS_NOT_CONFORMING:%.*]] = icmp eq ptr [[WTABLE]], null // CHECK-NEXT: br i1 [[IS_NOT_CONFORMING]], label %fail, label %cont // CHECK: cont: -// CHECK-NEXT: [[RESULT1:%.*]] = insertvalue { i8*, i8** } undef, i8* %0, 0 -// CHECK-NEXT: [[RESULT2:%.*]] = insertvalue { i8*, i8** } [[RESULT1]], i8** [[WTABLE]], 1 -// CHECK-NEXT: ret { i8*, i8** } [[RESULT2]] +// CHECK-NEXT: [[RESULT1:%.*]] = insertvalue { ptr, ptr } undef, ptr %0, 0 +// CHECK-NEXT: [[RESULT2:%.*]] = insertvalue { ptr, ptr } [[RESULT1]], ptr [[WTABLE]], 1 +// CHECK-NEXT: ret { ptr, ptr } [[RESULT2]] // CHECK: fail: // CHECK-NEXT: call void @llvm.trap() // CHECK-NEXT: unreachable -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkExistentialMetatypeDowncast(%swift.type* %0, %swift.type* %1, i8** %2) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkExistentialMetatypeDowncast(ptr %0, ptr %1, ptr %2) sil @checkExistentialMetatypeDowncast : $@convention(thin) (@owned @thick C.Type, @owned @thick (C & P).Type) -> () { bb0(%0 : $@thick C.Type, %1 : $@thick (C & P).Type): -// CHECK: [[METATYPE:%.*]] = bitcast %swift.type* %0 to i8* -// CHECK-NEXT: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s21subclass_existentials1DCMa"([[INT]] 0) +// CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s21subclass_existentials1DCMa"([[INT]] 0) // CHECK-NEXT: [[SUPERCLASS:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 -// CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_superclass_unconditional(i8* [[METATYPE]], %swift.type* %0, %swift.type* [[SUPERCLASS]], {{.*}} @"$s21subclass_existentials1RMp" -// CHECK-NEXT: [[VALUE_ADDR:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 -// CHECK-NEXT: [[VALUE:%.*]] = bitcast i8* [[VALUE_ADDR]] to %swift.type* -// CHECK-NEXT: [[WTABLE:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 1 +// CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_superclass_unconditional(ptr %0, ptr %0, ptr [[SUPERCLASS]], {{.*}} @"$s21subclass_existentials1RMp" +// CHECK-NEXT: [[VALUE_ADDR:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 +// CHECK-NEXT: [[WTABLE:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 1 %2 = unconditional_checked_cast %0 : $@thick C.Type to @thick (D & R).Type -// CHECK-NEXT: [[RESULT:%.*]] = call %swift.type* @swift_dynamicCastMetatypeUnconditional(%swift.type* %1, %swift.type* [[SUPERCLASS]], {{.*}}) +// CHECK-NEXT: [[RESULT:%.*]] = call ptr @swift_dynamicCastMetatypeUnconditional(ptr %1, ptr [[SUPERCLASS]], {{.*}}) %3 = unconditional_checked_cast %1 : $@thick (C & P).Type to @thick D.Type // CHECK-NEXT: ret void @@ -187,15 +173,13 @@ bb0(%0 : $@thick C.Type, %1 : $@thick (C & P).Type): return %result : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkExistentialSameClassMetatypeDowncast(%swift.type* %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @checkExistentialSameClassMetatypeDowncast(ptr %0) sil @checkExistentialSameClassMetatypeDowncast : $@convention(thin) (@owned @thick C.Type) -> () { bb0(%0 : $@thick C.Type): -// CHECK: [[METATYPE:%.*]] = bitcast %swift.type* %0 to i8* -// CHECK-NEXT: [[RESULT:%.*]] = call { i8*, i8** } @dynamic_cast_existential_1_unconditional(i8* [[METATYPE]], %swift.type* %0, {{.*}} @"$s21subclass_existentials1PMp" -// CHECK-NEXT: [[VALUE_ADDR:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 0 -// CHECK-NEXT: [[VALUE:%.*]] = bitcast i8* [[VALUE_ADDR]] to %swift.type* -// CHECK-NEXT: [[WTABLE:%.*]] = extractvalue { i8*, i8** } [[RESULT]], 1 +// CHECK: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %0, ptr %0, {{.*}} @"$s21subclass_existentials1PMp" +// CHECK-NEXT: [[VALUE_ADDR:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 +// CHECK-NEXT: [[WTABLE:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 1 %2 = unconditional_checked_cast %0 : $@thick C.Type to @thick (C & P).Type // CHECK-NEXT: ret void diff --git a/test/IRGen/super.sil b/test/IRGen/super.sil index 1c9be28b0dcc5..5a6c28b964cb0 100644 --- a/test/IRGen/super.sil +++ b/test/IRGen/super.sil @@ -8,8 +8,7 @@ // RUN: %target-swift-frontend -emit-module -I %t -o %t %S/../Inputs/fixed_layout_class.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -Xllvm -sil-disable-pass=simplification -enable-library-evolution -parse-sil -parse-as-library -emit-ir -I %t %s | %FileCheck %s -// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -enable-library-evolution -parse-sil -parse-as-library -emit-ir -I %t %s +// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -enable-library-evolution -parse-sil -parse-as-library -emit-ir -I %t %s | %FileCheck %s // CHECK: %swift.type = type { [[INT:i32|i64]] } @@ -61,11 +60,10 @@ bb0(%0 : $ChildToResilientParent): } // ChildToResilientParent is in our resilience domain - can load the superclass's metadata directly. -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s5super22ChildToResilientParentC6methodyyF"(%T5super22ChildToResilientParentC* swiftself %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s5super22ChildToResilientParentC6methodyyF"(ptr swiftself %0) // CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s15resilient_class22ResilientOutsideParentCMa"([[INT]] 0) // CHECK: [[SUPER_METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 -// CHECK: [[FN:%.*]] = call swiftcc i8* @"$s15resilient_class22ResilientOutsideParentCMu"(%swift.type* [[SUPER_METADATA]], %swift.method_descriptor* @"$s15resilient_class22ResilientOutsideParentC6methodyyFTq") -// CHECK: [[FN_PTR:%.*]] = bitcast i8* [[FN]] to void (%T15resilient_class22ResilientOutsideParentC*)* +// CHECK: [[FN:%.*]] = call swiftcc ptr @"$s15resilient_class22ResilientOutsideParentCMu"(ptr [[SUPER_METADATA]], ptr @"$s15resilient_class22ResilientOutsideParentC6methodyyFTq") // CHECK: call void // static super.ChildToResilientParent.classMethod () -> () @@ -80,11 +78,10 @@ bb0(%0 : $@thick ChildToResilientParent.Type): } // ChildToResilientParent is in our resilience domain - can load the superclass's metadata directly. -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s5super22ChildToResilientParentC11classMethodyyFZ"(%swift.type* swiftself %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s5super22ChildToResilientParentC11classMethodyyFZ"(ptr swiftself %0) // CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s15resilient_class22ResilientOutsideParentCMa"([[INT]] 0) // CHECK: [[SUPER_METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 -// CHECK: [[FN:%.*]] = call swiftcc i8* @"$s15resilient_class22ResilientOutsideParentCMu"(%swift.type* [[SUPER_METADATA]], %swift.method_descriptor* @"$s15resilient_class22ResilientOutsideParentC0B6MethodyyFZTq") -// CHECK: [[FN_PTR:%.*]] = bitcast i8* [[FN]] to void (%swift.type*)* +// CHECK: [[FN:%.*]] = call swiftcc ptr @"$s15resilient_class22ResilientOutsideParentCMu"(ptr [[SUPER_METADATA]], ptr @"$s15resilient_class22ResilientOutsideParentC0B6MethodyyFZTq") // CHECK: call swiftcc void // resilient_class.OutsideParent.method () -> () @@ -107,12 +104,11 @@ bb0(%0 : $ChildToFixedParent): return %7 : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s5super18ChildToFixedParentC6methodyyF"(%T5super18ChildToFixedParentC* swiftself %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s5super18ChildToFixedParentC6methodyyF"(ptr swiftself %0) // CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s18fixed_layout_class13OutsideParentCMa"([[INT]] 0) // CHECK: [[SUPER_METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 -// CHECK: [[OPAQUE_SUPER_METADATA:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%T18fixed_layout_class13OutsideParentC*)** -// CHECK: [[VTABLE_SLOT:%.*]] = getelementptr inbounds void (%T18fixed_layout_class13OutsideParentC*)*, void (%T18fixed_layout_class13OutsideParentC*)** [[OPAQUE_SUPER_METADATA]] -// CHECK: [[FN_PTR:%.*]] = load void (%T18fixed_layout_class13OutsideParentC*)*, void (%T18fixed_layout_class13OutsideParentC*)** [[VTABLE_SLOT]] +// CHECK: [[VTABLE_SLOT:%.*]] = getelementptr inbounds ptr, ptr [[SUPER_METADATA]] +// CHECK: [[FN_PTR:%.*]] = load ptr, ptr [[VTABLE_SLOT]] // CHECK: call swiftcc void // static super.ChildToFixedParent.classMethod () -> () @@ -128,12 +124,11 @@ bb0(%0 : $@thick ChildToFixedParent.Type): } // ChildToFixedParent is in our resilience domain - load super metadata directly. -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s5super18ChildToFixedParentC11classMethodyyFZ"(%swift.type* swiftself %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s5super18ChildToFixedParentC11classMethodyyFZ"(ptr swiftself %0) // CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s18fixed_layout_class13OutsideParentCMa"([[INT]] 0) // CHECK: [[SUPER_METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 -// CHECK: [[OPAQUE_SUPER_METADATA:%.*]] = bitcast %swift.type* [[SUPER_METADATA]] to void (%swift.type*)** -// CHECK: [[VTABLE_SLOT:%.*]] = getelementptr inbounds void (%swift.type*)*, void (%swift.type*)** [[OPAQUE_SUPER_METADATA]] -// CHECK: [[FN_PTR:%.*]] = load void (%swift.type*)*, void (%swift.type*)** [[VTABLE_SLOT]] +// CHECK: [[VTABLE_SLOT:%.*]] = getelementptr inbounds ptr, ptr [[SUPER_METADATA]] +// CHECK: [[FN_PTR:%.*]] = load ptr, ptr [[VTABLE_SLOT]] // CHECK: call swiftcc void // ext.super.resilient_class.ResilientOutsideChild.callSuperMethod () -> () @@ -151,14 +146,12 @@ bb0(%0 : $ResilientOutsideChild): } // Extending a resilient class - load super metadata indirectly. -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s15resilient_class21ResilientOutsideChildC5superE15callSuperMethodyyF"(%T15resilient_class21ResilientOutsideChildC* swiftself %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s15resilient_class21ResilientOutsideChildC5superE15callSuperMethodyyF"(ptr swiftself %0) // CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s15resilient_class21ResilientOutsideChildCMa"([[INT]] 0) // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 -// CHECK: [[OPAQUE_METADATA:%.*]] = bitcast %swift.type* [[METADATA]] to %swift.type** -// CHECK: [[SUPER_METADATA_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[OPAQUE_METADATA]], i32 1 -// CHECK: [[SUPER_METADATA:%.*]] = load %swift.type*, %swift.type** [[SUPER_METADATA_PTR]] -// CHECK: [[FN:%.*]] = call swiftcc i8* @"$s15resilient_class22ResilientOutsideParentCMu"(%swift.type* [[SUPER_METADATA]], %swift.method_descriptor* @"$s15resilient_class22ResilientOutsideParentC6methodyyFTq") -// CHECK: [[FN_PTR:%.*]] = bitcast i8* [[FN]] to void (%T15resilient_class22ResilientOutsideParentC*)* +// CHECK: [[SUPER_METADATA_PTR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], i32 1 +// CHECK: [[SUPER_METADATA:%.*]] = load ptr, ptr [[SUPER_METADATA_PTR]] +// CHECK: [[FN:%.*]] = call swiftcc ptr @"$s15resilient_class22ResilientOutsideParentCMu"(ptr [[SUPER_METADATA]], ptr @"$s15resilient_class22ResilientOutsideParentC6methodyyFTq") // CHECK: call void // static ext.super.resilient_class.ResilientOutsideChild.callSuperClassMethod () -> () @@ -174,14 +167,12 @@ bb0(%0 : $@thick ResilientOutsideChild.Type): } // Extending a resilient class - load super metadata indirectly. -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s15resilient_class21ResilientOutsideChildC5superE20callSuperClassMethodyyFZ"(%swift.type* swiftself %0) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s15resilient_class21ResilientOutsideChildC5superE20callSuperClassMethodyyFZ"(ptr swiftself %0) // CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s15resilient_class21ResilientOutsideChildCMa"([[INT]] 0) // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 -// CHECK: [[OPAQUE_METADATA:%.*]] = bitcast %swift.type* [[METADATA]] to %swift.type** -// CHECK: [[SUPER_METADATA_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[OPAQUE_METADATA]], i32 1 -// CHECK: [[SUPER_METADATA:%.*]] = load %swift.type*, %swift.type** [[SUPER_METADATA_PTR]] -// CHECK: [[FN:%.*]] = call swiftcc i8* @"$s15resilient_class22ResilientOutsideParentCMu"(%swift.type* [[SUPER_METADATA]], %swift.method_descriptor* @"$s15resilient_class22ResilientOutsideParentC0B6MethodyyFZTq") -// CHECK: [[FN_PTR:%.*]] = bitcast i8* [[FN]] to void (%swift.type*)* +// CHECK: [[SUPER_METADATA_PTR:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], i32 1 +// CHECK: [[SUPER_METADATA:%.*]] = load ptr, ptr [[SUPER_METADATA_PTR]] +// CHECK: [[FN:%.*]] = call swiftcc ptr @"$s15resilient_class22ResilientOutsideParentCMu"(ptr [[SUPER_METADATA]], ptr @"$s15resilient_class22ResilientOutsideParentC0B6MethodyyFZTq") // CHECK: call swiftcc void sil_vtable ChildToResilientParent { @@ -216,9 +207,8 @@ sil_vtable Derived { // CHECK-LABEL: define{{.*}} @test_super_method_of_generic_base // CHECK: [[METADATA:%.*]] = call {{.*}}@"$s5super4BaseCyAA3StrVGMD" -// CHECK: [[BASEMETADATA:%.*]] = bitcast %swift.type* [[METADATA]] to void (%T5super4BaseC*)** -// CHECK: [[GEP:%.*]] = getelementptr inbounds void (%T5super4BaseC*)*, void (%T5super4BaseC*)** [[BASEMETADATA]] -// CHECK: [[SUPERMT:%.*]] = load void (%T5super4BaseC*)*, void (%T5super4BaseC*)** [[GEP]] +// CHECK: [[GEP:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]] +// CHECK: [[SUPERMT:%.*]] = load ptr, ptr [[GEP]] // CHECK: ret void sil @test_super_method_of_generic_base : $@convention(method) (@guaranteed Derived) -> () { bb0(%0 : $Derived): diff --git a/test/IRGen/superclass_constraint.swift b/test/IRGen/superclass_constraint.swift index 8507dbf4f6a1e..cf71917f1d558 100644 --- a/test/IRGen/superclass_constraint.swift +++ b/test/IRGen/superclass_constraint.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend %s -emit-ir +// RUN: %target-swift-frontend %s -emit-ir | %FileCheck %s public protocol A {} @@ -8,10 +7,10 @@ public class AC : A{} public class CVC where A1: A { // CHECK-LABEL: define{{.*}} @"$s21superclass_constraint3CVCCACyxGycfc" public init() { - // CHECK: [[A:%.*]] = alloca %T21superclass_constraint3CVCC* - // CHECK-NOT: ret %T21superclass_constraint3CVCC* - // CHECK: store %T21superclass_constraint3CVCC* %0, %T21superclass_constraint3CVCC** [[A]] - // CHECK: ret %T21superclass_constraint3CVCC* + // CHECK: [[A:%.*]] = alloca ptr + // CHECK-NOT: ret ptr + // CHECK: store ptr %0, ptr [[A]] + // CHECK: ret ptr var a = self } } diff --git a/test/IRGen/swift_native_objc_runtime_base.sil b/test/IRGen/swift_native_objc_runtime_base.sil index d89b6363c16ca..e3758cab2e983 100644 --- a/test/IRGen/swift_native_objc_runtime_base.sil +++ b/test/IRGen/swift_native_objc_runtime_base.sil @@ -1,11 +1,10 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -enable-objc-interop -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend -enable-objc-interop -emit-ir %s +// RUN: %target-swift-frontend -enable-objc-interop -emit-ir %s | %FileCheck %s // CHECK-LABEL: @"$s30swift_native_objc_runtime_base1CCMm" = hidden global %objc_class { // -- metaclass "isa" is root metaclass -// CHECK: %objc_class* @"OBJC_METACLASS_$_NSObject", +// CHECK: ptr @"OBJC_METACLASS_$_NSObject", // -- metaclass "super" is super metaclass -// CHECK: %objc_class* @"OBJC_METACLASS_$_NSMagicBase" +// CHECK: ptr @"OBJC_METACLASS_$_NSMagicBase" @_swift_native_objc_runtime_base(NSMagicBase) class C {} diff --git a/test/IRGen/synthesized_conformance.swift b/test/IRGen/synthesized_conformance.swift index 8a8fa7848acb4..7f670f5d7d0b2 100644 --- a/test/IRGen/synthesized_conformance.swift +++ b/test/IRGen/synthesized_conformance.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-generic-metadata-prespecialization -emit-ir %s -swift-version 4 | %FileCheck %s -// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir %s -swift-version 4 +// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir %s -swift-version 4 | %FileCheck %s struct Struct { var x: T @@ -34,27 +33,27 @@ extension Nonfinal: Encodable where T: Encodable {} func doEquality(_: T) {} // CHECK-LABEL: define{{( dllexport| protected)?}} swiftcc void @"$s23synthesized_conformance8equalityyyF"() public func equality() { - // CHECK: [[Struct_Equatable:%.*]] = call i8** @"$s23synthesized_conformance6StructVySiGACyxGSQAASQRzlWl"() - // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance10doEqualityyyxSQRzlF"(%swift.opaque* noalias nocapture {{%.*}}, %swift.type* {{%.*}}, i8** [[Struct_Equatable]]) + // CHECK: [[Struct_Equatable:%.*]] = call ptr @"$s23synthesized_conformance6StructVySiGACyxGSQAASQRzlWl"() + // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance10doEqualityyyxSQRzlF"(ptr noalias nocapture {{%.*}}, ptr {{%.*}}, ptr [[Struct_Equatable]]) doEquality(Struct(x: 1)) - // CHECK: [[Enum_Equatable:%.*]] = call i8** @"$s23synthesized_conformance4EnumOySiGACyxGSQAASQRzlWl"() - // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance10doEqualityyyxSQRzlF"(%swift.opaque* noalias nocapture {{%.*}}, %swift.type* {{%.*}}, i8** [[Enum_Equatable]]) + // CHECK: [[Enum_Equatable:%.*]] = call ptr @"$s23synthesized_conformance4EnumOySiGACyxGSQAASQRzlWl"() + // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance10doEqualityyyxSQRzlF"(ptr noalias nocapture {{%.*}}, ptr {{%.*}}, ptr [[Enum_Equatable]]) doEquality(Enum.a(1)) } func doEncodable(_: T) {} // CHECK-LABEL: define{{( dllexport| protected)?}} swiftcc void @"$s23synthesized_conformance9encodableyyF"() public func encodable() { - // CHECK: [[Struct_Encodable:%.*]] = call i8** @"$s23synthesized_conformance6StructVySiGACyxGSEAASeRzSERzlWl"() - // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance11doEncodableyyxSERzlF"(%swift.opaque* noalias nocapture {{%.*}}, %swift.type* {{%.*}}, i8** [[Struct_Encodable]]) + // CHECK: [[Struct_Encodable:%.*]] = call ptr @"$s23synthesized_conformance6StructVySiGACyxGSEAASeRzSERzlWl"() + // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance11doEncodableyyxSERzlF"(ptr noalias nocapture {{%.*}}, ptr {{%.*}}, ptr [[Struct_Encodable]]) doEncodable(Struct(x: 1)) - // CHECK: [[Enum_Encodable:%.*]] = call i8** @"$s23synthesized_conformance4EnumOySiGACyxGSEAASeRzSERzlWl"() - // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance11doEncodableyyxSERzlF"(%swift.opaque* noalias nocapture {{%.*}}, %swift.type* {{%.*}}, i8** [[Enum_Encodable]]) + // CHECK: [[Enum_Encodable:%.*]] = call ptr @"$s23synthesized_conformance4EnumOySiGACyxGSEAASeRzSERzlWl"() + // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance11doEncodableyyxSERzlF"(ptr noalias nocapture {{%.*}}, ptr {{%.*}}, ptr [[Enum_Encodable]]) doEncodable(Enum.a(1)) - // CHECK: [[Final_Encodable:%.*]] = call i8** @"$s23synthesized_conformance5FinalCySiGACyxGSEAASERzlWl"() - // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance11doEncodableyyxSERzlF"(%swift.opaque* noalias nocapture {{%.*}}, %swift.type* {{%.*}}, i8** [[Final_Encodable]]) + // CHECK: [[Final_Encodable:%.*]] = call ptr @"$s23synthesized_conformance5FinalCySiGACyxGSEAASERzlWl"() + // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance11doEncodableyyxSERzlF"(ptr noalias nocapture {{%.*}}, ptr {{%.*}}, ptr [[Final_Encodable]]) doEncodable(Final(x: 1)) - // CHECK: [[Nonfinal_Encodable:%.*]] = call i8** @"$s23synthesized_conformance8NonfinalCySiGACyxGSEAASERzlWl"() - // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance11doEncodableyyxSERzlF"(%swift.opaque* noalias nocapture {{%.*}}, %swift.type* {{%.*}}, i8** [[Nonfinal_Encodable]]) + // CHECK: [[Nonfinal_Encodable:%.*]] = call ptr @"$s23synthesized_conformance8NonfinalCySiGACyxGSEAASERzlWl"() + // CHECK-NEXT: call swiftcc void @"$s23synthesized_conformance11doEncodableyyxSERzlF"(ptr noalias nocapture {{%.*}}, ptr {{%.*}}, ptr [[Nonfinal_Encodable]]) doEncodable(Nonfinal(x: 1)) } diff --git a/test/IRGen/temporary_allocation/codegen.swift b/test/IRGen/temporary_allocation/codegen.swift index 321a291aa7725..c1f4d109762e9 100644 --- a/test/IRGen/temporary_allocation/codegen.swift +++ b/test/IRGen/temporary_allocation/codegen.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -O -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -primary-file %s -O -emit-ir +// RUN: %target-swift-frontend -primary-file %s -O -emit-ir | %FileCheck %s @_silgen_name("blackHole") func blackHole(_ value: UnsafeMutableRawPointer?) -> Void @@ -10,7 +9,7 @@ do { blackHole(ptr) ptr.deallocate() } -// CHECK: ptrtoint i8* {{.*}} to [[WORD:i[0-9]+]] +// CHECK: ptrtoint ptr {{.*}} to [[WORD:i[0-9]+]] // MARK: Trivial Cases @@ -18,28 +17,28 @@ withUnsafeTemporaryAllocation(byteCount: 0, alignment: 1) { buffer in blackHole(buffer.baseAddress) } // CHECK: [[ZERO_BYTE_PTR_RAW:%temp_alloc[0-9]*]] = alloca i8, align 1 -// CHECK: [[ZERO_BYTE_PTR:%[0-9]+]] = ptrtoint i8* [[ZERO_BYTE_PTR_RAW]] to [[WORD]] +// CHECK: [[ZERO_BYTE_PTR:%[0-9]+]] = ptrtoint ptr [[ZERO_BYTE_PTR_RAW]] to [[WORD]] // CHECK: call swiftcc void @blackHole([[WORD]] [[ZERO_BYTE_PTR]]) withUnsafeTemporaryAllocation(byteCount: 1, alignment: 1) { buffer in blackHole(buffer.baseAddress) } // CHECK: [[ONE_BYTE_PTR_RAW:%temp_alloc[0-9]*]] = alloca i8, align 1 -// CHECK: [[ONE_BYTE_PTR:%[0-9]+]] = ptrtoint i8* [[ONE_BYTE_PTR_RAW]] to [[WORD]] +// CHECK: [[ONE_BYTE_PTR:%[0-9]+]] = ptrtoint ptr [[ONE_BYTE_PTR_RAW]] to [[WORD]] // CHECK: call swiftcc void @blackHole([[WORD]] [[ONE_BYTE_PTR]]) withUnsafeTemporaryAllocation(byteCount: 5, alignment: 1) { buffer in blackHole(buffer.baseAddress) } // CHECK: [[FIVE_BYTE_PTR_RAW:%temp_alloc[0-9]*]] = alloca [5 x i8], align 1 -// CHECK: [[FIVE_BYTE_PTR:%[0-9]+]] = ptrtoint [5 x i8]* [[FIVE_BYTE_PTR_RAW]] to [[WORD]] +// CHECK: [[FIVE_BYTE_PTR:%[0-9]+]] = ptrtoint ptr [[FIVE_BYTE_PTR_RAW]] to [[WORD]] // CHECK: call swiftcc void @blackHole([[WORD]] [[FIVE_BYTE_PTR]]) withUnsafeTemporaryAllocation(byteCount: 1024, alignment: 8) { buffer in blackHole(buffer.baseAddress) } // CHECK: [[ONE_KB_PTR_RAW:%temp_alloc[0-9]*]] = alloca [1024 x i8], align 8 -// CHECK: [[ONE_KB_PTR:%[0-9]+]] = ptrtoint [1024 x i8]* [[ONE_KB_PTR_RAW]] to [[WORD]] +// CHECK: [[ONE_KB_PTR:%[0-9]+]] = ptrtoint ptr [[ONE_KB_PTR_RAW]] to [[WORD]] // CHECK: call swiftcc void @blackHole([[WORD]] [[ONE_KB_PTR]]) // MARK: Alignment unknown at compile-time @@ -48,7 +47,7 @@ withUnsafeTemporaryAllocation(byteCount: 1024, alignment: Int.random(in: 0 ..< 1 blackHole(buffer.baseAddress) } // CHECK: [[ONE_KB_RAND_PTR_RAW:%temp_alloc[0-9]*]] = alloca [1024 x i8], align 16 -// CHECK: [[ONE_KB_RAND_PTR:%[0-9]+]] = ptrtoint [1024 x i8]* [[ONE_KB_RAND_PTR_RAW]] to [[WORD]] +// CHECK: [[ONE_KB_RAND_PTR:%[0-9]+]] = ptrtoint ptr [[ONE_KB_RAND_PTR_RAW]] to [[WORD]] // CHECK: call swiftcc void @blackHole([[WORD]] [[ONE_KB_RAND_PTR]]) // MARK: Typed buffers @@ -57,20 +56,20 @@ withUnsafeTemporaryAllocation(of: Int32.self, capacity: 4) { buffer in blackHole(buffer.baseAddress) } // CHECK: [[INT_PTR_RAW:%temp_alloc[0-9]*]] = alloca [16 x i8], align 4 -// CHECK: [[INT_PTR:%[0-9]+]] = ptrtoint [16 x i8]* [[INT_PTR_RAW]] to [[WORD]] +// CHECK: [[INT_PTR:%[0-9]+]] = ptrtoint ptr [[INT_PTR_RAW]] to [[WORD]] // CHECK: call swiftcc void @blackHole([[WORD]] [[INT_PTR]]) _withUnprotectedUnsafeTemporaryAllocation(of: Int32.self, capacity: 4) { buffer in blackHole(buffer.baseAddress) } // CHECK: [[INT_PTR_RAW:%temp_alloc[0-9]*]] = alloca [16 x i8], align 4 -// CHECK: [[INT_PTR:%[0-9]+]] = ptrtoint [16 x i8]* [[INT_PTR_RAW]] to [[WORD]] +// CHECK: [[INT_PTR:%[0-9]+]] = ptrtoint ptr [[INT_PTR_RAW]] to [[WORD]] // CHECK: call swiftcc void @blackHole([[WORD]] [[INT_PTR]]) withUnsafeTemporaryAllocation(of: Void.self, capacity: 2) { buffer in blackHole(buffer.baseAddress) } // CHECK: [[VOID_PTR_RAW:%temp_alloc[0-9]*]] = alloca [2 x i8], align 1 -// CHECK: [[VOID_PTR:%[0-9]+]] = ptrtoint [2 x i8]* [[VOID_PTR_RAW]] to [[WORD]] +// CHECK: [[VOID_PTR:%[0-9]+]] = ptrtoint ptr [[VOID_PTR_RAW]] to [[WORD]] // CHECK: call swiftcc void @blackHole([[WORD]] [[VOID_PTR]]) diff --git a/test/IRGen/temporary_allocation/codegen_very_large_allocation.swift b/test/IRGen/temporary_allocation/codegen_very_large_allocation.swift index 54a73ddc9f401..8a24a9952fe53 100644 --- a/test/IRGen/temporary_allocation/codegen_very_large_allocation.swift +++ b/test/IRGen/temporary_allocation/codegen_very_large_allocation.swift @@ -1,7 +1,6 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -O -emit-ir | %FileCheck %s --check-prefixes=CHECK-LARGE-ALLOC,CHECK-LARGE-ALLOC-%target-vendor -DWORD=i%target-ptrsize -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -O -emit-ir | %FileCheck %s --check-prefix=CHECK-LARGE-STACK-ALLOC -DWORD=i%target-ptrsize -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -O -emit-ir | %FileCheck %s --check-prefix=CHECK-LARGE-HEAP-ALLOC -DWORD=i%target-ptrsize -// RUN: %target-swift-frontend -primary-file %s -O -emit-ir +// RUN: %target-swift-frontend -primary-file %s -O -emit-ir | %FileCheck %s --check-prefixes=CHECK-LARGE-ALLOC,CHECK-LARGE-ALLOC-%target-vendor -DWORD=i%target-ptrsize +// RUN: %target-swift-frontend -primary-file %s -O -emit-ir | %FileCheck %s --check-prefix=CHECK-LARGE-STACK-ALLOC -DWORD=i%target-ptrsize +// RUN: %target-swift-frontend -primary-file %s -O -emit-ir | %FileCheck %s --check-prefix=CHECK-LARGE-HEAP-ALLOC -DWORD=i%target-ptrsize @_silgen_name("blackHole") func blackHole(_ value: UnsafeMutableRawPointer?) -> Void @@ -14,13 +13,13 @@ func blackHole(_ value: UnsafeMutableRawPointer?) -> Void withUnsafeTemporaryAllocation(byteCount: 0x0FFF_FFFF, alignment: 1) { buffer in blackHole(buffer.baseAddress) } -// CHECK-LARGE-HEAP-ALLOC: [[HEAP_PTR_RAW:%[0-9]+]] = {{(tail )?}}call noalias i8* @swift_slowAlloc([[WORD]] 268435455, [[WORD]] -1) -// CHECK-LARGE-HEAP-ALLOC-NEXT: [[HEAP_PTR:%[0-9]+]] = ptrtoint i8* [[HEAP_PTR_RAW]] to [[WORD]] +// CHECK-LARGE-HEAP-ALLOC: [[HEAP_PTR_RAW:%[0-9]+]] = {{(tail )?}}call noalias ptr @swift_slowAlloc([[WORD]] 268435455, [[WORD]] -1) +// CHECK-LARGE-HEAP-ALLOC-NEXT: [[HEAP_PTR:%[0-9]+]] = ptrtoint ptr [[HEAP_PTR_RAW]] to [[WORD]] // CHECK-LARGE-HEAP-ALLOC-NEXT: {{(tail )?}}call swiftcc void @blackHole([[WORD]] [[HEAP_PTR]]) -// CHECK-LARGE-HEAP-ALLOC-NEXT: {{(tail )?}}call void @swift_slowDealloc(i8* [[HEAP_PTR_RAW]], [[WORD]] -1, [[WORD]] -1) +// CHECK-LARGE-HEAP-ALLOC-NEXT: {{(tail )?}}call void @swift_slowDealloc(ptr [[HEAP_PTR_RAW]], [[WORD]] -1, [[WORD]] -1) // CHECK-LARGE-STACK-ALLOC: [[STACK_PTR_RAW:%temp_alloc[0-9]*]] = alloca [268435455 x i8], align 1 -// CHECK-LARGE-STACK-ALLOC-NEXT: [[STACK_PTR:%[0-9]+]] = ptrtoint [268435455 x i8]* [[STACK_PTR_RAW]] to [[WORD]] +// CHECK-LARGE-STACK-ALLOC-NEXT: [[STACK_PTR:%[0-9]+]] = ptrtoint ptr [[STACK_PTR_RAW]] to [[WORD]] // CHECK-LARGE-STACK-ALLOC-NEXT: call swiftcc void @blackHole([[WORD]] [[STACK_PTR]]) // CHECK-LARGE-ALLOC-DAG: [[IS_SAFE:%[0-9]+]] = {{(tail )?}}call {{(zeroext )?}}i1 @swift_stdlib_isStackAllocationSafe([[WORD]] 268435455, [[WORD]] 1) diff --git a/test/IRGen/trivial-property-descriptors.swift b/test/IRGen/trivial-property-descriptors.swift index e9f1a4d1980e6..82b8395b2ead4 100644 --- a/test/IRGen/trivial-property-descriptors.swift +++ b/test/IRGen/trivial-property-descriptors.swift @@ -1,5 +1,4 @@ -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target x86_64-unknown-windows-msvc -parse-stdlib -module-name Swift -enable-library-evolution -S -emit-ir -o - %s | %FileCheck %s -// RUN: %swift -disable-legacy-type-info -target x86_64-unknown-windows-msvc -parse-stdlib -module-name Swift -enable-library-evolution -S -emit-ir -o - %s +// RUN: %swift -disable-legacy-type-info -target x86_64-unknown-windows-msvc -parse-stdlib -module-name Swift -enable-library-evolution -S -emit-ir -o - %s | %FileCheck %s public struct S {} extension S { @@ -7,5 +6,5 @@ extension S { public var j: () { return () } } -// CHECK: @"$ss1SV1jytvpMV" = dllexport alias { i32 }, { i32 }* @"$ss1SV1iytvpMV" +// CHECK: @"$ss1SV1jytvpMV" = dllexport alias { i32 }, ptr @"$ss1SV1iytvpMV" diff --git a/test/IRGen/tsan_coroutines.swift b/test/IRGen/tsan_coroutines.swift index 7c6e1bc44d03a..069ae1e9d0fff 100644 --- a/test/IRGen/tsan_coroutines.swift +++ b/test/IRGen/tsan_coroutines.swift @@ -1,7 +1,6 @@ // REQUIRES: tsan_runtime // This test case used to crash when tsan ran before co-routine lowering. -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -sanitize=thread %s | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir -sanitize=thread %s +// RUN: %target-swift-frontend -emit-ir -sanitize=thread %s | %FileCheck %s // TSan is only supported on 64 bit. // REQUIRES: PTRSIZE=64 @@ -24,7 +23,7 @@ extension Foobar { } // We used to crash emitting the subscript function. - // CHECK: define{{( dllexport| protected)?}} swiftcc { i8*, %T15tsan_coroutines1CC* } @"$s15tsan_coroutines6FoobarVyAA1CCAC5IndexVcir" + // CHECK: define{{( dllexport| protected)?}} swiftcc { ptr, ptr } @"$s15tsan_coroutines6FoobarVyAA1CCAC5IndexVcir" @_borrowed public subscript(position: Index) -> C { return things.values[position.myIndex] diff --git a/test/IRGen/tsan_instrumentation.sil b/test/IRGen/tsan_instrumentation.sil index a0ede13d9656c..bbb52b8a3b802 100644 --- a/test/IRGen/tsan_instrumentation.sil +++ b/test/IRGen/tsan_instrumentation.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend %s -emit-ir +// RUN: %target-swift-frontend %s -emit-ir | %FileCheck %s sil_stage canonical @@ -24,7 +23,7 @@ sil @$s20tsan_instrumentation11inoutAccessyyF : $@convention(thin) () -> () { bb0: %0 = global_addr @$s20tsan_instrumentation1gSiv : $*Int %1 = builtin "tsanInoutAccess"(%0 : $*Int) : $() -// CHECK: call void @__tsan_external_write(i8* bitcast ([[GLOBAL]]* @"$s20tsan_instrumentation1gSiv" to i8*), i8* null, i8* inttoptr ({{(i32|i64)}} 1 to i8*)) +// CHECK: call void @__tsan_external_write(ptr @"$s20tsan_instrumentation1gSiv", ptr null, ptr inttoptr ({{(i32|i64)}} 1 to ptr)) %2 = tuple () return %2 : $() diff --git a/test/IRGen/type_layout.swift b/test/IRGen/type_layout.swift index dfd5a5ec1a0d6..cb4472cba046a 100644 --- a/test/IRGen/type_layout.swift +++ b/test/IRGen/type_layout.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -emit-ir %s +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize class C {} @@ -23,97 +22,92 @@ struct FourInts { var x,y,z,w: Int32 } struct AlignedFourInts { var x: FourInts } // CHECK: @"$s11type_layout14TypeLayoutTestVMn" = hidden constant {{.*}} @"$s11type_layout14TypeLayoutTestVMP" -// CHECK: define internal %swift.type* @"$s11type_layout14TypeLayoutTestVMi" +// CHECK: define internal ptr @"$s11type_layout14TypeLayoutTestVMi" // CHECK: define internal swiftcc %swift.metadata_response @"$s11type_layout14TypeLayoutTestVMr" struct TypeLayoutTest { // CHECK: [[TUPLE_LAYOUT_M:%.*]] = alloca %swift.full_type_layout, // CHECK: [[TUPLE_LAYOUT_N:%.*]] = alloca %swift.full_type_layout, // CHECK: [[TUPLE_LAYOUT_O:%.*]] = alloca %swift.full_type_layout, - // CHECK: [[TUPLE_ELT_LAYOUTS_O:%.*]] = alloca i8**, [[INT]] 4, + // CHECK: [[TUPLE_ELT_LAYOUTS_O:%.*]] = alloca ptr, [[INT]] 4, // -- dynamic layout, projected from metadata - // CHECK: [[T0:%.*]] = call{{( tail)?}} swiftcc %swift.metadata_response @swift_checkMetadataState([[INT]] 319, %swift.type* %T) + // CHECK: [[T0:%.*]] = call{{( tail)?}} swiftcc %swift.metadata_response @swift_checkMetadataState([[INT]] 319, ptr %T) // CHECK: [[T_CHECKED:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK: [[T_STATUS:%.*]] = extractvalue %swift.metadata_response [[T0]], 1 // CHECK: [[T_OK:%.*]] = icmp ule [[INT]] [[T_STATUS]], 63 // CHECK: br i1 [[T_OK]], - // CHECK: [[T0:%.*]] = bitcast %swift.type* [[T_CHECKED]] to i8*** - // CHECK: [[T1:%.*]] = getelementptr inbounds i8**, i8*** [[T0]], {{i32|i64}} -1 - // CHECK: [[T_VALUE_WITNESSES:%.*]] = load i8**, i8*** [[T1]] - // CHECK: [[T_LAYOUT:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: store i8** [[T_LAYOUT]] + // CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[T_CHECKED]], {{i32|i64}} -1 + // CHECK: [[T_VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]] + // CHECK: [[T_LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: store ptr [[T_LAYOUT]] var z: T // -- native class, use standard NativeObject value witness - // CHECK: store i8** getelementptr inbounds (i8*, i8** @"$sBoWV", i32 8) + // CHECK: store ptr getelementptr inbounds (ptr, ptr @"$sBoWV", i32 8) var a: C // -- Single-element struct, shares layout of its field (Builtin.Int64) - // CHECK: store i8** getelementptr inbounds (i8*, i8** @"$sBi64_WV", i32 8) + // CHECK: store ptr getelementptr inbounds (ptr, ptr @"$sBi64_WV", i32 8) var c: SSing // -- Multi-element structs use open-coded layouts - // CHECK: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_16_8_0_pod to i8**) + // CHECK: store ptr @type_layout_16_8_0_pod var d: SMult - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_16_8_[[REF_XI:[0-9a-f]+]]_bt to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_4_[[REF_XI:[0-9a-f]+]]_bt to i8**) + // CHECK-64: store ptr @type_layout_16_8_[[REF_XI:[0-9a-f]+]]_bt + // CHECK-32: store ptr @type_layout_8_4_[[REF_XI:[0-9a-f]+]]_bt var e: SMult2 - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_16_8_[[REF_XI]]_bt to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_4_[[REF_XI]]_bt to i8**) + // CHECK-64: store ptr @type_layout_16_8_[[REF_XI]]_bt + // CHECK-32: store ptr @type_layout_8_4_[[REF_XI]]_bt var f: SMult3 // -- Single-case enum, shares layout of its field (Builtin.Int64) - // CHECK: store i8** getelementptr inbounds (i8*, i8** @"$sBi64_WV", i32 8) + // CHECK: store ptr getelementptr inbounds (ptr, ptr @"$sBi64_WV", i32 8) var g: ESing // -- Multi-case enum, open-coded layout - // CHECK: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_9_8_fe_pod to i8**) + // CHECK: store ptr @type_layout_9_8_fe_pod var h: EMult // -- Single-element generic struct, shares layout of its field (T) - // CHECK: [[T_LAYOUT:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: store i8** [[T_LAYOUT]] + // CHECK: [[T_LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: store ptr [[T_LAYOUT]] var i: GSing // -- Multi-element generic struct, need to derive from metadata - // CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s11type_layout5GMultVMa"([[INT]] 319, %swift.type* [[T_CHECKED]]) + // CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s11type_layout5GMultVMa"([[INT]] 319, ptr [[T_CHECKED]]) // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 // CHECK: [[METADATA_STATUS:%.*]] = extractvalue %swift.metadata_response [[TMP]], 1 // CHECK: [[METADATA_OK:%.*]] = icmp ule [[INT]] [[METADATA_STATUS]], 63 // CHECK: br i1 [[METADATA_OK]], - // CHECK: [[T0:%.*]] = bitcast %swift.type* [[METADATA]] to i8*** - // CHECK: [[T1:%.*]] = getelementptr inbounds i8**, i8*** [[T0]], {{i32|i64}} -1 - // CHECK: [[VALUE_WITNESSES:%.*]] = load i8**, i8*** [[T1]] - // CHECK: [[LAYOUT:%.*]] = getelementptr inbounds i8*, i8** [[VALUE_WITNESSES]], i32 8 - // CHECK: store i8** [[LAYOUT]] + // CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], {{i32|i64}} -1 + // CHECK: [[VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]] + // CHECK: [[LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[VALUE_WITNESSES]], i32 8 + // CHECK: store ptr [[LAYOUT]] var j: GMult // -- Common layout, reuse common value witness table layout - // CHECK: store i8** getelementptr (i8*, i8** @"$sBi32_WV", i32 8) + // CHECK: store ptr getelementptr (ptr, ptr @"$sBi32_WV", i32 8) var k: CommonLayout // -- Single-field aggregate with alignment - // CHECK: store i8** getelementptr (i8*, i8** @"$sBi128_WV", i32 8) + // CHECK: store ptr getelementptr (ptr, ptr @"$sBi128_WV", i32 8) var l: AlignedFourInts // -- Tuple with two elements - // CHECK: [[T_LAYOUT_1:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: [[T_LAYOUT_2:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: call swiftcc [[INT]] @swift_getTupleTypeLayout2(%swift.full_type_layout* [[TUPLE_LAYOUT_M]], i8** [[T_LAYOUT_1]], i8** [[T_LAYOUT_2]]) - // CHECK: [[T0:%.*]] = bitcast %swift.full_type_layout* [[TUPLE_LAYOUT_M]] to i8** - // CHECK: store i8** [[T0]] + // CHECK: [[T_LAYOUT_1:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: [[T_LAYOUT_2:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: call swiftcc [[INT]] @swift_getTupleTypeLayout2(ptr [[TUPLE_LAYOUT_M]], ptr [[T_LAYOUT_1]], ptr [[T_LAYOUT_2]]) + // CHECK: store ptr [[TUPLE_LAYOUT_M]] var m: (T, T) // -- Tuple with three elements - // CHECK: [[T_LAYOUT_1:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: [[T_LAYOUT_2:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: [[T_LAYOUT_3:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: call swiftcc { [[INT]], [[INT]] } @swift_getTupleTypeLayout3(%swift.full_type_layout* [[TUPLE_LAYOUT_N]], i8** [[T_LAYOUT_1]], i8** [[T_LAYOUT_2]], i8** [[T_LAYOUT_3]]) - // CHECK: [[T0:%.*]] = bitcast %swift.full_type_layout* [[TUPLE_LAYOUT_N]] to i8** - // CHECK: store i8** [[T0]] + // CHECK: [[T_LAYOUT_1:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: [[T_LAYOUT_2:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: [[T_LAYOUT_3:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: call swiftcc { [[INT]], [[INT]] } @swift_getTupleTypeLayout3(ptr [[TUPLE_LAYOUT_N]], ptr [[T_LAYOUT_1]], ptr [[T_LAYOUT_2]], ptr [[T_LAYOUT_3]]) + // CHECK: store ptr [[TUPLE_LAYOUT_N]] var n: (T, T, T) // -- Tuple with four elements - // CHECK: [[T_LAYOUT_1:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: store i8** [[T_LAYOUT_1]], i8*** [[TUPLE_ELT_LAYOUTS_O]], - // CHECK: [[T_LAYOUT_2:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: [[T0:%.*]] = getelementptr inbounds i8**, i8*** [[TUPLE_ELT_LAYOUTS_O]], i32 1 - // CHECK: store i8** [[T_LAYOUT_2]], i8*** [[T0]], - // CHECK: [[T_LAYOUT_3:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: [[T0:%.*]] = getelementptr inbounds i8**, i8*** [[TUPLE_ELT_LAYOUTS_O]], i32 2 - // CHECK: store i8** [[T_LAYOUT_3]], i8*** [[T0]], - // CHECK: [[T_LAYOUT_4:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: [[T0:%.*]] = getelementptr inbounds i8**, i8*** [[TUPLE_ELT_LAYOUTS_O]], i32 3 - // CHECK: store i8** [[T_LAYOUT_4]], i8*** [[T0]], - // CHECK: call swiftcc void @swift_getTupleTypeLayout(%swift.full_type_layout* [[TUPLE_LAYOUT_O]], i32* null, [[INT]] 4, i8*** [[TUPLE_ELT_LAYOUTS_O]]) - // CHECK: [[T0:%.*]] = bitcast %swift.full_type_layout* [[TUPLE_LAYOUT_O]] to i8** - // CHECK: store i8** [[T0]] + // CHECK: [[T_LAYOUT_1:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: store ptr [[T_LAYOUT_1]], ptr [[TUPLE_ELT_LAYOUTS_O]], + // CHECK: [[T_LAYOUT_2:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: [[T0:%.*]] = getelementptr inbounds ptr, ptr [[TUPLE_ELT_LAYOUTS_O]], i32 1 + // CHECK: store ptr [[T_LAYOUT_2]], ptr [[T0]], + // CHECK: [[T_LAYOUT_3:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: [[T0:%.*]] = getelementptr inbounds ptr, ptr [[TUPLE_ELT_LAYOUTS_O]], i32 2 + // CHECK: store ptr [[T_LAYOUT_3]], ptr [[T0]], + // CHECK: [[T_LAYOUT_4:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: [[T0:%.*]] = getelementptr inbounds ptr, ptr [[TUPLE_ELT_LAYOUTS_O]], i32 3 + // CHECK: store ptr [[T_LAYOUT_4]], ptr [[T0]], + // CHECK: call swiftcc void @swift_getTupleTypeLayout(ptr [[TUPLE_LAYOUT_O]], ptr null, [[INT]] 4, ptr [[TUPLE_ELT_LAYOUTS_O]]) + // CHECK: store ptr [[TUPLE_LAYOUT_O]] var o: (T, T, T, T) } diff --git a/test/IRGen/type_layout_objc.swift b/test/IRGen/type_layout_objc.swift index f18434602c5c5..fe9b357a45134 100644 --- a/test/IRGen/type_layout_objc.swift +++ b/test/IRGen/type_layout_objc.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %use_no_opaque_pointers -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize -// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir %s +// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize // REQUIRES: objc_interop import Foundation @@ -22,62 +21,60 @@ enum EMult { case X(Int64), Y(Int64) } struct CommonLayout { var x,y,z,w: Int8 } // CHECK: @"$s16type_layout_objc14TypeLayoutTestVMn" = hidden constant {{.*}} @"$s16type_layout_objc14TypeLayoutTestVMP" -// CHECK: define internal %swift.type* @"$s16type_layout_objc14TypeLayoutTestVMi" +// CHECK: define internal ptr @"$s16type_layout_objc14TypeLayoutTestVMi" // CHECK: define internal swiftcc %swift.metadata_response @"$s16type_layout_objc14TypeLayoutTestVMr" struct TypeLayoutTest { // -- dynamic layout, projected from metadata - // CHECK: [[T0:%.*]] = call{{( tail)?}} swiftcc %swift.metadata_response @swift_checkMetadataState([[INT]] 319, %swift.type* %T) + // CHECK: [[T0:%.*]] = call{{( tail)?}} swiftcc %swift.metadata_response @swift_checkMetadataState([[INT]] 319, ptr %T) // CHECK: [[T_CHECKED:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK: [[T_STATUS:%.*]] = extractvalue %swift.metadata_response [[T0]], 1 // CHECK: [[T_OK:%.*]] = icmp ule [[INT]] [[T_STATUS]], 63 // CHECK: br i1 [[T_OK]], - // CHECK: [[T0:%.*]] = bitcast %swift.type* [[T_CHECKED]] to i8*** - // CHECK: [[T1:%.*]] = getelementptr inbounds i8**, i8*** [[T0]], {{i32|i64}} -1 - // CHECK: [[T_VALUE_WITNESSES:%.*]] = load i8**, i8*** [[T1]] - // CHECK: [[T_LAYOUT:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: store i8** [[T_LAYOUT]] + // CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[T_CHECKED]], {{i32|i64}} -1 + // CHECK: [[T_VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]] + // CHECK: [[T_LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: store ptr [[T_LAYOUT]] var z: T // -- native class, use standard NativeObject value witness - // CHECK: store i8** getelementptr inbounds (i8*, i8** @"$sBoWV", i32 8) + // CHECK: store ptr getelementptr inbounds (ptr, ptr @"$sBoWV", i32 8) var a: C // -- ObjC class, use standard UnknownObject value witness - // CHECK: store i8** getelementptr inbounds (i8*, i8** @"$sBOWV", i32 8) + // CHECK: store ptr getelementptr inbounds (ptr, ptr @"$sBOWV", i32 8) var b: O // -- Single-element struct, shares layout of its field (Builtin.Int64) - // CHECK: store i8** getelementptr inbounds (i8*, i8** @"$sBi64_WV", i32 8) + // CHECK: store ptr getelementptr inbounds (ptr, ptr @"$sBi64_WV", i32 8) var c: SSing // -- Multi-element structs use open-coded layouts - // CHECK: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_16_8_0_pod to i8**) + // CHECK: store ptr @type_layout_16_8_0_pod var d: SMult - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_16_8_7fffffff_bt to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_4_1000_bt to i8**) + // CHECK-64: store ptr @type_layout_16_8_7fffffff_bt + // CHECK-32: store ptr @type_layout_8_4_1000_bt var e: SMult2 - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_16_8_7fffffff_bt to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_4_1000_bt to i8**) + // CHECK-64: store ptr @type_layout_16_8_7fffffff_bt + // CHECK-32: store ptr @type_layout_8_4_1000_bt var f: SMult3 // -- Single-case enum, shares layout of its field (Builtin.Int64) - // CHECK: store i8** getelementptr inbounds (i8*, i8** @"$sBi64_WV", i32 8) + // CHECK: store ptr getelementptr inbounds (ptr, ptr @"$sBi64_WV", i32 8) var g: ESing // -- Multi-case enum, open-coded layout - // CHECK: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_9_8_fe_pod to i8**) + // CHECK: store ptr @type_layout_9_8_fe_pod var h: EMult // -- Single-element generic struct, shares layout of its field (T) - // CHECK: [[T_LAYOUT:%.*]] = getelementptr inbounds i8*, i8** [[T_VALUE_WITNESSES]], i32 8 - // CHECK: store i8** [[T_LAYOUT]] + // CHECK: [[T_LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[T_VALUE_WITNESSES]], i32 8 + // CHECK: store ptr [[T_LAYOUT]] var i: GSing // -- Multi-element generic struct, need to derive from metadata - // CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s16type_layout_objc5GMultVMa"([[INT]] 319, %swift.type* [[T_CHECKED]]) + // CHECK: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$s16type_layout_objc5GMultVMa"([[INT]] 319, ptr [[T_CHECKED]]) // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0 // CHECK: [[METADATA_STATUS:%.*]] = extractvalue %swift.metadata_response [[TMP]], 1 // CHECK: [[METADATA_OK:%.*]] = icmp ule [[INT]] [[METADATA_STATUS]], 63 // CHECK: br i1 [[METADATA_OK]], - // CHECK: [[T0:%.*]] = bitcast %swift.type* [[METADATA]] to i8*** - // CHECK: [[T1:%.*]] = getelementptr inbounds i8**, i8*** [[T0]], {{i32|i64}} -1 - // CHECK: [[VALUE_WITNESSES:%.*]] = load i8**, i8*** [[T1]] - // CHECK: [[LAYOUT:%.*]] = getelementptr inbounds i8*, i8** [[VALUE_WITNESSES]], i32 8 - // CHECK: store i8** [[LAYOUT]] + // CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[METADATA]], {{i32|i64}} -1 + // CHECK: [[VALUE_WITNESSES:%.*]] = load ptr, ptr [[T1]] + // CHECK: [[LAYOUT:%.*]] = getelementptr inbounds ptr, ptr [[VALUE_WITNESSES]], i32 8 + // CHECK: store ptr [[LAYOUT]] var j: GMult // -- Common layout, reuse common value witness table layout - // CHECK: store i8** getelementptr (i8*, i8** @"$sBi32_WV", i32 8) + // CHECK: store ptr getelementptr (ptr, ptr @"$sBi32_WV", i32 8) var k: CommonLayout } diff --git a/test/IRGen/type_layout_reference_storage.swift b/test/IRGen/type_layout_reference_storage.swift index 7a7f6da201168..bf9dc3cbef177 100644 --- a/test/IRGen/type_layout_reference_storage.swift +++ b/test/IRGen/type_layout_reference_storage.swift @@ -1,47 +1,45 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s -enable-objc-interop | %FileCheck %s -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-objc-%target-ptrsize -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s -disable-objc-interop | %FileCheck %s -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-native-%target-ptrsize -// RUN: %target-swift-frontend -emit-ir %s -enable-objc-interop -// RUN: %target-swift-frontend -emit-ir %s -disable-objc-interop +// RUN: %target-swift-frontend -emit-ir %s -enable-objc-interop | %FileCheck %s -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-objc-%target-ptrsize +// RUN: %target-swift-frontend -emit-ir %s -disable-objc-interop | %FileCheck %s -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-native-%target-ptrsize class C {} protocol P: class {} protocol Q: class {} // CHECK: @"$s29type_layout_reference_storage26ReferenceStorageTypeLayoutVMn" = hidden constant {{.*}} @"$s29type_layout_reference_storage26ReferenceStorageTypeLayoutVMP" -// CHECK: define internal %swift.type* @"$s29type_layout_reference_storage26ReferenceStorageTypeLayoutVMi" +// CHECK: define internal ptr @"$s29type_layout_reference_storage26ReferenceStorageTypeLayoutVMi" struct ReferenceStorageTypeLayout { var z: T // -- Known-Swift-refcounted type - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_[[REF_XI:[0-9a-f][0-9a-f][0-9a-f]+]]_pod to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_[[REF_XI:[0-9a-f][0-9a-f][0-9a-f]+]]_pod to i8**) + // CHECK-64: store ptr @type_layout_8_8_[[REF_XI:[0-9a-f][0-9a-f][0-9a-f]+]]_pod + // CHECK-32: store ptr @type_layout_4_4_[[REF_XI:[0-9a-f][0-9a-f][0-9a-f]+]]_pod unowned(unsafe) var cu: C - // CHECK-native-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_[[REF_XI]]_bt to i8**) - // CHECK-objc-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_1_bt to i8**) - // CHECK-native-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_[[REF_XI]]_bt to i8**) - // CHECK-objc-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_1_bt to i8**) + // CHECK-native-64: store ptr @type_layout_8_8_[[REF_XI]]_bt + // CHECK-objc-64: store ptr @type_layout_8_8_1_bt + // CHECK-native-32: store ptr @type_layout_4_4_[[REF_XI]]_bt + // CHECK-objc-32: store ptr @type_layout_4_4_1_bt unowned(safe) var cs: C - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_0 to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_0 to i8**) + // CHECK-64: store ptr @type_layout_8_8_0 + // CHECK-32: store ptr @type_layout_4_4_0 weak var cwo: C? - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_0 to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_0 to i8**) + // CHECK-64: store ptr @type_layout_8_8_0 + // CHECK-32: store ptr @type_layout_4_4_0 weak var cwi: C! // -- Known-Swift-refcounted archetype - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_[[REF_XI]]_pod to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_[[REF_XI]]_pod to i8**) + // CHECK-64: store ptr @type_layout_8_8_[[REF_XI]]_pod + // CHECK-32: store ptr @type_layout_4_4_[[REF_XI]]_pod unowned(unsafe) var nu: Native - // CHECK-native-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_[[REF_XI]]_bt to i8**) - // CHECK-objc-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_1_bt to i8**) - // CHECK-native-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_[[REF_XI]]_bt to i8**) - // CHECK-objc-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_1_bt to i8**) + // CHECK-native-64: store ptr @type_layout_8_8_[[REF_XI]]_bt + // CHECK-objc-64: store ptr @type_layout_8_8_1_bt + // CHECK-native-32: store ptr @type_layout_4_4_[[REF_XI]]_bt + // CHECK-objc-32: store ptr @type_layout_4_4_1_bt unowned(safe) var nc: Native - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_0 to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_0 to i8**) + // CHECK-64: store ptr @type_layout_8_8_0 + // CHECK-32: store ptr @type_layout_4_4_0 weak var nwo: Native? - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_0 to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_0 to i8**) + // CHECK-64: store ptr @type_layout_8_8_0 + // CHECK-32: store ptr @type_layout_4_4_0 weak var nwi: Native! // -- Open-code layout for protocol types with witness tables. Note: @@ -49,81 +47,81 @@ struct ReferenceStorageTypeLayout { // when ObjC interop is disabled. // 2) 0x7fffffff is the max extra inhabitant count, but not all types in // all scenarios. - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_16_8_[[REF_XI]]_pod to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_4_[[REF_XI]]_pod to i8**) + // CHECK-64: store ptr @type_layout_16_8_[[REF_XI]]_pod + // CHECK-32: store ptr @type_layout_8_4_[[REF_XI]]_pod unowned(unsafe) var pu: P - // CHECK-native-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_16_8_[[REF_XI]]_bt to i8**) - // CHECK-objc-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_16_8_7fffffff to i8**) - // CHECK-native-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_4_[[REF_XI]]_bt to i8**) - // CHECK-objc-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_4_7fffffff to i8**) + // CHECK-native-64: store ptr @type_layout_16_8_[[REF_XI]]_bt + // CHECK-objc-64: store ptr @type_layout_16_8_7fffffff + // CHECK-native-32: store ptr @type_layout_8_4_[[REF_XI]]_bt + // CHECK-objc-32: store ptr @type_layout_8_4_7fffffff unowned(safe) var ps: P - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_16_8_7fffffff to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_4_7fffffff to i8**) + // CHECK-64: store ptr @type_layout_16_8_7fffffff + // CHECK-32: store ptr @type_layout_8_4_7fffffff weak var pwo: P? - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_16_8_7fffffff to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_4_7fffffff to i8**) + // CHECK-64: store ptr @type_layout_16_8_7fffffff + // CHECK-32: store ptr @type_layout_8_4_7fffffff weak var pwi: P! - // CHECK-native-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_24_8_[[REF_XI]]_bt to i8**) - // CHECK-objc-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_24_8_7fffffff to i8**) - // CHECK-native-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_12_4_[[REF_XI]]_bt to i8**) - // CHECK-objc-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_12_4_7fffffff to i8**) + // CHECK-native-64: store ptr @type_layout_24_8_[[REF_XI]]_bt + // CHECK-objc-64: store ptr @type_layout_24_8_7fffffff + // CHECK-native-32: store ptr @type_layout_12_4_[[REF_XI]]_bt + // CHECK-objc-32: store ptr @type_layout_12_4_7fffffff unowned(safe) var pqs: P & Q - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_24_8_[[REF_XI]]_pod to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_12_4_[[REF_XI]]_pod to i8**) + // CHECK-64: store ptr @type_layout_24_8_[[REF_XI]]_pod + // CHECK-32: store ptr @type_layout_12_4_[[REF_XI]]_pod unowned(unsafe) var pqu: P & Q - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_24_8_7fffffff to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_12_4_7fffffff to i8**) + // CHECK-64: store ptr @type_layout_24_8_7fffffff + // CHECK-32: store ptr @type_layout_12_4_7fffffff weak var pqwo: (P & Q)? - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_24_8_7fffffff to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_12_4_7fffffff to i8**) + // CHECK-64: store ptr @type_layout_24_8_7fffffff + // CHECK-32: store ptr @type_layout_12_4_7fffffff weak var pqwi: (P & Q)! - // CHECK-native-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_24_8_[[REF_XI]]_bt to i8**) - // CHECK-objc-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_24_8_7fffffff_bt to i8**) - // CHECK-native-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_12_4_[[REF_XI]]_bt to i8**) - // CHECK-objc-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_12_4_7fffffff_bt to i8**) + // CHECK-native-64: store ptr @type_layout_24_8_[[REF_XI]]_bt + // CHECK-objc-64: store ptr @type_layout_24_8_7fffffff_bt + // CHECK-native-32: store ptr @type_layout_12_4_[[REF_XI]]_bt + // CHECK-objc-32: store ptr @type_layout_12_4_7fffffff_bt unowned(safe) var pqcs: P & Q & C - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_24_8_[[REF_XI]]_pod to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_12_4_[[REF_XI]]_pod to i8**) + // CHECK-64: store ptr @type_layout_24_8_[[REF_XI]]_pod + // CHECK-32: store ptr @type_layout_12_4_[[REF_XI]]_pod unowned(unsafe) var pqcu: P & Q & C - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_24_8_7fffffff to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_12_4_7fffffff to i8**) + // CHECK-64: store ptr @type_layout_24_8_7fffffff + // CHECK-32: store ptr @type_layout_12_4_7fffffff weak var pqcwo: (P & Q & C)? - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_24_8_7fffffff to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_12_4_7fffffff to i8**) + // CHECK-64: store ptr @type_layout_24_8_7fffffff + // CHECK-32: store ptr @type_layout_12_4_7fffffff weak var pqcwi: (P & Q & C)! // -- Unknown-refcounted existential without witness tables. - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_[[REF_XI]]_pod to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_[[REF_XI]]_pod to i8**) + // CHECK-64: store ptr @type_layout_8_8_[[REF_XI]]_pod + // CHECK-32: store ptr @type_layout_4_4_[[REF_XI]]_pod unowned(unsafe) var aou: AnyObject - // CHECK-native-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_[[REF_XI]]_bt to i8**) - // CHECK-objc-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_1 to i8**) - // CHECK-native-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_[[REF_XI]]_bt to i8**) - // CHECK-objc-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_1 to i8**) + // CHECK-native-64: store ptr @type_layout_8_8_[[REF_XI]]_bt + // CHECK-objc-64: store ptr @type_layout_8_8_1 + // CHECK-native-32: store ptr @type_layout_4_4_[[REF_XI]]_bt + // CHECK-objc-32: store ptr @type_layout_4_4_1 unowned(safe) var aos: AnyObject - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_0 to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_0 to i8**) + // CHECK-64: store ptr @type_layout_8_8_0 + // CHECK-32: store ptr @type_layout_4_4_0 weak var aowo: AnyObject? - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_0 to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_0 to i8**) + // CHECK-64: store ptr @type_layout_8_8_0 + // CHECK-32: store ptr @type_layout_4_4_0 weak var aowi: AnyObject! // -- Unknown-refcounted archetype - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_[[REF_XI]]_pod to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_[[REF_XI]]_pod to i8**) + // CHECK-64: store ptr @type_layout_8_8_[[REF_XI]]_pod + // CHECK-32: store ptr @type_layout_4_4_[[REF_XI]]_pod unowned(unsafe) var uu: Unknown - // CHECK-native-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_[[REF_XI]]_bt to i8**) - // CHECK-objc-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_1 to i8**) - // CHECK-native-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_[[REF_XI]]_bt to i8**) - // CHECK-objc-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_1 to i8**) + // CHECK-native-64: store ptr @type_layout_8_8_[[REF_XI]]_bt + // CHECK-objc-64: store ptr @type_layout_8_8_1 + // CHECK-native-32: store ptr @type_layout_4_4_[[REF_XI]]_bt + // CHECK-objc-32: store ptr @type_layout_4_4_1 unowned(safe) var us: Unknown - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_0 to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_0 to i8**) + // CHECK-64: store ptr @type_layout_8_8_0 + // CHECK-32: store ptr @type_layout_4_4_0 weak var uwo: Unknown? - // CHECK-64: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_8_8_0 to i8**) - // CHECK-32: store i8** bitcast ({ [[INT]], [[INT]], i32, i32 }* @type_layout_4_4_0 to i8**) + // CHECK-64: store ptr @type_layout_8_8_0 + // CHECK-32: store ptr @type_layout_4_4_0 weak var uwi: Unknown! } diff --git a/test/IRGen/typelayout_based_value_operation.sil b/test/IRGen/typelayout_based_value_operation.sil index 16491e2fb3b47..8cdc7c544ec0c 100644 --- a/test/IRGen/typelayout_based_value_operation.sil +++ b/test/IRGen/typelayout_based_value_operation.sil @@ -1,7 +1,5 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -enable-type-layout %s -emit-ir -sil-verify-all | %FileCheck %s -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-type-layout %s -emit-ir -sil-verify-all | %FileCheck %s --check-prefix=NOTYPELAYOUT -// RUN: %target-swift-frontend -enable-type-layout %s -emit-ir -sil-verify-all -// RUN: %target-swift-frontend -disable-type-layout %s -emit-ir -sil-verify-all +// RUN: %target-swift-frontend -enable-type-layout %s -emit-ir -sil-verify-all | %FileCheck %s +// RUN: %target-swift-frontend -disable-type-layout %s -emit-ir -sil-verify-all | %FileCheck %s --check-prefix=NOTYPELAYOUT sil_stage canonical import Builtin @@ -31,31 +29,31 @@ entry(%arg : $*A): } // CHECK-LABEL: define{{.*}} void @testValue( -// CHECK: call %T32typelayout_based_value_operation1AVyAA1CCG* @"$s32typelayout_based_value_operation1AVyAA1CCGWOc"( -// CHECK: call %T32typelayout_based_value_operation1AVyAA1CCG* @"$s32typelayout_based_value_operation1AVyAA1CCGWOh"( -// CHECK: call %T32typelayout_based_value_operation1AVyAA1CCG* @"$s32typelayout_based_value_operation1AVyAA1CCGWOh"( +// CHECK: call ptr @"$s32typelayout_based_value_operation1AVyAA1CCGWOc"( +// CHECK: call ptr @"$s32typelayout_based_value_operation1AVyAA1CCGWOh"( +// CHECK: call ptr @"$s32typelayout_based_value_operation1AVyAA1CCGWOh"( // CHECK: } -// CHECK-LABEL: define{{.*}} %T32typelayout_based_value_operation1AVyAA1CCG* @"$s32typelayout_based_value_operation1AVyAA1CCGWOc"( -// CHECK: call %swift.type* @__swift_instantiateConcreteTypeFromMangledName +// CHECK-LABEL: define{{.*}} ptr @"$s32typelayout_based_value_operation1AVyAA1CCGWOc"( +// CHECK: call ptr @__swift_instantiateConcreteTypeFromMangledName // CHECK: load -// CHECK: call %swift.opaque* %{{.*}}(%swift.opaque* noalias {{.*}}, %swift.type* {{.*}}) +// CHECK: call ptr %{{.*}}(ptr noalias {{.*}}, ptr {{.*}}) // CHECK: } -// CHECK-LABEL: define{{.*}} %T32typelayout_based_value_operation1AVyAA1CCG* @"$s32typelayout_based_value_operation1AVyAA1CCGWOh"( -// CHECK: call %swift.type* @__swift_instantiateConcreteTypeFromMangledName +// CHECK-LABEL: define{{.*}} ptr @"$s32typelayout_based_value_operation1AVyAA1CCGWOh"( +// CHECK: call ptr @__swift_instantiateConcreteTypeFromMangledName // CHECK: load -// CHECK: call void %{{.*}}(%swift.opaque* noalias {{.*}}, %swift.type* {{.*}}) +// CHECK: call void %{{.*}}(ptr noalias {{.*}}, ptr {{.*}}) // CHECK: } -// NOTYPELAYOUT-LABEL: define{{.*}} %T32typelayout_based_value_operation1AVyAA1CCG* @"$s32typelayout_based_value_operation1AVyAA1CCGWOc"( +// NOTYPELAYOUT-LABEL: define{{.*}} ptr @"$s32typelayout_based_value_operation1AVyAA1CCGWOc"( // NOTYPELAYOUT: swift_retain // NOTYPELAYOUT: swift_retain // NOTYPELAYOUT: swift_retain // NOTYPELAYOUT: swift_retain // CHECK: } -// NOTYPELAYOUT-LABEL: define{{.*}} %T32typelayout_based_value_operation1AVyAA1CCG* @"$s32typelayout_based_value_operation1AVyAA1CCGWOh"( +// NOTYPELAYOUT-LABEL: define{{.*}} ptr @"$s32typelayout_based_value_operation1AVyAA1CCGWOh"( // NOTYPELAYOUT: swift_release // NOTYPELAYOUT: swift_release // NOTYPELAYOUT: swift_release diff --git a/test/IRGen/unexploded-calls.swift b/test/IRGen/unexploded-calls.swift index dac8f593a6ff4..3d64fcfbbb19e 100644 --- a/test/IRGen/unexploded-calls.swift +++ b/test/IRGen/unexploded-calls.swift @@ -1,6 +1,6 @@ -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target thumbv7-unknown-windows-msvc -parse-stdlib -parse-as-library -I %S/Inputs/usr/include -module-name Swift -S -emit-ir -o - %s | %FileCheck %s -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target thumbv7-unknown-linux-gnueabihf -parse-stdlib -parse-as-library -I %S/Inputs/usr/include -module-name Swift -S -emit-ir -o - %s | %FileCheck %s -// RUN: %swift %use_no_opaque_pointers -disable-legacy-type-info -target thumbv7-unknown-linux-gnueabi -Xcc -mfloat-abi=hard -parse-stdlib -parse-as-library -I %S/Inputs/usr/include -module-name Swift -S -emit-ir -o - %s | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target thumbv7-unknown-windows-msvc -parse-stdlib -parse-as-library -I %S/Inputs/usr/include -module-name Swift -S -emit-ir -o - %s | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target thumbv7-unknown-linux-gnueabihf -parse-stdlib -parse-as-library -I %S/Inputs/usr/include -module-name Swift -S -emit-ir -o - %s | %FileCheck %s +// RUN: %swift -disable-legacy-type-info -target thumbv7-unknown-linux-gnueabi -Xcc -mfloat-abi=hard -parse-stdlib -parse-as-library -I %S/Inputs/usr/include -module-name Swift -S -emit-ir -o - %s | %FileCheck %s // REQUIRES: CODEGENERATOR=ARM @@ -21,15 +21,13 @@ public func g(_ s : S) { // CHECK: entry: // CHECK: alloca // CHECK: [[ALLOCA:%[-._0-9a-zA-Z]+]] = alloca %TSo1SV, align 4 -// CHECK: %{{.*}} = bitcast %TSo1SV* [[ALLOCA]] to i8* -// CHECK: [[ALLOCA]].f = getelementptr inbounds %TSo1SV, %TSo1SV* [[ALLOCA]], i32 0, i32 0 -// CHECK: [[ALLOCA]].f._value = getelementptr inbounds %TSf, %TSf* [[ALLOCA]].f, i32 0, i32 0 -// CHECK: store float %0, float* [[ALLOCA]].f._value, align 4 -// CHECK: [[ALLOCA]].g = getelementptr inbounds %TSo1SV, %TSo1SV* [[ALLOCA]], i32 0, i32 1 -// CHECK: [[ALLOCA]].g._value = getelementptr inbounds %TSf, %TSf* [[ALLOCA]].g, i32 0, i32 0 -// CHECK: store float %1, float* [[ALLOCA]].g._value, align 4 -// CHECK: %[[BITCAST:.*]] = bitcast %TSo1SV* [[ALLOCA]] to %struct.S* -// CHECK: %[[LOAD:.*]] = load %struct.S, %struct.S* %[[BITCAST]], align 4 +// CHECK: [[ALLOCA]].f = getelementptr inbounds %TSo1SV, ptr [[ALLOCA]], i32 0, i32 0 +// CHECK: [[ALLOCA]].f._value = getelementptr inbounds %TSf, ptr [[ALLOCA]].f, i32 0, i32 0 +// CHECK: store float %0, ptr [[ALLOCA]].f._value, align 4 +// CHECK: [[ALLOCA]].g = getelementptr inbounds %TSo1SV, ptr [[ALLOCA]], i32 0, i32 1 +// CHECK: [[ALLOCA]].g._value = getelementptr inbounds %TSf, ptr [[ALLOCA]].g, i32 0, i32 0 +// CHECK: store float %1, ptr [[ALLOCA]].g._value, align 4 +// CHECK: %[[LOAD:.*]] = load %struct.S, ptr [[ALLOCA]], align 4 // CHECK: call void @f(%struct.S %[[LOAD]]) // CHECK: } diff --git a/test/IRGen/unmanaged_objc_throw_func.swift b/test/IRGen/unmanaged_objc_throw_func.swift index 3b68333f9c210..123c150e1cb66 100644 --- a/test/IRGen/unmanaged_objc_throw_func.swift +++ b/test/IRGen/unmanaged_objc_throw_func.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -enable-copy-propagation -enable-lexical-lifetimes=false %s | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir -enable-copy-propagation -enable-lexical-lifetimes=false %s +// RUN: %target-swift-frontend -emit-ir -enable-copy-propagation -enable-lexical-lifetimes=false %s | %FileCheck %s // REQUIRES: objc_interop // REQUIRES: optimized_stdlib @@ -11,57 +10,53 @@ import Foundation func returnUnmanagedCFArray() throws -> Unmanaged } -// CHECK-LABEL: define hidden swiftcc %TSo10CFArrayRefa* @"$s25unmanaged_objc_throw_func1CC22returnUnmanagedCFArrays0F0VySo0G3RefaGyKF" +// CHECK-LABEL: define hidden swiftcc ptr @"$s25unmanaged_objc_throw_func1CC22returnUnmanagedCFArrays0F0VySo0G3RefaGyKF" @objc class C: NSObject, P { func returnUnmanagedCFArray() throws -> Unmanaged { - // CHECK: %[[T0:.+]] = call swiftcc { %swift.bridge*, i8* } @"$ss27_allocateUninitializedArrayySayxG_BptBwlF"(i{{32|64}} 1, %swift.type* @"$sSiN") - // CHECK-NEXT: %[[T1:.+]] = extractvalue { %swift.bridge*, i8* } %[[T0]], 0 - // CHECK-NEXT: %[[T2:.+]] = extractvalue { %swift.bridge*, i8* } %[[T0]], 1 - // CHECK-NEXT: %[[T3:.+]] = bitcast i8* %[[T2]] to %TSi* - // CHECK-NEXT: %._value = getelementptr inbounds %TSi, %TSi* %[[T3]], i32 0, i32 0 - // CHECK: %[[T7:.+]] = call swiftcc %swift.bridge* @"$ss27_finalizeUninitializedArrayySayxGABnlF"(%swift.bridge* %[[T1]], %swift.type* @"$sSiN") - // CHECK: %[[T4:.+]] = call swiftcc %TSo7NSArrayC* @"$sSa10FoundationE19_bridgeToObjectiveCSo7NSArrayCyF"(%swift.bridge* %[[T7]], %swift.type* @"$sSiN") - // CHECK-NEXT: %[[T5:.+]] = bitcast %TSo7NSArrayC* %[[T4]] to %TSo10CFArrayRefa* - // CHECK-NEXT: store %TSo10CFArrayRefa* %[[T5]] - // CHECK-NEXT: call void @swift_bridgeObjectRelease(%swift.bridge* %{{[0-9]+}}) #{{[0-9]+}} - // CHECK-NEXT: %[[T6:.+]] = bitcast %TSo10CFArrayRefa* %[[T5]] to i8* - // CHECK-NEXT: call void @llvm.objc.release(i8* %[[T6]]) - // CHECK-NEXT: ret %TSo10CFArrayRefa* %[[T5]] + // CHECK: %[[T0:.+]] = call swiftcc { ptr, ptr } @"$ss27_allocateUninitializedArrayySayxG_BptBwlF"(i{{32|64}} 1, ptr @"$sSiN") + // CHECK-NEXT: %[[T1:.+]] = extractvalue { ptr, ptr } %[[T0]], 0 + // CHECK-NEXT: %[[T2:.+]] = extractvalue { ptr, ptr } %[[T0]], 1 + // CHECK-NEXT: %._value = getelementptr inbounds %TSi, ptr %[[T2]], i32 0, i32 0 + // CHECK: %[[T7:.+]] = call swiftcc ptr @"$ss27_finalizeUninitializedArrayySayxGABnlF"(ptr %[[T1]], ptr @"$sSiN") + // CHECK: %[[T4:.+]] = call swiftcc ptr @"$sSa10FoundationE19_bridgeToObjectiveCSo7NSArrayCyF"(ptr %[[T7]], ptr @"$sSiN") + // CHECK-NEXT: store ptr %[[T4]] + // CHECK-NEXT: call void @swift_bridgeObjectRelease(ptr %{{[0-9]+}}) #{{[0-9]+}} + // CHECK-NEXT: call void @llvm.objc.release(ptr %[[T4]]) + // CHECK-NEXT: ret ptr %[[T4]] let arr = [1] as CFArray return Unmanaged.passUnretained(arr) } } -// CHECK: %[[T0:.+]] = call swiftcc %TSo10CFArrayRefa* @"$s25unmanaged_objc_throw_func1CC22returnUnmanagedCFArrays0F0VySo0G3RefaGyKF" -// CHECK-NEXT: %[[T2:.+]] = load %swift.error*, %swift.error** %swifterror, align {{[0-9]+}} -// CHECK-NEXT: %[[T3:.+]] = icmp ne %swift.error* %[[T2]], null +// CHECK: %[[T0:.+]] = call swiftcc ptr @"$s25unmanaged_objc_throw_func1CC22returnUnmanagedCFArrays0F0VySo0G3RefaGyKF" +// CHECK-NEXT: %[[T2:.+]] = load ptr, ptr %swifterror, align {{[0-9]+}} +// CHECK-NEXT: %[[T3:.+]] = icmp ne ptr %[[T2]], null // CHECK-NEXT: br i1 %[[T3]], label %[[L1:.+]], label %[[L2:.+]] // CHECK: [[L2]]: ; preds = %entry -// CHECK-NEXT: %[[T4:.+]] = phi %TSo10CFArrayRefa* [ %[[T0]], %entry ] -// CHECK-NEXT: %[[T5:.+]] = ptrtoint %TSo10CFArrayRefa* %[[T4]] to i{{32|64}} +// CHECK-NEXT: %[[T4:.+]] = phi ptr [ %[[T0]], %entry ] +// CHECK-NEXT: %[[T5:.+]] = ptrtoint ptr %[[T4]] to i{{32|64}} // CHECK-NEXT: br label %[[L3:.+]] // CHECK: [[L1]]: ; preds = %entry -// CHECK-NEXT: %[[T6:.+]] = phi %swift.error* [ %[[T2]], %entry ] -// CHECK-NEXT: store %swift.error* null, %swift.error** %swifterror, align {{[0-9]+}} +// CHECK-NEXT: %[[T6:.+]] = phi ptr [ %[[T2]], %entry ] +// CHECK-NEXT: store ptr null, ptr %swifterror, align {{[0-9]+}} // CHECK-NEXT: %[[T7:.+]] = icmp eq i{{32|64}} %{{.+}}, 0 // CHECK-NEXT: br i1 %[[T7]], label %[[L4:.+]], label %[[L5:.+]] // CHECK: [[L5]]: ; preds = %[[L1]] -// CHECK-NEXT: %[[T8:.+]] = inttoptr i{{32|64}} %{{.+}} to i8* +// CHECK-NEXT: %[[T8:.+]] = inttoptr i{{32|64}} %{{.+}} to ptr // CHECK-NEXT: br label %[[L6:.+]] // CHECK: [[L6]]: ; preds = %[[L5]] -// CHECK-NEXT: %[[T9:.+]] = phi i8* [ %[[T8]], %[[L5]] ] -// CHECK-NEXT: %[[T10:.+]] = call swiftcc %TSo7NSErrorC* @"$s10Foundation22_convertErrorToNSErrorySo0E0Cs0C0_pF"(%swift.error* %[[T6]]) #{{[0-9]+}} -// CHECK: call swiftcc void @"$sSA7pointeexvs"(%swift.opaque* noalias nocapture %{{.+}}, i8* %[[T9]], %swift.type* %{{.+}}) #{{[0-9]+}} -// CHECK-NEXT: %[[T11:.+]] = bitcast %TSo7NSErrorCSg* %{{.+}} to i8* -// CHECK: call void @swift_errorRelease(%swift.error* %[[T6]]) #{{[0-9]+}} +// CHECK-NEXT: %[[T9:.+]] = phi ptr [ %[[T8]], %[[L5]] ] +// CHECK-NEXT: %[[T10:.+]] = call swiftcc ptr @"$s10Foundation22_convertErrorToNSErrorySo0E0Cs0C0_pF"(ptr %[[T6]]) #{{[0-9]+}} +// CHECK: call swiftcc void @"$sSA7pointeexvs"(ptr noalias nocapture %{{.+}}, ptr %[[T9]], ptr %{{.+}}) #{{[0-9]+}} +// CHECK: call void @swift_errorRelease(ptr %[[T6]]) #{{[0-9]+}} // CHECK-NEXT: br label %[[L7:.+]] // CHECK: [[L4]]: ; preds = %[[L1]] -// CHECK-NEXT: call void @swift_errorRelease(%swift.error* %[[T6]]) #{{[0-9]+}} +// CHECK-NEXT: call void @swift_errorRelease(ptr %[[T6]]) #{{[0-9]+}} // CHECK-NEXT: br label %[[L7]] // CHECK: [[L7]]: ; preds = %[[L6]], %[[L4]] @@ -69,7 +64,6 @@ import Foundation // CHECK: [[L3]]: ; preds = %[[L2]], %[[L7]] // CHECK-NEXT: %[[T12:.+]] = phi i{{32|64}} [ 0, %[[L7]] ], [ %[[T5]], %[[L2]] ] -// CHECK-NEXT: %[[T13:.+]] = bitcast %T25unmanaged_objc_throw_func1CC* %{{.+}} to i8* -// CHECK-NEXT: call void @llvm.objc.release(i8* %[[T13]]) -// CHECK-NEXT: %[[T14:.+]] = inttoptr i{{32|64}} %[[T12]] to %struct.__CFArray* -// CHECK-NEXT: ret %struct.__CFArray* %[[T14]] +// CHECK-NEXT: call void @llvm.objc.release(ptr %{{.+}}) +// CHECK-NEXT: %[[T14:.+]] = inttoptr i{{32|64}} %[[T12]] to ptr +// CHECK-NEXT: ret ptr %[[T14]] diff --git a/test/IRGen/variadic_generic_fulfillments.sil b/test/IRGen/variadic_generic_fulfillments.sil index 85478917f28e7..87c686e1d23b9 100644 --- a/test/IRGen/variadic_generic_fulfillments.sil +++ b/test/IRGen/variadic_generic_fulfillments.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -primary-file %s | %IRGenFileCheck %s -// RUN: %target-swift-frontend -emit-ir -primary-file %s +// RUN: %target-swift-frontend -emit-ir -primary-file %s | %IRGenFileCheck %s import Builtin import Swift @@ -12,39 +11,34 @@ struct D {} sil @use_metadata : $ () -> () -// CHECK-LABEL: define{{.*}} void @test_simple_fulfillment(%swift.type* %0) +// CHECK-LABEL: define{{.*}} void @test_simple_fulfillment(ptr %0) sil @test_simple_fulfillment : $ (@thick A.Type) -> () { bb0(%0: $@thick A.Type): %use_metadata = function_ref @use_metadata : $@convention(thin) () -> () - // CHECK: [[T0:%.*]] = bitcast %swift.type* %0 to [[INT]]* - // CHECK: [[T1:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[T0]], [[INT]] 2 - // CHECK: [[COUNT:%.*]] = load [[INT]], [[INT]]* [[T1]], align - // CHECK: [[T0:%.*]] = bitcast %swift.type* %0 to %swift.type*** - // CHECK: [[T1:%.*]] = getelementptr inbounds %swift.type**, %swift.type*** [[T0]], [[INT]] 3 - // CHECK: [[PACK:%.*]] = load %swift.type**, %swift.type*** [[T1]], align - // CHECK: call swiftcc %swift.metadata_response @"$s29variadic_generic_fulfillments1BVMa"([[INT]] 0, [[INT]] [[COUNT]], %swift.type** [[PACK]]) + // CHECK: [[T1:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] 2 + // CHECK: [[COUNT:%.*]] = load [[INT]], ptr [[T1]], align + // CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr %0, [[INT]] 3 + // CHECK: [[PACK:%.*]] = load ptr, ptr [[T1]], align + // CHECK: call swiftcc %swift.metadata_response @"$s29variadic_generic_fulfillments1BVMa"([[INT]] 0, [[INT]] [[COUNT]], ptr [[PACK]]) apply %use_metadata>() : $@convention(thin) () -> () %ret = tuple () return %ret : $() } -// CHECK-LABEL: define{{.*}} void @test_simple_fulfillment_constrained(%swift.type* %0) +// CHECK-LABEL: define{{.*}} void @test_simple_fulfillment_constrained(ptr %0) sil @test_simple_fulfillment_constrained : $ (@thick C.Type) -> () { bb0(%0: $@thick C.Type): %use_metadata = function_ref @use_metadata : $@convention(thin) () -> () - // CHECK: [[T0:%.*]] = bitcast %swift.type* %0 to [[INT]]* - // CHECK: [[T1:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[T0]], [[INT]] 2 - // CHECK: [[COUNT:%.*]] = load [[INT]], [[INT]]* [[T1]], align - // CHECK: [[T0:%.*]] = bitcast %swift.type* %0 to %swift.type*** - // CHECK: [[T1:%.*]] = getelementptr inbounds %swift.type**, %swift.type*** [[T0]], [[INT]] 3 - // CHECK: [[PACK:%.*]] = load %swift.type**, %swift.type*** [[T1]], align - // CHECK: [[T0:%.*]] = bitcast %swift.type* %0 to i8**** - // CHECK: [[T1:%.*]] = getelementptr inbounds i8***, i8**** [[T0]], [[INT]] 4 - // CHECK: [[WTABLE_PACK:%.*]] = load i8***, i8**** [[T1]], align - // CHECK: call swiftcc %swift.metadata_response @"$s29variadic_generic_fulfillments1DVMa"([[INT]] 0, [[INT]] [[COUNT]], %swift.type** [[PACK]], i8*** [[WTABLE_PACK]]) + // CHECK: [[T1:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] 2 + // CHECK: [[COUNT:%.*]] = load [[INT]], ptr [[T1]], align + // CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr %0, [[INT]] 3 + // CHECK: [[PACK:%.*]] = load ptr, ptr [[T1]], align + // CHECK: [[T1:%.*]] = getelementptr inbounds ptr, ptr %0, [[INT]] 4 + // CHECK: [[WTABLE_PACK:%.*]] = load ptr, ptr [[T1]], align + // CHECK: call swiftcc %swift.metadata_response @"$s29variadic_generic_fulfillments1DVMa"([[INT]] 0, [[INT]] [[COUNT]], ptr [[PACK]], ptr [[WTABLE_PACK]]) apply %use_metadata>() : $@convention(thin) () -> () %ret = tuple () diff --git a/test/IRGen/variadic_generic_functions.swift b/test/IRGen/variadic_generic_functions.swift index 77748080c6ad3..3bc13718c7b33 100644 --- a/test/IRGen/variadic_generic_functions.swift +++ b/test/IRGen/variadic_generic_functions.swift @@ -1,19 +1,18 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -primary-file %s | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir -primary-file %s +// RUN: %target-swift-frontend -emit-ir -primary-file %s | %FileCheck %s // REQUIRES: PTRSIZE=64 -// CHECK-LABEL: define hidden swiftcc void @"$s26variadic_generic_functions2f11tyxxQp_tRvzlF"(%swift.opaque** noalias nocapture %0, i64 %1, %swift.type** %"each T") +// CHECK-LABEL: define hidden swiftcc void @"$s26variadic_generic_functions2f11tyxxQp_tRvzlF"(ptr noalias nocapture %0, i64 %1, ptr %"each T") func f1(t: repeat each T) {} -// CHECK-LABEL: define hidden swiftcc void @"$s26variadic_generic_functions2f21t1uyxxQp_q_q_QptRvzRv_r0_lF"(%swift.opaque** noalias nocapture %0, %swift.opaque** noalias nocapture %1, i64 %2, i64 %3, %swift.type** %"each T", %swift.type** %"each U") +// CHECK-LABEL: define hidden swiftcc void @"$s26variadic_generic_functions2f21t1uyxxQp_q_q_QptRvzRv_r0_lF"(ptr noalias nocapture %0, ptr noalias nocapture %1, i64 %2, i64 %3, ptr %"each T", ptr %"each U") func f2(t: repeat each T, u: repeat each U) {} -// CHECK-LABEL: define hidden swiftcc void @"$s26variadic_generic_functions2f31t1uyxxQp_q_xQptRvzRv_q_Rhzr0_lF"(%swift.opaque** noalias nocapture %0, %swift.opaque** noalias nocapture %1, i64 %2, %swift.type** %"each T", %swift.type** %"each U") +// CHECK-LABEL: define hidden swiftcc void @"$s26variadic_generic_functions2f31t1uyxxQp_q_xQptRvzRv_q_Rhzr0_lF"(ptr noalias nocapture %0, ptr noalias nocapture %1, i64 %2, ptr %"each T", ptr %"each U") func f3(t: repeat each T, u: repeat each U) where (repeat (each T, each U)): Any {} protocol P {} -// CHECK-LABEL: define {{.*}}void @f4(%swift.opaque** noalias nocapture %0, i64 %1, %swift.type** %"each T", i8*** %"each T.P") +// CHECK-LABEL: define {{.*}}void @f4(ptr noalias nocapture %0, i64 %1, ptr %"each T", ptr %"each T.P") @_silgen_name("f4") func f4(t: repeat each T) {} diff --git a/test/IRGen/variadic_generic_outlining.sil b/test/IRGen/variadic_generic_outlining.sil index dafc796f3c60a..a5d66839e2764 100644 --- a/test/IRGen/variadic_generic_outlining.sil +++ b/test/IRGen/variadic_generic_outlining.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -primary-file %s | %IRGenFileCheck %s -// RUN: %target-swift-frontend -emit-ir -primary-file %s +// RUN: %target-swift-frontend -emit-ir -primary-file %s | %IRGenFileCheck %s import Builtin import Swift @@ -12,17 +11,16 @@ struct Wrapper { // an opened element type. // // CHECK-LABEL: define{{.*}}void @test_outlining -// CHECK: [[PACK_ADDR_FOR_DEBUGINFO:%.*]] = ptrtoint %swift.type** %"each T" to [[INT]] -// CHECK: [[PACK_ADDR:%.*]] = ptrtoint %swift.type** %"each T" to [[INT]] +// CHECK: [[PACK_ADDR_FOR_DEBUGINFO:%.*]] = ptrtoint ptr %"each T" to [[INT]] +// CHECK: [[PACK_ADDR:%.*]] = ptrtoint ptr %"each T" to [[INT]] // CHECK-NEXT: [[PACK_ADDR2:%.*]] = and [[INT]] [[PACK_ADDR]], -2 -// CHECK-NEXT: [[PACK:%.*]] = inttoptr [[INT]] [[PACK_ADDR2]] to %swift.type** -// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[PACK]], [[INT]] -// CHECK-NEXT: [[ELT_TYPE:%.*]] = load %swift.type*, %swift.type** [[T0]], align +// CHECK-NEXT: [[PACK:%.*]] = inttoptr [[INT]] [[PACK_ADDR2]] to ptr +// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds ptr, ptr [[PACK]], [[INT]] +// CHECK-NEXT: [[ELT_TYPE:%.*]] = load ptr, ptr [[T0]], align // CHECK: [[WRAPPER_RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s26variadic_generic_outlining7WrapperVMa" // CHECK-NEXT: [[WRAPPER_TYPE:%.*]] = extractvalue %swift.metadata_response [[WRAPPER_RESPONSE]] // Test that we do the copy through the VWT for the element type. -// CHECK-NEXT: [[T0:%.*]] = bitcast %swift.type* [[WRAPPER_TYPE]] to i8*** -// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds i8**, i8*** [[T0]], [[INT]] -1 +// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds ptr, ptr [[WRAPPER_TYPE]], [[INT]] -1 sil hidden @test_outlining : $@convention(thin) (@pack_guaranteed Pack{repeat Wrapper}) -> @pack_out Pack{repeat Wrapper} { bb0(%0 : $*Pack{repeat Wrapper}, %1 : $*Pack{repeat Wrapper}): %zero = integer_literal $Builtin.Word, 0 diff --git a/test/IRGen/variadic_generic_types.swift b/test/IRGen/variadic_generic_types.swift index fa7ae57e763ea..1ac2b14680c56 100644 --- a/test/IRGen/variadic_generic_types.swift +++ b/test/IRGen/variadic_generic_types.swift @@ -1,15 +1,14 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -primary-file %s -disable-availability-checking | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir -primary-file %s -disable-availability-checking +// RUN: %target-swift-frontend -emit-ir -primary-file %s -disable-availability-checking | %FileCheck %s // REQUIRES: PTRSIZE=64 struct G { - // CHECK-LABEL: define hidden swiftcc void @"$s22variadic_generic_types1GV6calleeyyF"(i64 %0, %swift.type** %"each T") + // CHECK-LABEL: define hidden swiftcc void @"$s22variadic_generic_types1GV6calleeyyF"(i64 %0, ptr %"each T") // CHECK: ret void func callee() {} - // CHECK-LABEL: define hidden swiftcc void @"$s22variadic_generic_types1GV6calleryyF"(i64 %0, %swift.type** %"each T") - // CHECK: call swiftcc void @"$s22variadic_generic_types1GV6calleeyyF"(i64 %0, %swift.type** %"each T") + // CHECK-LABEL: define hidden swiftcc void @"$s22variadic_generic_types1GV6calleryyF"(i64 %0, ptr %"each T") + // CHECK: call swiftcc void @"$s22variadic_generic_types1GV6calleeyyF"(i64 %0, ptr %"each T") // CHECK: ret void func caller() { callee() diff --git a/test/IRGen/variadic_generics.sil b/test/IRGen/variadic_generics.sil index a3253ac8ea539..8b54cdb53996d 100644 --- a/test/IRGen/variadic_generics.sil +++ b/test/IRGen/variadic_generics.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir -primary-file %s | %IRGenFileCheck %s -// RUN: %target-swift-frontend -emit-ir -primary-file %s +// RUN: %target-swift-frontend -emit-ir -primary-file %s | %IRGenFileCheck %s import Builtin import Swift @@ -74,11 +73,10 @@ bb0: // CHECK-LABEL: define{{.*}} @test_pack_element_get_1( // CHECK: [[INDEX:%.*]] = add [[INT]] %1, 1 -// CHECK: [[ELT_STORAGE:%.*]] = getelementptr inbounds %swift.opaque*, %swift.opaque** %0, [[INT]] [[INDEX]] -// CHECK: [[BITCAST_STORAGE:%.*]] = bitcast %swift.opaque** [[ELT_STORAGE]] to %TSi** -// CHECK: [[ELT_ADDR:%.*]] = load %TSi*, %TSi** [[BITCAST_STORAGE]], align -// CHECK: [[VALUE_ADDR:%.*]] = getelementptr inbounds %TSi, %TSi* [[ELT_ADDR]], i32 0, i32 0 -// CHECK: [[RET:%.*]] = load [[INT]], [[INT]]* [[VALUE_ADDR]], align +// CHECK: [[ELT_STORAGE:%.*]] = getelementptr inbounds ptr, ptr %0, [[INT]] [[INDEX]] +// CHECK: [[ELT_ADDR:%.*]] = load ptr, ptr [[ELT_STORAGE]], align +// CHECK: [[VALUE_ADDR:%.*]] = getelementptr inbounds %TSi, ptr [[ELT_ADDR]], i32 0, i32 0 +// CHECK: [[RET:%.*]] = load [[INT]], ptr [[VALUE_ADDR]], align // CHECK: ret [[INT]] [[RET]] sil @test_pack_element_get_1 : $ (@pack_owned Pack{Int, repeat each T, Int}) -> Int { bb0(%pack : $*Pack{Int, repeat each T, Int}): @@ -90,11 +88,10 @@ bb0(%pack : $*Pack{Int, repeat each T, Int}): // CHECK-LABEL: define{{.*}} @test_pack_element_set_1( // CHECK: [[INDEX:%.*]] = add [[INT]] %2, 1 -// CHECK: [[ELT_STORAGE:%.*]] = getelementptr inbounds %swift.opaque*, %swift.opaque** %0, [[INT]] [[INDEX]] -// CHECK: [[BITCAST_STORAGE:%.*]] = bitcast %swift.opaque** [[ELT_STORAGE]] to %TSi** -// CHECK: [[ELT_ADDR:%.*]] = load %TSi*, %TSi** [[BITCAST_STORAGE]], align -// CHECK: [[VALUE_ADDR:%.*]] = getelementptr inbounds %TSi, %TSi* [[ELT_ADDR]], i32 0, i32 0 -// CHECK: store [[INT]] %1, [[INT]]* [[VALUE_ADDR]], align +// CHECK: [[ELT_STORAGE:%.*]] = getelementptr inbounds ptr, ptr %0, [[INT]] [[INDEX]] +// CHECK: [[ELT_ADDR:%.*]] = load ptr, ptr [[ELT_STORAGE]], align +// CHECK: [[VALUE_ADDR:%.*]] = getelementptr inbounds %TSi, ptr [[ELT_ADDR]], i32 0, i32 0 +// CHECK: store [[INT]] %1, ptr [[VALUE_ADDR]], align // CHECK: ret void sil @test_pack_element_set_1 : $ (@pack_owned Pack{Int, repeat each T, Int}, Int) -> () { bb0(%pack : $*Pack{Int, repeat each T, Int}, %value : $Int): @@ -108,9 +105,9 @@ bb0(%pack : $*Pack{Int, repeat each T, Int}, %value : $Int): // CHECK-LABEL: define {{.*}}@test_pack_alloc_1_dynamic( // CHECK-SAME: [[INT]] [[PACK_SIZE:%[^,]+]] // CHECK: [[SIZE:%[^,]+]] = add [[INT]] [[PACK_SIZE]], [[PACK_SIZE]] -// CHECK: [[SP_SAVE:%[^,]+]] = call i8* @llvm.stacksave() -// CHECK: alloca %swift.opaque*, [[INT]] [[SIZE]] -// CHECK: call void @llvm.stackrestore(i8* [[SP_SAVE]]) +// CHECK: [[SP_SAVE:%[^,]+]] = call ptr @llvm.stacksave() +// CHECK: alloca ptr, [[INT]] [[SIZE]] +// CHECK: call void @llvm.stackrestore(ptr [[SP_SAVE]]) sil @test_pack_alloc_1_dynamic : $ () -> () { // Control flow so that stack saving/restoring is emitted entry: @@ -127,10 +124,9 @@ exit: } // CHECK-LABEL: define {{.*}}@test_pack_alloc_2_static -// CHECK: [[STACK:%[^,]+]] = alloca [2 x %swift.opaque*] -// CHECK: call void @llvm.lifetime.start.p0i8 -// CHECK: [[CAST:%.*]] = bitcast [2 x %swift.opaque*]* [[STACK]] to %swift.opaque** -// CHECK: call void @llvm.lifetime.end.p0i8 +// CHECK: [[STACK:%[^,]+]] = alloca [2 x ptr] +// CHECK: call void @llvm.lifetime.start.p0 +// CHECK: call void @llvm.lifetime.end.p0 sil @test_pack_alloc_2_static : $ () -> () { %addr = alloc_pack $Pack{Int, Int} dealloc_pack %addr : $*Pack{Int, Int} @@ -145,17 +141,14 @@ entry(%addr : $*T): } // CHECK-LABEL: define {{.*}}@test_tuple_pack_element_addr_1( -// CHECK-SAME: {{.*}}* nocapture [[TUPLE_ADDR:%[^,]+]], i{{(64|32)}} [[INDEX:%[^,]+]] -// CHECK: [[ELT_TYPE:%.*]] = phi %swift.type* [ +// CHECK-SAME: ptr nocapture [[TUPLE_ADDR:%[^,]+]], i{{(64|32)}} [[INDEX:%[^,]+]] +// CHECK: [[ELT_TYPE:%.*]] = phi ptr [ // CHECK: [[RESPONSE:%[^,]+]] = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata // CHECK: [[UNCAST_METADATA:%[^,]+]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 -// CHECK: [[METADATA:%[^,]+]] = bitcast %swift.type* [[UNCAST_METADATA]] to %swift.tuple_type* -// CHECK: [[OFFSET_PTR:%[^,]+]] = getelementptr inbounds %swift.tuple_type, %swift.tuple_type* [[METADATA]], i{{(64|32)}} 0, i32 3, i{{(64|32)}} [[INDEX]] -// CHECK: [[OFFSET:%[^,]+]] = load i32, i32* [[OFFSET_PTR]], align -// CHECK: [[CAST_TUPLE_ADDR:%[^,]+]] = bitcast <{ %TSS }>* [[TUPLE_ADDR]] to i8* -// CHECK: [[UNCAST_ELEMENT_ADDR:%[^,]+]] = getelementptr inbounds i8, i8* [[CAST_TUPLE_ADDR]], i32 [[OFFSET]] -// CHECK: [[ELEMENT_ADDR:%[^,]+]] = bitcast i8* [[UNCAST_ELEMENT_ADDR]] to %swift.opaque* -// CHECK: call swiftcc void @borrow(%swift.opaque* noalias nocapture [[ELEMENT_ADDR]], %swift.type* [[ELT_TYPE]]) +// CHECK: [[OFFSET_PTR:%[^,]+]] = getelementptr inbounds %swift.tuple_type, ptr [[UNCAST_METADATA]], i{{(64|32)}} 0, i32 3, i{{(64|32)}} [[INDEX]] +// CHECK: [[OFFSET:%[^,]+]] = load i32, ptr [[OFFSET_PTR]], align +// CHECK: [[UNCAST_ELEMENT_ADDR:%[^,]+]] = getelementptr inbounds i8, ptr [[TUPLE_ADDR]], i32 [[OFFSET]] +// CHECK: call swiftcc void @borrow(ptr noalias nocapture [[UNCAST_ELEMENT_ADDR]], ptr [[ELT_TYPE]]) sil @test_tuple_pack_element_addr_1 : $ (@inout (String, T, U, Int), Builtin.Word) -> () { bb0(%tuple : $*(String, T, U, Int), %i : $Builtin.Word): %index = dynamic_pack_index %i of $Pack{Float, T, U, Float} diff --git a/test/IRGen/variadic_vanishing_tuple.swift b/test/IRGen/variadic_vanishing_tuple.swift index f96a24050a786..2ea673eeba273 100644 --- a/test/IRGen/variadic_vanishing_tuple.swift +++ b/test/IRGen/variadic_vanishing_tuple.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -emit-ir %s +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize public func takesMetatype(_: T.Type) {} @@ -7,22 +6,22 @@ public func makeTuple(_ t: repeat each T) { takesMetatype((repeat each T).self) } -// CHECK-LABEL: define {{(protected )?}}{{(dllexport )?}}swiftcc void @"$s24variadic_vanishing_tuple9makeTupleyyxxQpRvzlF"(%swift.opaque** noalias nocapture %0, {{i32|i64}} %1, %swift.type** %"each T") +// CHECK-LABEL: define {{(protected )?}}{{(dllexport )?}}swiftcc void @"$s24variadic_vanishing_tuple9makeTupleyyxxQpRvzlF"(ptr noalias nocapture %0, {{i32|i64}} %1, ptr %"each T") // CHECK: [[CMP:%.*]] = icmp eq [[INT]] %1, 1 // CHECK: br i1 [[CMP]], label %vanishing-tuple, label %actual-tuple // CHECK: vanishing-tuple: -// CHECK: [[PACK_ADDR:%.*]] = ptrtoint %swift.type** %"each T" to [[INT]] +// CHECK: [[PACK_ADDR:%.*]] = ptrtoint ptr %"each T" to [[INT]] // CHECK: [[PACK_ADDR_MASKED:%.*]] = and [[INT]] [[PACK_ADDR]], -2 -// CHECK: [[PACK_PTR:%.*]] = inttoptr [[INT]] [[PACK_ADDR_MASKED]] to %swift.type** -// CHECK: [[ELT_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[PACK_PTR]], [[INT]] 0 -// CHECK: [[ELT:%.*]] = load %swift.type*, %swift.type** [[ELT_PTR]] -// CHECK: [[RESULT:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[ELT]], 0 +// CHECK: [[PACK_PTR:%.*]] = inttoptr [[INT]] [[PACK_ADDR_MASKED]] to ptr +// CHECK: [[ELT_PTR:%.*]] = getelementptr inbounds ptr, ptr [[PACK_PTR]], [[INT]] 0 +// CHECK: [[ELT:%.*]] = load ptr, ptr [[ELT_PTR]] +// CHECK: [[RESULT:%.*]] = insertvalue %swift.metadata_response undef, ptr [[ELT]], 0 // CHECK: [[RESULT2:%.*]] = insertvalue %swift.metadata_response [[RESULT]], [[INT]] 0, 1 // CHECK: br label %tuple-rest // CHECK: actual-tuple: -// CHECK: [[PACK:%.*]] = alloca %swift.type*, [[INT]] %1 +// CHECK: [[PACK:%.*]] = alloca ptr, [[INT]] %1 // CHECK: br label %pack-expansion-check // CHECK: pack-expansion-check: @@ -32,13 +31,13 @@ public func makeTuple(_ t: repeat each T) { // CHECK: br label %pack-expansion-check // CHECK: pack-expansion-rest: -// CHECK: [[TUPLE:%.*]] = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata([[INT]] 0, [[INT]] %1, %swift.type** [[PACK:%.*]], i8* null, i8** null) +// CHECK: [[TUPLE:%.*]] = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata([[INT]] 0, [[INT]] %1, ptr [[PACK:%.*]], ptr null, ptr null) // CHECK: br label %tuple-rest // CHECK: tuple-rest: // CHECK: [[PHI:%.*]] = phi %swift.metadata_response [ [[RESULT2]], %vanishing-tuple ], [ [[TUPLE]], %pack-expansion-rest ] // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[PHI]], 0 -// CHECK: call swiftcc void @"$s24variadic_vanishing_tuple13takesMetatypeyyxmlF"(%swift.type* [[METADATA]], %swift.type* [[METADATA]]) +// CHECK: call swiftcc void @"$s24variadic_vanishing_tuple13takesMetatypeyyxmlF"(ptr [[METADATA]], ptr [[METADATA]]) // CHECK: ret void public func makeTuple2(t: repeat each T, u: repeat each U, v: repeat each V) { diff --git a/test/IRGen/virtual-function-elimination-ir-thunks.swift b/test/IRGen/virtual-function-elimination-ir-thunks.swift index 91ba09bc7385b..8256c4973df04 100644 --- a/test/IRGen/virtual-function-elimination-ir-thunks.swift +++ b/test/IRGen/virtual-function-elimination-ir-thunks.swift @@ -3,8 +3,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift -Xfrontend -disable-objc-interop -Xfrontend -enable-llvm-vfe -parse-as-library %s -DLIBRARY -module-name Library -emit-module -o %t/Library.swiftmodule -// RUN: %target-build-swift %use_no_opaque_pointers -Xfrontend -disable-objc-interop -Xfrontend -enable-llvm-vfe -parse-as-library %s -DCLIENT -module-name Main -I%t -emit-ir -o - | %FileCheck %s -// RUN: %target-build-swift -Xfrontend -disable-objc-interop -Xfrontend -enable-llvm-vfe -parse-as-library %s -DCLIENT -module-name Main -I%t -emit-ir -o - +// RUN: %target-build-swift -Xfrontend -disable-objc-interop -Xfrontend -enable-llvm-vfe -parse-as-library %s -DCLIENT -module-name Main -I%t -emit-ir -o - | %FileCheck %s // UNSUPPORTED: OS=windows-msvc @@ -25,17 +24,16 @@ public class MyLocalClass { } func func1(o: MyLocalClass) { - // CHECK: define hidden swiftcc void @"$s4Main5func11oyAA12MyLocalClassC_tF"(%T4Main12MyLocalClassC* %0) + // CHECK: define hidden swiftcc void @"$s4Main5func11oyAA12MyLocalClassC_tF"(ptr %0) o.bar() - // CHECK: [[SLOT:%.*]] = getelementptr inbounds void (%T4Main12MyLocalClassC*)*, void (%T4Main12MyLocalClassC*)** {{.*}}, {{i64|i32}} {{.*}} - // CHECK: [[SLOTASPTR:%.*]] = bitcast void (%T4Main12MyLocalClassC*)** [[SLOT]] to i8* - // CHECK: call { i8*, i1 } @llvm.type.checked.load(i8* [[SLOTASPTR]], i32 0, metadata !"$s4Main12MyLocalClassC3baryyFTq") + // CHECK: [[SLOT:%.*]] = getelementptr inbounds ptr, ptr {{.*}}, {{i64|i32}} {{.*}} + // CHECK: call { ptr, i1 } @llvm.type.checked.load(ptr [[SLOT]], i32 0, metadata !"$s4Main12MyLocalClassC3baryyFTq") // CHECK: ret void } func func2(o: MyLibraryClass) { - // CHECK: define hidden swiftcc void @"$s4Main5func21oy7Library02MyC5ClassC_tF"(%T7Library02MyA5ClassC* %0) + // CHECK: define hidden swiftcc void @"$s4Main5func21oy7Library02MyC5ClassC_tF"(ptr %0) o.foo() // CHECK: call swiftcc void @"$s7Library02MyA5ClassC3fooyyFTj" diff --git a/test/IRGen/virtual-function-elimination-ir.swift b/test/IRGen/virtual-function-elimination-ir.swift index a69254512f40e..7779587638bd5 100644 --- a/test/IRGen/virtual-function-elimination-ir.swift +++ b/test/IRGen/virtual-function-elimination-ir.swift @@ -1,10 +1,8 @@ // Tests that under -enable-llvm-vfe, IRGen marks vtables and vcall sites with // the right attributes and intrinsics. -// RUN: %target-build-swift %use_no_opaque_pointers -Xfrontend -disable-objc-interop -Xfrontend -enable-llvm-vfe \ -// RUN: %s -emit-ir -o - | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize // RUN: %target-build-swift -Xfrontend -disable-objc-interop -Xfrontend -enable-llvm-vfe \ -// RUN: %s -emit-ir -o - +// RUN: %s -emit-ir -o - | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize // UNSUPPORTED: OS=windows-msvc @@ -41,18 +39,16 @@ func func1() { // CHECK: define hidden swiftcc void @"$s4main5func1yyF"() let o: MyClass = MyDerivedClass() o.foo() - // CHECK: [[SLOT:%.*]] = getelementptr inbounds void (%T4main7MyClassC*)*, void (%T4main7MyClassC*)** {{.*}}, {{i64|i32}} {{.*}} - // CHECK: [[SLOTASPTR:%.*]] = bitcast void (%T4main7MyClassC*)** [[SLOT]] to i8* - // CHECK: call { i8*, i1 } @llvm.type.checked.load(i8* [[SLOTASPTR]], i32 0, metadata !"$s4main7MyClassC3fooyyFTq") + // CHECK: [[SLOT:%.*]] = getelementptr inbounds ptr, ptr {{.*}}, {{i64|i32}} {{.*}} + // CHECK: call { ptr, i1 } @llvm.type.checked.load(ptr [[SLOT]], i32 0, metadata !"$s4main7MyClassC3fooyyFTq") } func func2() { // CHECK: define hidden swiftcc void @"$s4main5func2yyF"() let o: MyDerivedClass = MyDerivedClass() o.foo() - // CHECK: [[SLOT:%.*]] = getelementptr inbounds void (%T4main14MyDerivedClassC*)*, void (%T4main14MyDerivedClassC*)** {{.*}}, {{i64|i32}} {{.*}} - // CHECK: [[SLOTASPTR:%.*]] = bitcast void (%T4main14MyDerivedClassC*)** [[SLOT]] to i8* - // CHECK: call { i8*, i1 } @llvm.type.checked.load(i8* [[SLOTASPTR]], i32 0, metadata !"$s4main7MyClassC3fooyyFTq") + // CHECK: [[SLOT:%.*]] = getelementptr inbounds ptr, ptr {{.*}}, {{i64|i32}} {{.*}} + // CHECK: call { ptr, i1 } @llvm.type.checked.load(ptr [[SLOT]], i32 0, metadata !"$s4main7MyClassC3fooyyFTq") } // CHECK-64: !0 = !{i64 56, !"$s4main7MyClassC3fooyyFTq"} diff --git a/test/IRGen/weak_import_availability.swift b/test/IRGen/weak_import_availability.swift index 92d6b13fb1a98..990c606ed9b8e 100644 --- a/test/IRGen/weak_import_availability.swift +++ b/test/IRGen/weak_import_availability.swift @@ -1,14 +1,12 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -target %target-cpu-apple-macosx10.50 -emit-module -emit-module-path %t/weak_import_availability_helper.swiftmodule -parse-as-library %S/Inputs/weak_import_availability_helper.swift -enable-library-evolution // -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -I %t -emit-ir | %FileCheck %s --check-prefixes=CHECK,CHECK-OLD -// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 | %FileCheck %s --check-prefixes=CHECK,CHECK-NEW -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 | %FileCheck %s --check-prefixes=CHECK,CHECK-NEW +// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir | %FileCheck %s --check-prefixes=CHECK,CHECK-OLD +// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 | %FileCheck %s --check-prefixes=CHECK,CHECK-NEW +// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 | %FileCheck %s --check-prefixes=CHECK,CHECK-NEW -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 -weak-link-at-target | %FileCheck %s --check-prefixes=CHECK,CHECK-OLD -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 -weak-link-at-target | %FileCheck %s --check-prefixes=CHECK,CHECK-NEW -// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 -weak-link-at-target +// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 -weak-link-at-target | %FileCheck %s --check-prefixes=CHECK,CHECK-OLD +// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 -weak-link-at-target | %FileCheck %s --check-prefixes=CHECK,CHECK-NEW // REQUIRES: OS=macosx @@ -34,8 +32,8 @@ public func useConditionallyAvailableConformance() { // FIXME: We reference the witness table directly -- that's a bug since the module is resilient. Should reference the // conformance descriptor instead. -// CHECK-OLD-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA0eF8ProtocolAAWP" = extern_weak global i8* -// CHECK-NEW-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA0eF8ProtocolAAWP" = external global i8* +// CHECK-OLD-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA0eF8ProtocolAAWP" = extern_weak global ptr +// CHECK-NEW-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA0eF8ProtocolAAWP" = external global ptr @available(macOS, unavailable) func useUnavailableConformance(_: T.Type) {} @@ -45,7 +43,7 @@ public func useUnavailableConformance() { useUnavailableConformance(AlwaysAvailableStruct.self) } -// CHECK-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA19UnavailableProtocolAAWP" = extern_weak global i8*, align 8 +// CHECK-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA19UnavailableProtocolAAWP" = extern_weak global ptr, align 8 @available(macOS 10.50, *) public func callConditionallyAvailableFunction() { @@ -75,8 +73,8 @@ public func useConditionallyAvailableGlobal() { // CHECK-OLD-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivs"(i64) // CHECK-NEW-LABEL: declare swiftcc void @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivs"(i64) -// CHECK-OLD-LABEL: declare extern_weak swiftcc { i8*, %TSi* } @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivM"(i8* noalias dereferenceable(32)) -// CHECK-NEW-LABEL: declare swiftcc { i8*, %TSi* } @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivM"(i8* noalias dereferenceable(32)) +// CHECK-OLD-LABEL: declare extern_weak swiftcc { ptr, ptr } @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivM"(ptr noalias dereferenceable(32)) +// CHECK-NEW-LABEL: declare swiftcc { ptr, ptr } @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivM"(ptr noalias dereferenceable(32)) @available(macOS, unavailable) public func useUnavailableGlobal() { @@ -87,7 +85,7 @@ public func useUnavailableGlobal() { // CHECK-LABEL: declare extern_weak swiftcc i64 @"$s31weak_import_availability_helper17unavailableGlobalSivg"() // CHECK-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper17unavailableGlobalSivs"(i64) -// CHECK-LABEL: declare extern_weak swiftcc { i8*, %TSi* } @"$s31weak_import_availability_helper17unavailableGlobalSivM"(i8* noalias dereferenceable(32)) +// CHECK-LABEL: declare extern_weak swiftcc { ptr, ptr } @"$s31weak_import_availability_helper17unavailableGlobalSivM"(ptr noalias dereferenceable(32)) func blackHole(_: T) {} @@ -112,8 +110,8 @@ public func useConditionallyAvailableMethod(s: ConditionallyAvailableStruct) { s.conditionallyAvailableMethod() } -// CHECK-OLD-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper28ConditionallyAvailableStructV013conditionallyF6MethodyyF"(%swift.opaque* noalias nocapture swiftself) -// CHECK-NEW-LABEL: declare swiftcc void @"$s31weak_import_availability_helper28ConditionallyAvailableStructV013conditionallyF6MethodyyF"(%swift.opaque* noalias nocapture swiftself) +// CHECK-OLD-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper28ConditionallyAvailableStructV013conditionallyF6MethodyyF"(ptr noalias nocapture swiftself) +// CHECK-NEW-LABEL: declare swiftcc void @"$s31weak_import_availability_helper28ConditionallyAvailableStructV013conditionallyF6MethodyyF"(ptr noalias nocapture swiftself) @available(macOS, unavailable) public func useUnavailableStruct() { @@ -127,4 +125,4 @@ public func useUnavailableMethod(s: UnvailableStruct) { s.unavailableMethod() } -// CHECK-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper16UnvailableStructV17unavailableMethodyyF"(%swift.opaque* noalias nocapture swiftself) +// CHECK-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper16UnvailableStructV17unavailableMethodyyF"(ptr noalias nocapture swiftself) diff --git a/test/IRGen/weak_import_native.swift b/test/IRGen/weak_import_native.swift index b38bba68f6478..b6a18f3716b4d 100644 --- a/test/IRGen/weak_import_native.swift +++ b/test/IRGen/weak_import_native.swift @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -emit-module-path %t/weak_import_native_helper.swiftmodule -parse-as-library %S/Inputs/weak_import_native_helper.swift -enable-library-evolution // -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-type-layout -primary-file %s -I %t -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -disable-type-layout -primary-file %s -I %t -emit-ir +// RUN: %target-swift-frontend -disable-type-layout -primary-file %s -I %t -emit-ir | %FileCheck %s // UNSUPPORTED: OS=windows-msvc @@ -11,7 +10,7 @@ import weak_import_native_helper // CHECK-DAG: @"$s25weak_import_native_helper23ProtocolWithWeakMembersP1TAC_AA05OtherE0Tn" = extern_weak global %swift.protocol_requirement // CHECK-DAG: @"$s1T25weak_import_native_helper23ProtocolWithWeakMembersPTl" = extern_weak global %swift.protocol_requirement // CHECK-DAG: @"$s25weak_import_native_helper23ProtocolWithWeakMembersP1fyyFTq" = extern_weak global %swift.method_descriptor -// CHECK-DAG: declare extern_weak swiftcc void @"$s25weak_import_native_helper23ProtocolWithWeakMembersPAAE1fyyF"(%swift.type*, i8**, %swift.opaque* noalias nocapture swiftself) +// CHECK-DAG: declare extern_weak swiftcc void @"$s25weak_import_native_helper23ProtocolWithWeakMembersPAAE1fyyF"(ptr, ptr, ptr noalias nocapture swiftself) struct ConformsToProtocolWithWeakMembers : ProtocolWithWeakMembers {} func testTopLevel() { @@ -180,5 +179,5 @@ class WeakGenericSub: GenericC { protocol RefinesP : BaseP {} -// CHECK-DAG: @"$s25weak_import_native_helper1SVAA5BasePAAWP" = extern_weak global i8* +// CHECK-DAG: @"$s25weak_import_native_helper1SVAA5BasePAAWP" = extern_weak global ptr extension S : RefinesP {} diff --git a/test/IRGen/weaklinked_import.swift b/test/IRGen/weaklinked_import.swift index 0c100165f354e..9cd359756297d 100644 --- a/test/IRGen/weaklinked_import.swift +++ b/test/IRGen/weaklinked_import.swift @@ -2,14 +2,13 @@ // RUN: %target-swift-frontend -emit-module -emit-module-path %t/weaklinked_import_helper.swiftmodule -parse-as-library %S/Inputs/weaklinked_import_helper.swift -enable-library-evolution // -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -I %t -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir +// RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir | %FileCheck %s // UNSUPPORTED: OS=windows-msvc @_weakLinked import weaklinked_import_helper -// CHECK-DAG: @"$s24weaklinked_import_helper12ConcreteTypeVAA13OtherProtocolAAWP" = extern_weak global i8* +// CHECK-DAG: @"$s24weaklinked_import_helper12ConcreteTypeVAA13OtherProtocolAAWP" = extern_weak global ptr // CHECK-DAG: @"$s24weaklinked_import_helper12ConcreteTypeVMn" = extern_weak global %swift.type_descriptor // CHECK-DAG: @"$s24weaklinked_import_helper17ProtocolWithAssocMp" = extern_weak global %swift.protocol // CHECK-DAG: @"$s24weaklinked_import_helper17ProtocolWithAssocP1TAC_AA05OtherD0Tn" = extern_weak global %swift.protocol_requirement @@ -155,7 +154,7 @@ func testProtocolGeneric(_ type: Impl.Type) { // CHECK-DAG: @"$s24weaklinked_import_helper5BasePMp" = extern_weak global %swift.protocol protocol RefinesP: BaseP {} -// CHECK-DAG: @"$s24weaklinked_import_helper1SVAA5BasePAAWP" = extern_weak global i8* +// CHECK-DAG: @"$s24weaklinked_import_helper1SVAA5BasePAAWP" = extern_weak global ptr // CHECK-DAG: @"$s24weaklinked_import_helper1SVMn" = extern_weak global %swift.type_descriptor extension S: RefinesP {} diff --git a/test/IRGen/windows-linking.swift b/test/IRGen/windows-linking.swift index 3d42ea329f9ee..da054e9d9b049 100644 --- a/test/IRGen/windows-linking.swift +++ b/test/IRGen/windows-linking.swift @@ -1,10 +1,8 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -target x86_64-unknown-windows-msvc -parse-as-library -parse-stdlib -static -emit-module -emit-module-path %t/module.swiftmodule -module-name module -DMODULE %s -// RUN: %target-swift-frontend %use_no_opaque_pointers -target x86_64-unknown-windows-msvc -parse-as-library -parse-stdlib -S -emit-ir %s -module-name main -o - -I%t | %FileCheck %s -check-prefix CHECK-STATIC -// RUN: %target-swift-frontend -target x86_64-unknown-windows-msvc -parse-as-library -parse-stdlib -S -emit-ir %s -module-name main -o - -I%t +// RUN: %target-swift-frontend -target x86_64-unknown-windows-msvc -parse-as-library -parse-stdlib -S -emit-ir %s -module-name main -o - -I%t | %FileCheck %s -check-prefix CHECK-STATIC // RUN: %target-swift-frontend -target x86_64-unknown-windows-msvc -parse-as-library -parse-stdlib -emit-module -emit-module-path %t/module.swiftmodule -module-name module -DMODULE %s -// RUN: %target-swift-frontend %use_no_opaque_pointers -target x86_64-unknown-windows-msvc -parse-as-library -parse-stdlib -S -emit-ir %s -module-name main -o - -I%t | %FileCheck %s -check-prefix CHECK-SHARED -// RUN: %target-swift-frontend -target x86_64-unknown-windows-msvc -parse-as-library -parse-stdlib -S -emit-ir %s -module-name main -o - -I%t +// RUN: %target-swift-frontend -target x86_64-unknown-windows-msvc -parse-as-library -parse-stdlib -S -emit-ir %s -module-name main -o - -I%t | %FileCheck %s -check-prefix CHECK-SHARED #if MODULE @@ -44,9 +42,9 @@ struct Entry { // Ensure that static linking does not mark the entries as being indirected // through the IAT. -// CHECK-STATIC: @"$s6module1EO4main1QADWP" = hidden constant [2 x i8*] [ -// CHECK-STATIC-SAME: i8* bitcast (%swift.protocol_conformance_descriptor* @"$s6module1EO4main1QADMc" to i8*), -// CHECK-STATIC-SAME: i8* bitcast (i8** @"$s6module1EOAA1PAAWP" to i8*) +// CHECK-STATIC: @"$s6module1EO4main1QADWP" = hidden constant [2 x ptr] [ +// CHECK-STATIC-SAME: ptr @"$s6module1EO4main1QADMc", +// CHECK-STATIC-SAME: ptr @"$s6module1EOAA1PAAWP" // CHECK-STATIC-SAME: ] // CHECK-STATIC: declare swiftcc void @"$s6module5valueAA1SVvg"() @@ -57,9 +55,9 @@ struct Entry { // Ensure that shared linking does mark the functions as being indirected // through the IAT. -// CHECK-SHARED: @"$s6module1EO4main1QADWP" = hidden constant [2 x i8*] [ -// CHECK-SHARED-SAME: i8* bitcast ({ i32, i32, i32, i32, i16, i16, i32, i32 }* @"$s6module1EO4main1QADMc" to i8*), -// CHECK-SHARED-SAME: i8* null +// CHECK-SHARED: @"$s6module1EO4main1QADWP" = hidden constant [2 x ptr] [ +// CHECK-SHARED-SAME: ptr @"$s6module1EO4main1QADMc", +// CHECK-SHARED-SAME: ptr null // CHECK-SHARED-SAME: ] // CHECK-SHARED: declare dllimport swiftcc void @"$s6module5valueAA1SVvg"() diff --git a/test/IRGen/witness-method-elimination-ir-relative.swift b/test/IRGen/witness-method-elimination-ir-relative.swift index c84338494e9ac..1856009ad75f3 100644 --- a/test/IRGen/witness-method-elimination-ir-relative.swift +++ b/test/IRGen/witness-method-elimination-ir-relative.swift @@ -1,12 +1,9 @@ // Tests that under -enable-llvm-wme, IRGen marks wtables and wcall sites with // the right attributes and intrinsics. -// RUN: %target-build-swift %use_no_opaque_pointers -Xfrontend -disable-objc-interop -Xfrontend -enable-llvm-wme \ -// RUN: -Xfrontend -enable-relative-protocol-witness-tables \ -// RUN: %s -emit-ir -o - | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-%target-cpu // RUN: %target-build-swift -Xfrontend -disable-objc-interop -Xfrontend -enable-llvm-wme \ // RUN: -Xfrontend -enable-relative-protocol-witness-tables \ -// RUN: %s -emit-ir -o - +// RUN: %s -emit-ir -o - | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-%target-cpu // REQUIRES: PTRSIZE=64 @@ -41,14 +38,12 @@ func test2() { // CHECK: define hidden swiftcc void @"$s4main5test2yyF"() let x: TheProtocol = MyStruct() x.func1_live() - // CHECK: [[TBL:%.*]] = phi i8** - // CHECK-arm64e: [[T0:%.*]] = ptrtoint i8** [[TBL]] to i64 + // CHECK: [[TBL:%.*]] = phi ptr + // CHECK-arm64e: [[T0:%.*]] = ptrtoint ptr [[TBL]] to i64 // CHECK-arm64e: [[T1:%.*]] = call i64 @llvm.ptrauth.auth(i64 [[T0]], i32 2, i64 47152) - // CHECK-arm64e: [[TBL:%.*]] = inttoptr i64 [[T1]] to i8** - // CHECK: [[TBL2:%.*]] = bitcast i8** [[TBL]] to i32* - // CHECK: [[ENTRY:%.*]] = getelementptr inbounds i32, i32* [[TBL2]], i32 1 - // CHECK: [[ENTRY2:%.*]] = bitcast i32* [[ENTRY]] to i8* - // CHECK: call { i8*, i1 } @llvm.type.checked.load.relative(i8* [[ENTRY2]], i32 0, metadata !"$s4main11TheProtocolP10func1_liveyyFTq") + // CHECK-arm64e: [[TBL:%.*]] = inttoptr i64 [[T1]] to ptr + // CHECK: [[ENTRY:%.*]] = getelementptr inbounds i32, ptr [[TBL]], i32 1 + // CHECK: call { ptr, i1 } @llvm.type.checked.load.relative(ptr [[ENTRY]], i32 0, metadata !"$s4main11TheProtocolP10func1_liveyyFTq") } // CHECK: !0 = !{i64 4, !"$s4main11TheProtocolP10func1_liveyyFTq"} diff --git a/test/IRGen/witness-method-elimination-ir-thunks.swift b/test/IRGen/witness-method-elimination-ir-thunks.swift index 810ba6beb56c2..cbab22cd7b718 100644 --- a/test/IRGen/witness-method-elimination-ir-thunks.swift +++ b/test/IRGen/witness-method-elimination-ir-thunks.swift @@ -3,8 +3,7 @@ // RUN: %empty-directory(%t) // RUN: %target-build-swift -Xfrontend -enable-llvm-wme -parse-as-library %s -DLIBRARY -module-name Library -emit-module -o %t/Library.swiftmodule -// RUN: %target-build-swift %use_no_opaque_pointers -Xfrontend -enable-llvm-wme -parse-as-library %s -DCLIENT -module-name Main -I%t -emit-ir -o - | %FileCheck %s -// RUN: %target-build-swift -Xfrontend -enable-llvm-wme -parse-as-library %s -DCLIENT -module-name Main -I%t -emit-ir -o - +// RUN: %target-build-swift -Xfrontend -enable-llvm-wme -parse-as-library %s -DCLIENT -module-name Main -I%t -emit-ir -o - | %FileCheck %s #if LIBRARY @@ -26,9 +25,8 @@ extension MyLocalProtocol { func func1() { // CHECK: define hidden swiftcc void @"$s4Main15MyLocalProtocolPAAE5func1yyF" self.local_req() - // CHECK: [[SLOT:%.*]] = getelementptr inbounds i8*, i8** {{.*}}, i32 1 - // CHECK: [[SLOTASPTR:%.*]] = bitcast i8** [[SLOT]] to i8* - // CHECK: call { i8*, i1 } @llvm.type.checked.load(i8* [[SLOTASPTR]], i32 0, metadata !"$s4Main15MyLocalProtocolP9local_reqyyFTq") + // CHECK: [[SLOT:%.*]] = getelementptr inbounds ptr, ptr {{.*}}, i32 1 + // CHECK: call { ptr, i1 } @llvm.type.checked.load(ptr [[SLOT]], i32 0, metadata !"$s4Main15MyLocalProtocolP9local_reqyyFTq") // CHECK: ret void } } diff --git a/test/IRGen/witness_method_phi.sil b/test/IRGen/witness_method_phi.sil index 49b47243368a9..f830440535239 100644 --- a/test/IRGen/witness_method_phi.sil +++ b/test/IRGen/witness_method_phi.sil @@ -1,20 +1,17 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -Xllvm -sil-disable-pass=simplification -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -emit-ir %s +// RUN: %target-swift-frontend -Xllvm -sil-disable-pass=simplification -emit-ir %s | %FileCheck %s sil_stage canonical protocol P { func foo() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @phi_witness_method(%swift.type* %T, i8** %T.P) #0 { +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @phi_witness_method(ptr %T, ptr %T.P) #0 { sil @phi_witness_method : $@convention(thin) () -> () { entry: - // CHECK: [[T0_GEP:%.*]] = getelementptr inbounds i8*, i8** %T.P, i32 1 - // CHECK: [[LOAD:%.*]] = load i8*, i8** [[T0_GEP]], - // CHECK: [[T0:%.*]] = bitcast i8* [[LOAD]] to void (%swift.opaque*, %swift.type*, i8**)* - // CHECK: [[FUNC:%.*]] = bitcast void (%swift.opaque*, %swift.type*, i8**)* {{.*}} to i8* + // CHECK: [[T0_GEP:%.*]] = getelementptr inbounds ptr, ptr %T.P, i32 1 + // CHECK: [[LOAD:%.*]] = load ptr, ptr [[T0_GEP]], %1 = witness_method $T, #P.foo : $@convention(witness_method: P) (@in T) -> () br bb1(%1 : $@convention(witness_method: P) (@in T) -> ()) -// CHECK: phi i8* [ [[FUNC]], %entry ] +// CHECK: phi ptr [ {{.*}}, %entry ] bb1(%2 : $@convention(witness_method: P) (@in T) -> ()): unreachable } diff --git a/test/IRGen/witness_table_multifile.swift b/test/IRGen/witness_table_multifile.swift index 72fb882952f31..3cc30a2a8364c 100644 --- a/test/IRGen/witness_table_multifile.swift +++ b/test/IRGen/witness_table_multifile.swift @@ -1,15 +1,14 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s %S/Inputs/witness_table_multifile_2.swift -emit-ir -disable-objc-attr-requires-foundation-module | %FileCheck %s -// RUN: %target-swift-frontend -primary-file %s %S/Inputs/witness_table_multifile_2.swift -emit-ir -disable-objc-attr-requires-foundation-module +// RUN: %target-swift-frontend -primary-file %s %S/Inputs/witness_table_multifile_2.swift -emit-ir -disable-objc-attr-requires-foundation-module | %FileCheck %s -// CHECK: [[P_WITNESS_TABLE:%[A-Za-z0-9_]+]] = type { [{{24|12}} x i8], %swift.type*, i8** } +// CHECK: [[P_WITNESS_TABLE:%[A-Za-z0-9_]+]] = type { [{{24|12}} x i8], ptr, ptr } // CHECK-LABEL: define hidden swiftcc void @"$s23witness_table_multifile3baryyF" func bar() { // CHECK: call swiftcc void @"$s23witness_table_multifile2goAA1P_pyF" - // CHECK: [[WITNESS_TABLE_ADDR:%[0-9]+]] = getelementptr inbounds [[P_WITNESS_TABLE]], [[P_WITNESS_TABLE]]* %0, i32 0, i32 2 - // CHECK: [[WITNESS_TABLE:%[A-Za-z0-9_-]+]] = load i8**, i8*** [[WITNESS_TABLE_ADDR]] - // CHECK: [[BUFFER:%[0-9]+]] = call %swift.opaque* @__swift_project_boxed_opaque_existential_1 - // CHECK-NEXT: getelementptr inbounds i8*, i8** [[WITNESS_TABLE]], i32 4 + // CHECK: [[WITNESS_TABLE_ADDR:%[0-9]+]] = getelementptr inbounds [[P_WITNESS_TABLE]], ptr %0, i32 0, i32 2 + // CHECK: [[WITNESS_TABLE:%[A-Za-z0-9_-]+]] = load ptr, ptr [[WITNESS_TABLE_ADDR]] + // CHECK: [[BUFFER:%[0-9]+]] = call ptr @__swift_project_boxed_opaque_existential_1 + // CHECK-NEXT: getelementptr inbounds ptr, ptr [[WITNESS_TABLE]], i32 4 go().foo() } diff --git a/test/IRGen/zombies.swift b/test/IRGen/zombies.swift index ad67d458faf66..aa775722bff3a 100644 --- a/test/IRGen/zombies.swift +++ b/test/IRGen/zombies.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -O -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -primary-file %s -O -emit-ir +// RUN: %target-swift-frontend -primary-file %s -O -emit-ir | %FileCheck %s // rdar://24121475 // Ideally, these wouldn't be in the v-table at all; but as long as they @@ -9,5 +8,5 @@ class C { init(i: Int) { self.i = i } } -// CHECK: @"$s7zombies1CC1i33_{{.*}}vg" = hidden {{(dllexport )?}}alias void (), void ()* @_swift_dead_method_stub +// CHECK: @"$s7zombies1CC1i33_{{.*}}vg" = hidden {{(dllexport )?}}alias void (), ptr @_swift_dead_method_stub // CHECK: define internal void @_swift_dead_method_stub() From 599e82c93368331e5847830fde92bcb1dcbbfb2e Mon Sep 17 00:00:00 2001 From: Arnold Schwaighofer Date: Fri, 2 Jun 2023 07:13:31 -0700 Subject: [PATCH 11/38] Fix more test/IRGen test cases --- ...lass_update_callback_with_fixed_layout.sil | 118 +++-- ...s_update_callback_without_fixed_layout.sil | 144 +++--- ...llback_without_fixed_layout_stable_abi.sil | 3 +- test/IRGen/class_with_stub_initializers.swift | 12 +- test/IRGen/closure.swift | 40 +- test/IRGen/conditional-dead-strip-ir.swift | 6 +- test/IRGen/conditional_conformances.swift | 15 +- .../conditional_conformances_future.swift | 14 +- ...al_conformances_gettypemetdatabyname.swift | 11 +- test/IRGen/conformance_access_path.swift | 10 +- test/IRGen/dead_method.swift | 15 +- test/IRGen/dllexport.swift | 36 +- test/IRGen/dynamic_cast.sil | 23 +- test/IRGen/dynamic_init.sil | 17 +- test/IRGen/dynamic_lookup.sil | 27 +- .../IRGen/dynamic_replaceable_coroutine.swift | 15 +- .../dynamic_replaceable_opaque_return.swift | 43 +- test/IRGen/dynamic_self.sil | 7 +- test/IRGen/dynamic_self_metadata.swift | 22 +- test/IRGen/dynamic_self_metadata_future.swift | 32 +- ...ional_conformance_basic_conformances.swift | 266 ++++++----- ...onformance_basic_conformances_future.swift | 426 +++++++----------- .../conditional_conformance_recursive.swift | 8 +- .../conditional_conformance_subclass.swift | 118 +++-- ...ditional_conformance_subclass_future.swift | 132 +++--- .../conditional_conformance_with_assoc.swift | 202 ++++----- ...tional_conformance_with_assoc_future.swift | 271 +++++------ 27 files changed, 883 insertions(+), 1150 deletions(-) diff --git a/test/IRGen/class_update_callback_with_fixed_layout.sil b/test/IRGen/class_update_callback_with_fixed_layout.sil index 65b07457545cb..45beb4d4da335 100644 --- a/test/IRGen/class_update_callback_with_fixed_layout.sil +++ b/test/IRGen/class_update_callback_with_fixed_layout.sil @@ -1,7 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_struct.swiftmodule -module-name=resilient_struct %S/../Inputs/resilient_struct.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -enable-library-evolution %s -read-legacy-type-info-path=%S/Inputs/legacy_type_info/a.yaml | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize +// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %s -read-legacy-type-info-path=%S/Inputs/legacy_type_info/a.yaml | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize // RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %s -read-legacy-type-info-path=%S/Inputs/legacy_type_info/a.yaml // RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution -O %s -read-legacy-type-info-path=%S/Inputs/legacy_type_info/a.yaml @@ -122,34 +122,25 @@ bb0: // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldCMa"(i64 0) // CHECK-NEXT: [[META:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[META_ADDR:%.*]] = bitcast %swift.type* [[META]] to i8* -// CHECK-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 48 -// CHECK-NEXT: [[SIZE_PTR:%.*]] = bitcast i8* [[SIZE_ADDR]] to i32* -// CHECK-NEXT: [[SIZE_2:%.*]] = load i32, i32* [[SIZE_PTR]], align 8 +// CHECK-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 48 +// CHECK-NEXT: [[SIZE_2:%.*]] = load i32, ptr [[SIZE_ADDR]], align 8 // CHECK-NEXT: [[SIZE:%.*]] = zext i32 [[SIZE_2]] to i64 -// CHECK-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 52 -// CHECK-NEXT: [[ALIGN_PTR:%.*]] = bitcast i8* [[ALIGN_ADDR]] to i16* -// CHECK-NEXT: [[ALIGN_2:%.*]] = load i16, i16* [[ALIGN_PTR]], align 4 +// CHECK-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 52 +// CHECK-NEXT: [[ALIGN_2:%.*]] = load i16, ptr [[ALIGN_ADDR]], align 4 // CHECK-NEXT: [[ALIGN:%.*]] = zext i16 [[ALIGN_2]] to i64 -// CHECK-NEXT: [[ALLOC:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[META]], i64 [[SIZE]], i64 [[ALIGN]]) +// CHECK-NEXT: [[ALLOC:%.*]] = call noalias ptr @swift_allocObject(ptr [[META]], i64 [[SIZE]], i64 [[ALIGN]]) %c = alloc_ref $ClassWithResilientField // ... dealloc_ref also does the same thing. -// CHECK-NEXT: [[SELF:%.*]] = bitcast %swift.refcounted* [[ALLOC]] to %T39class_update_callback_with_fixed_layout23ClassWithResilientFieldC* -// CHECK-NEXT: [[ISA_ADDR:%.*]] = bitcast %T39class_update_callback_with_fixed_layout23ClassWithResilientFieldC* [[SELF]] -// CHECK-NEXT: [[META:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]], align 8 -// CHECK-NEXT: [[META_ADDR:%.*]] = bitcast %swift.type* [[META]] to i8* -// CHECK-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 48 -// CHECK-NEXT: [[SIZE_PTR:%.*]] = bitcast i8* [[SIZE_ADDR]] to i32* -// CHECK-NEXT: [[SIZE_2:%.*]] = load i32, i32* [[SIZE_PTR]], align 8 +// CHECK-NEXT: [[META:%.*]] = load ptr, ptr {{.*}}, align 8 +// CHECK-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 48 +// CHECK-NEXT: [[SIZE_2:%.*]] = load i32, ptr [[SIZE_ADDR]], align 8 // CHECK-NEXT: [[SIZE:%.*]] = zext i32 [[SIZE_2]] to i64 -// CHECK-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 52 -// CHECK-NEXT: [[ALIGN_PTR:%.*]] = bitcast i8* [[ALIGN_ADDR]] to i16* -// CHECK-NEXT: [[ALIGN_2:%.*]] = load i16, i16* [[ALIGN_PTR]], align 4 +// CHECK-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 52 +// CHECK-NEXT: [[ALIGN_2:%.*]] = load i16, ptr [[ALIGN_ADDR]], align 4 // CHECK-NEXT: [[ALIGN:%.*]] = zext i16 [[ALIGN_2]] to i64 -// CHECK-NEXT: [[ALLOC:%.*]] = bitcast %T39class_update_callback_with_fixed_layout23ClassWithResilientFieldC* [[SELF]] to %swift.refcounted* -// CHECK-NEXT: call void @swift_deallocClassInstance(%swift.refcounted* [[ALLOC]], i64 [[SIZE]], i64 [[ALIGN]]) +// CHECK-NEXT: call void @swift_deallocClassInstance(ptr [[ALLOC]], i64 [[SIZE]], i64 [[ALIGN]]) dealloc_ref %c : $ClassWithResilientField %result = tuple () @@ -161,20 +152,20 @@ bb0: // CHECK-LABEL: define swiftcc %swift.metadata_response @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldCMa -// CHECK: [[CACHE:%.*]] = load %swift.type*, %swift.type** getelementptr inbounds ({ %swift.type*, i8* }, { %swift.type*, i8* }* @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldCMl", i32 0, i32 0) -// CHECK-NEXT: [[COND:%.*]] = icmp eq %swift.type* [[CACHE]], null +// CHECK: [[CACHE:%.*]] = load ptr, ptr @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldCMl" +// CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, %swift.type_descriptor* bitcast ({{.*}} @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldCMn" to %swift.type_descriptor*)) +// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldCMn") // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 // CHECK-NEXT: [[STATUS:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 1 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi %swift.type* [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] +// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 0, %entry ], [ [[STATUS]], %cacheIsNull ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[NEW_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[NEW_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] @@ -182,19 +173,17 @@ bb0: // Accessing a field whose offset depends on resilient types should // use the field offset global. -// CHECK-LABEL: define swiftcc {{(dllexport )?}}{{(protected )?}}i64 @accessClassWithResilientField(%T39class_update_callback_with_fixed_layout23ClassWithResilientFieldC* %0) +// CHECK-LABEL: define swiftcc {{(dllexport )?}}{{(protected )?}}i64 @accessClassWithResilientField(ptr %0) sil @accessClassWithResilientField : $@convention(thin) (@guaranteed ClassWithResilientField) -> Int { bb0(%0 : $ClassWithResilientField): -// CHECK: [[OFFSET:%.*]] = load i64, i64* @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldC5thirdSivpWvd", align 8 -// CHECK-NEXT: [[SELF_ADDR:%.*]] = bitcast %T39class_update_callback_with_fixed_layout23ClassWithResilientFieldC* %0 to i8* -// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, i8* [[SELF_ADDR]], i64 [[OFFSET]] -// CHECK-NEXT: [[FIELD_PTR2:%.*]] = bitcast i8* [[FIELD_ADDR]] to %TSi* -// CHECK-NEXT: [[FIELD_PTR:%.*]] = getelementptr inbounds %TSi, %TSi* [[FIELD_PTR2]], i32 0, i32 0 +// CHECK: [[OFFSET:%.*]] = load i64, ptr @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldC5thirdSivpWvd", align 8 +// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, ptr %0, i64 [[OFFSET]] +// CHECK-NEXT: [[FIELD_PTR:%.*]] = getelementptr inbounds %TSi, ptr [[FIELD_ADDR]], i32 0, i32 0 %1 = ref_element_addr %0 : $ClassWithResilientField, #ClassWithResilientField.third -// CHECK-NEXT: [[VALUE:%.*]] = load i64, i64* [[FIELD_PTR]], align 8 +// CHECK-NEXT: [[VALUE:%.*]] = load i64, ptr [[FIELD_PTR]], align 8 %2 = load %1 : $*Int // CHECK-NEXT: ret i64 [[VALUE]] @@ -204,25 +193,22 @@ bb0(%0 : $ClassWithResilientField): // Objective-C metadata update callback function for ClassWithResilientField: -// CHECK-LABEL: define internal %objc_class* @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldCMU"(%objc_class* %0, i8* %1) +// CHECK-LABEL: define internal ptr @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldCMU"(ptr %0, ptr %1) // CHECK: entry: // CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldCMa"(i64 0) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 -// CHECK-NEXT: [[RESULT:%.*]] = bitcast %swift.type* [[METADATA]] to %objc_class* -// CHECK-NEXT: ret %objc_class* [[RESULT]] +// CHECK-NEXT: ret ptr [[METADATA]] // Metadata initialization function for ClassWithResilientField calls swift_updateClassMetadata2(): -// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldCMr"(%swift.type* %0, i8* %1, i8** %2) +// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldCMr"(ptr %0, ptr %1, ptr %2) // CHECK: entry: -// CHECK-NEXT: [[FIELDS:%.*]] = alloca [3 x i8**] -// CHECK-NEXT: [[METADATA_ADDR:%.*]] = bitcast %swift.type* %0 to [[INT]]* -// CHECK-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_ADDR]], [[INT]] {{10|13}} -// CHECK-NEXT: [[FIELDS_ADDR:%.*]] = bitcast [3 x i8**]* [[FIELDS]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 {{12|24}}, i8* [[FIELDS_ADDR]]) -// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [3 x i8**], [3 x i8**]* [[FIELDS]], i32 0, i32 0 +// CHECK-NEXT: [[FIELDS:%.*]] = alloca [3 x ptr] +// CHECK-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] {{10|13}} +// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 {{12|24}}, ptr [[FIELDS]]) +// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [3 x ptr], ptr [[FIELDS]], i32 0, i32 0 // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s16resilient_struct4SizeVMa"([[INT]] 319) // CHECK-NEXT: [[SIZE_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 @@ -233,57 +219,55 @@ bb0(%0 : $ClassWithResilientField): // CHECK: dependency-satisfied: // -- ClassLayoutFlags = 0x100 (HasStaticVTable) -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 3, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 3, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) // CHECK-NEXT: [[INITDEP_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NEXT: [[INITDEP_STATUS:%.*]] = extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq %swift.type* [[INITDEP_METADATA]], null +// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq ptr [[INITDEP_METADATA]], null // CHECK-NEXT: br i1 [[INITDEP_PRESENT]], label %dependency-satisfied1, label %metadata-dependencies.cont // CHECK: dependency-satisfied1: -// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* {{.*}} -// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldC1s16resilient_struct4SizeVvpWvd" +// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr {{.*}} +// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], ptr @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldC1s16resilient_struct4SizeVvpWvd" -// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* {{.*}} -// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldC5colors5Int32VvpWvd" +// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr {{.*}} +// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], ptr @"$s39class_update_callback_with_fixed_layout23ClassWithResilientFieldC5colors5Int32VvpWvd" // CHECK: br label %metadata-dependencies.cont // CHECK: metadata-dependencies.cont: -// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi %swift.type* [ [[SIZE_METADATA]], %entry ], [ [[INITDEP_METADATA]], %dependency-satisfied ], [ null, %dependency-satisfied1 ] +// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi ptr [ [[SIZE_METADATA]], %entry ], [ [[INITDEP_METADATA]], %dependency-satisfied ], [ null, %dependency-satisfied1 ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 63, %entry ], [ [[INITDEP_STATUS]], %dependency-satisfied ], [ 0, %dependency-satisfied1 ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[PENDING_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[PENDING_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] // Metadata initialization function for SubclassOfClassWithResilientField: -// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s39class_update_callback_with_fixed_layout33SubclassOfClassWithResilientFieldCMr"(%swift.type* %0, i8* %1, i8** %2) +// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s39class_update_callback_with_fixed_layout33SubclassOfClassWithResilientFieldCMr"(ptr %0, ptr %1, ptr %2) // CHECK: entry: -// CHECK-NEXT: [[FIELDS:%.*]] = alloca [0 x i8**] -// CHECK-NEXT: [[METADATA_ADDR:%.*]] = bitcast %swift.type* %0 to [[INT]]* -// CHECK-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_ADDR]], [[INT]] {{11|14}} -// CHECK-NEXT: [[FIELDS_ADDR:%.*]] = bitcast [0 x i8**]* [[FIELDS]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 0, i8* [[FIELDS_ADDR]]) -// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [0 x i8**], [0 x i8**]* [[FIELDS]], i32 0, i32 0 +// CHECK-NEXT: [[FIELDS:%.*]] = alloca [0 x ptr] +// CHECK-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] {{11|14}} +// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 0, ptr [[FIELDS]]) +// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [0 x ptr], ptr [[FIELDS]], i32 0, i32 0 // -- ClassLayoutFlags = 0x100 (HasStaticVTable) -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 0, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 0, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) // CHECK-NEXT: [[INITDEP_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NEXT: [[INITDEP_STATUS:%.*]] = extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq %swift.type* [[INITDEP_METADATA]], null +// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq ptr [[INITDEP_METADATA]], null // CHECK-NEXT: br i1 [[INITDEP_PRESENT]], label %dependency-satisfied, label %metadata-dependencies.cont // CHECK: dependency-satisfied: // CHECK: br label %metadata-dependencies.cont // CHECK: metadata-dependencies.cont: -// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi %swift.type* [ [[INITDEP_METADATA]], %entry ], [ null, %dependency-satisfied ] +// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi ptr [ [[INITDEP_METADATA]], %entry ], [ null, %dependency-satisfied ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ [[INITDEP_STATUS]], %entry ], [ 0, %dependency-satisfied ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[PENDING_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[PENDING_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] @@ -291,20 +275,20 @@ bb0(%0 : $ClassWithResilientField): // CHECK-LABEL: define swiftcc %swift.metadata_response @"$s39class_update_callback_with_fixed_layout22ClassWithResilientEnumCMa -// CHECK: [[CACHE:%.*]] = load %swift.type*, %swift.type** getelementptr inbounds ({ %swift.type*, i8* }, { %swift.type*, i8* }* @"$s39class_update_callback_with_fixed_layout22ClassWithResilientEnumCMl", i32 0, i32 0) -// CHECK-NEXT: [[COND:%.*]] = icmp eq %swift.type* [[CACHE]], null +// CHECK: [[CACHE:%.*]] = load ptr, ptr @"$s39class_update_callback_with_fixed_layout22ClassWithResilientEnumCMl" +// CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, %swift.type_descriptor* bitcast ({{.*}} @"$s39class_update_callback_with_fixed_layout22ClassWithResilientEnumCMn" to %swift.type_descriptor*)) +// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s39class_update_callback_with_fixed_layout22ClassWithResilientEnumCMn") // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 // CHECK-NEXT: [[STATUS:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 1 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi %swift.type* [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] +// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 0, %entry ], [ [[STATUS]], %cacheIsNull ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[NEW_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[NEW_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] diff --git a/test/IRGen/class_update_callback_without_fixed_layout.sil b/test/IRGen/class_update_callback_without_fixed_layout.sil index 6138b38895b7d..a124d7a30643b 100644 --- a/test/IRGen/class_update_callback_without_fixed_layout.sil +++ b/test/IRGen/class_update_callback_without_fixed_layout.sil @@ -73,7 +73,7 @@ sil_vtable SubclassOfClassWithResilientField {} // CHECK-LABEL: @"$s42class_update_callback_without_fixed_layout33SubclassOfClassWithResilientFieldCMf" = internal global <{{.*}}> <{ // Superclass field is filled in dynamically: -// CHECK-OLD-SAME: i8* null, +// CHECK-OLD-SAME: ptr null, // Superclass field is filled in statically: // CHECK-NEW-SAME: @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMf" @@ -121,40 +121,31 @@ bb0: // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMa"([[INT]] 0) // CHECK-NEXT: [[META:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[META_ADDR:%.*]] = bitcast %swift.type* [[META]] to i8* -// CHECK-32-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 28 -// CHECK-64-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 48 -// CHECK-NEXT: [[SIZE_PTR:%.*]] = bitcast i8* [[SIZE_ADDR]] to i32* -// CHECK-32-NEXT: [[SIZE:%.*]] = load i32, i32* [[SIZE_PTR]] -// CHECK-64-NEXT: [[SIZE_2:%.*]] = load i32, i32* [[SIZE_PTR]] +// CHECK-32-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 28 +// CHECK-64-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 48 +// CHECK-32-NEXT: [[SIZE:%.*]] = load i32, ptr [[SIZE_ADDR]] +// CHECK-64-NEXT: [[SIZE_2:%.*]] = load i32, ptr [[SIZE_ADDR]] // CHECK-64-NEXT: [[SIZE:%.*]] = zext i32 [[SIZE_2]] to i64 -// CHECK-32-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 32 -// CHECK-64-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 52 -// CHECK-NEXT: [[ALIGN_PTR:%.*]] = bitcast i8* [[ALIGN_ADDR]] to i16* -// CHECK-NEXT: [[ALIGN_2:%.*]] = load i16, i16* [[ALIGN_PTR]] +// CHECK-32-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 32 +// CHECK-64-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 52 +// CHECK-NEXT: [[ALIGN_2:%.*]] = load i16, ptr [[ALIGN_ADDR]] // CHECK-NEXT: [[ALIGN:%.*]] = zext i16 [[ALIGN_2]] to [[INT]] -// CHECK-NEXT: [[ALLOC:%.*]] = call noalias %swift.refcounted* @swift_allocObject(%swift.type* [[META]], [[INT]] [[SIZE]], [[INT]] [[ALIGN]]) +// CHECK-NEXT: [[ALLOC:%.*]] = call noalias ptr @swift_allocObject(ptr [[META]], [[INT]] [[SIZE]], [[INT]] [[ALIGN]]) %c = alloc_ref $ClassWithResilientField // ... dealloc_ref also does the same thing. -// CHECK-NEXT: [[SELF:%.*]] = bitcast %swift.refcounted* [[ALLOC]] to %T42class_update_callback_without_fixed_layout23ClassWithResilientFieldC* -// CHECK-NEXT: [[ISA_ADDR:%.*]] = bitcast %T42class_update_callback_without_fixed_layout23ClassWithResilientFieldC* [[SELF]] to %swift.type** -// CHECK-NEXT: [[META:%.*]] = load %swift.type*, %swift.type** [[ISA_ADDR]] -// CHECK-NEXT: [[META_ADDR:%.*]] = bitcast %swift.type* [[META]] to i8* -// CHECK-32-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 28 -// CHECK-64-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 48 -// CHECK-NEXT: [[SIZE_PTR:%.*]] = bitcast i8* [[SIZE_ADDR]] to i32* -// CHECK-32-NEXT: [[SIZE:%.*]] = load i32, i32* [[SIZE_PTR]] -// CHECK-64-NEXT: [[SIZE_2:%.*]] = load i32, i32* [[SIZE_PTR]] +// CHECK-NEXT: [[META:%.*]] = load ptr, ptr [[ALLOC]] +// CHECK-32-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 28 +// CHECK-64-NEXT: [[SIZE_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 48 +// CHECK-32-NEXT: [[SIZE:%.*]] = load i32, ptr [[SIZE_ADDR]] +// CHECK-64-NEXT: [[SIZE_2:%.*]] = load i32, ptr [[SIZE_ADDR]] // CHECK-64-NEXT: [[SIZE:%.*]] = zext i32 [[SIZE_2]] to i64 -// CHECK-32-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 32 -// CHECK-64-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, i8* [[META_ADDR]], i32 52 -// CHECK-NEXT: [[ALIGN_PTR:%.*]] = bitcast i8* [[ALIGN_ADDR]] to i16* -// CHECK-NEXT: [[ALIGN_2:%.*]] = load i16, i16* [[ALIGN_PTR]] +// CHECK-32-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 32 +// CHECK-64-NEXT: [[ALIGN_ADDR:%.*]] = getelementptr inbounds i8, ptr [[META]], i32 52 +// CHECK-NEXT: [[ALIGN_2:%.*]] = load i16, ptr [[ALIGN_ADDR]] // CHECK-NEXT: [[ALIGN:%.*]] = zext i16 [[ALIGN_2]] to [[INT]] -// CHECK-NEXT: [[ALLOC:%.*]] = bitcast %T42class_update_callback_without_fixed_layout23ClassWithResilientFieldC* [[SELF]] to %swift.refcounted* -// CHECK-NEXT: call void @swift_deallocClassInstance(%swift.refcounted* [[ALLOC]], [[INT]] [[SIZE]], [[INT]] [[ALIGN]]) +// CHECK-NEXT: call void @swift_deallocClassInstance(ptr [[ALLOC]], [[INT]] [[SIZE]], [[INT]] [[ALIGN]]) dealloc_ref %c : $ClassWithResilientField %result = tuple () @@ -166,20 +157,20 @@ bb0: // CHECK-LABEL: define swiftcc %swift.metadata_response @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMa -// CHECK: [[CACHE:%.*]] = load %swift.type*, %swift.type** getelementptr inbounds ({ %swift.type*, i8* }, { %swift.type*, i8* }* @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMl", i32 0, i32 0) -// CHECK-NEXT: [[COND:%.*]] = icmp eq %swift.type* [[CACHE]], null +// CHECK: [[CACHE:%.*]] = load ptr, ptr @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMl" +// CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, %swift.type_descriptor* bitcast ({{.*}} @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMn" to %swift.type_descriptor*)) +// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMn") // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 // CHECK-NEXT: [[STATUS:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 1 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi %swift.type* [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] +// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 0, %entry ], [ [[STATUS]], %cacheIsNull ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[NEW_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[NEW_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] @@ -187,20 +178,18 @@ bb0: // Accessing a field whose offset depends on resilient types should // use the field offset global. -// CHECK-32-LABEL: define swiftcc {{(dllexport )?}}{{(protected )?}}i32 @accessClassWithResilientField(%T42class_update_callback_without_fixed_layout23ClassWithResilientFieldC* %0) -// CHECK-64-LABEL: define swiftcc {{(dllexport )?}}{{(protected )?}}i64 @accessClassWithResilientField(%T42class_update_callback_without_fixed_layout23ClassWithResilientFieldC* %0) +// CHECK-32-LABEL: define swiftcc {{(dllexport )?}}{{(protected )?}}i32 @accessClassWithResilientField(ptr %0) +// CHECK-64-LABEL: define swiftcc {{(dllexport )?}}{{(protected )?}}i64 @accessClassWithResilientField(ptr %0) sil @accessClassWithResilientField : $@convention(thin) (@guaranteed ClassWithResilientField) -> Int { bb0(%0 : $ClassWithResilientField): -// CHECK: [[OFFSET:%.*]] = load [[INT]], [[INT]]* @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldC5thirdSivpWvd" -// CHECK-NEXT: [[SELF_ADDR:%.*]] = bitcast %T42class_update_callback_without_fixed_layout23ClassWithResilientFieldC* %0 to i8* -// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, i8* [[SELF_ADDR]], [[INT]] [[OFFSET]] -// CHECK-NEXT: [[FIELD_PTR2:%.*]] = bitcast i8* [[FIELD_ADDR]] to %TSi* -// CHECK-NEXT: [[FIELD_PTR:%.*]] = getelementptr inbounds %TSi, %TSi* [[FIELD_PTR2]], i32 0, i32 0 +// CHECK: [[OFFSET:%.*]] = load [[INT]], ptr @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldC5thirdSivpWvd" +// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, ptr %0, [[INT]] [[OFFSET]] +// CHECK-NEXT: [[FIELD_PTR:%.*]] = getelementptr inbounds %TSi, ptr [[FIELD_ADDR]], i32 0, i32 0 %1 = ref_element_addr %0 : $ClassWithResilientField, #ClassWithResilientField.third -// CHECK-NEXT: [[VALUE:%.*]] = load [[INT]], [[INT]]* [[FIELD_PTR]] +// CHECK-NEXT: [[VALUE:%.*]] = load [[INT]], ptr [[FIELD_PTR]] %2 = load %1 : $*Int // CHECK-NEXT: ret [[INT]] [[VALUE]] @@ -210,30 +199,27 @@ bb0(%0 : $ClassWithResilientField): // Objective-C metadata update callback function for ClassWithResilientField: -// CHECK-OLD-NOT: define internal %objc_class* @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMU"(%objc_class* %0, i8* %1) +// CHECK-OLD-NOT: define internal ptr @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMU"(ptr %0, ptr %1) -// CHECK-NEW-LABEL: define internal %objc_class* @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMU"(%objc_class* %0, i8* %1) +// CHECK-NEW-LABEL: define internal ptr @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMU"(ptr %0, ptr %1) // CHECK-NEW: entry: // CHECK-NEW-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMa"([[INT]] 0) // CHECK-NEW-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 -// CHECK-NEW-NEXT: [[RESULT:%.*]] = bitcast %swift.type* [[METADATA]] to %objc_class* -// CHECK-NEW-NEXT: ret %objc_class* [[RESULT]] +// CHECK-NEW-NEXT: ret ptr [[METADATA]] // Metadata initialization function for ClassWithResilientField calls swift_updateClassMetadata2() // with the new deployment target: -// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMr"(%swift.type* %0, i8* %1, i8** %2) +// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldCMr"(ptr %0, ptr %1, ptr %2) // CHECK: entry: -// CHECK-NEXT: [[FIELDS:%.*]] = alloca [3 x i8**] -// CHECK-NEXT: [[METADATA_ADDR:%.*]] = bitcast %swift.type* %0 to [[INT]]* -// CHECK-32-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_ADDR]], [[INT]] 13 -// CHECK-64-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_ADDR]], [[INT]] 10 -// CHECK-NEXT: [[FIELDS_ADDR:%.*]] = bitcast [3 x i8**]* [[FIELDS]] to i8* -// CHECK-32-NEXT: call void @llvm.lifetime.start.p0i8(i64 12, i8* [[FIELDS_ADDR]]) -// CHECK-64-NEXT: call void @llvm.lifetime.start.p0i8(i64 24, i8* [[FIELDS_ADDR]]) -// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [3 x i8**], [3 x i8**]* [[FIELDS]], i32 0, i32 0 +// CHECK-NEXT: [[FIELDS:%.*]] = alloca [3 x ptr] +// CHECK-32-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] 13 +// CHECK-64-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] 10 +// CHECK-32-NEXT: call void @llvm.lifetime.start.p0(i64 12, ptr [[FIELDS]]) +// CHECK-64-NEXT: call void @llvm.lifetime.start.p0(i64 24, ptr [[FIELDS]]) +// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [3 x ptr], ptr [[FIELDS]], i32 0, i32 0 // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s16resilient_struct4SizeVMa"([[INT]] 319) // CHECK-NEXT: [[SIZE_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 @@ -244,60 +230,58 @@ bb0(%0 : $ClassWithResilientField): // CHECK: dependency-satisfied: // -- ClassLayoutFlags = 0x100 (HasStaticVTable) -// CHECK-OLD: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 3, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) -// CHECK-NEW: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 3, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) +// CHECK-OLD: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 3, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) +// CHECK-NEW: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 3, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) // CHECK-NEXT: [[INITDEP_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NEXT: [[INITDEP_STATUS:%.*]] = extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq %swift.type* [[INITDEP_METADATA]], null +// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq ptr [[INITDEP_METADATA]], null // CHECK-NEXT: br i1 [[INITDEP_PRESENT]], label %dependency-satisfied1, label %metadata-dependencies.cont // CHECK: dependency-satisfied1: -// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* {{.*}} -// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldC1s16resilient_struct4SizeVvpWvd" +// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr {{.*}} +// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], ptr @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldC1s16resilient_struct4SizeVvpWvd" -// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], [[INT]]* {{.*}} -// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], [[INT]]* @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldC5colors5Int32VvpWvd" +// CHECK-native: [[FIELD_OFFSET:%.*]] = load [[INT]], ptr {{.*}} +// CHECK-native-NEXT: store [[INT]] [[FIELD_OFFSET]], ptr @"$s42class_update_callback_without_fixed_layout23ClassWithResilientFieldC5colors5Int32VvpWvd" // CHECK: br label %metadata-dependencies.cont // CHECK: metadata-dependencies.cont: -// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi %swift.type* [ [[SIZE_METADATA]], %entry ], [ [[INITDEP_METADATA]], %dependency-satisfied ], [ null, %dependency-satisfied1 ] +// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi ptr [ [[SIZE_METADATA]], %entry ], [ [[INITDEP_METADATA]], %dependency-satisfied ], [ null, %dependency-satisfied1 ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 63, %entry ], [ [[INITDEP_STATUS]], %dependency-satisfied ], [ 0, %dependency-satisfied1 ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[PENDING_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[PENDING_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] // Metadata initialization function for SubclassOfClassWithResilientField: -// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s42class_update_callback_without_fixed_layout33SubclassOfClassWithResilientFieldCMr"(%swift.type* %0, i8* %1, i8** %2) +// CHECK-LABEL: define internal swiftcc %swift.metadata_response @"$s42class_update_callback_without_fixed_layout33SubclassOfClassWithResilientFieldCMr"(ptr %0, ptr %1, ptr %2) // CHECK: entry: -// CHECK-NEXT: [[FIELDS:%.*]] = alloca [0 x i8**] -// CHECK-NEXT: [[METADATA_ADDR:%.*]] = bitcast %swift.type* %0 to [[INT]]* -// CHECK-32-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_ADDR]], [[INT]] 17 -// CHECK-64-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], [[INT]]* [[METADATA_ADDR]], [[INT]] 14 -// CHECK-NEXT: [[FIELDS_ADDR:%.*]] = bitcast [0 x i8**]* [[FIELDS]] to i8* -// CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 0, i8* [[FIELDS_ADDR]]) -// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [0 x i8**], [0 x i8**]* [[FIELDS]], i32 0, i32 0 +// CHECK-NEXT: [[FIELDS:%.*]] = alloca [0 x ptr] +// CHECK-32-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] 17 +// CHECK-64-NEXT: [[FIELDS_DEST:%.*]] = getelementptr inbounds [[INT]], ptr %0, [[INT]] 14 +// CHECK-NEXT: call void @llvm.lifetime.start.p0(i64 0, ptr [[FIELDS]]) +// CHECK-NEXT: [[FIELDS_PTR:%.*]] = getelementptr inbounds [0 x ptr], ptr [[FIELDS]], i32 0, i32 0 // -- ClassLayoutFlags = 0x100 (HasStaticVTable) -// CHECK-OLD: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 0, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) -// CHECK-NEW: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(%swift.type* %0, [[INT]] 256, [[INT]] 0, i8*** [[FIELDS_PTR]], [[INT]]* [[FIELDS_DEST]]) +// CHECK-OLD: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_initClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 0, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) +// CHECK-NEW: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_updateClassMetadata2(ptr %0, [[INT]] 256, [[INT]] 0, ptr [[FIELDS_PTR]], ptr [[FIELDS_DEST]]) // CHECK-NEXT: [[INITDEP_METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NEXT: [[INITDEP_STATUS:%.*]] = extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq %swift.type* [[INITDEP_METADATA]], null +// CHECK-NEXT: [[INITDEP_PRESENT:%.*]] = icmp eq ptr [[INITDEP_METADATA]], null // CHECK-NEXT: br i1 [[INITDEP_PRESENT]], label %dependency-satisfied, label %metadata-dependencies.cont // CHECK: dependency-satisfied: // CHECK: br label %metadata-dependencies.cont // CHECK: metadata-dependencies.cont: -// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi %swift.type* [ [[INITDEP_METADATA]], %entry ], [ null, %dependency-satisfied ] +// CHECK-NEXT: [[PENDING_METADATA:%.*]] = phi ptr [ [[INITDEP_METADATA]], %entry ], [ null, %dependency-satisfied ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ [[INITDEP_STATUS]], %entry ], [ 0, %dependency-satisfied ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[PENDING_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[PENDING_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] @@ -305,20 +289,20 @@ bb0(%0 : $ClassWithResilientField): // CHECK-LABEL: define swiftcc %swift.metadata_response @"$s42class_update_callback_without_fixed_layout22ClassWithResilientEnumCMa -// CHECK: [[CACHE:%.*]] = load %swift.type*, %swift.type** getelementptr inbounds ({ %swift.type*, i8* }, { %swift.type*, i8* }* @"$s42class_update_callback_without_fixed_layout22ClassWithResilientEnumCMl", i32 0, i32 0) -// CHECK-NEXT: [[COND:%.*]] = icmp eq %swift.type* [[CACHE]], null +// CHECK: [[CACHE:%.*]] = load ptr, ptr @"$s42class_update_callback_without_fixed_layout22ClassWithResilientEnumCMl" +// CHECK-NEXT: [[COND:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[COND]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, %swift.type_descriptor* bitcast ({{.*}} @"$s42class_update_callback_without_fixed_layout22ClassWithResilientEnumCMn" to %swift.type_descriptor*)) +// CHECK-NEXT: [[RESPONSE:%.*]] = call swiftcc %swift.metadata_response @swift_getSingletonMetadata([[INT]] %0, ptr @"$s42class_update_callback_without_fixed_layout22ClassWithResilientEnumCMn") // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 0 // CHECK-NEXT: [[STATUS:%.*]] = extractvalue %swift.metadata_response [[RESPONSE]], 1 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi %swift.type* [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] +// CHECK-NEXT: [[NEW_METADATA:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[METADATA]], %cacheIsNull ] // CHECK-NEXT: [[NEW_STATUS:%.*]] = phi [[INT]] [ 0, %entry ], [ [[STATUS]], %cacheIsNull ] -// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, %swift.type* [[NEW_METADATA]], 0 +// CHECK-NEXT: [[T0:%.*]] = insertvalue %swift.metadata_response undef, ptr [[NEW_METADATA]], 0 // CHECK-NEXT: [[T1:%.*]] = insertvalue %swift.metadata_response [[T0]], [[INT]] [[NEW_STATUS]], 1 // CHECK-NEXT: ret %swift.metadata_response [[T1]] diff --git a/test/IRGen/class_update_callback_without_fixed_layout_stable_abi.sil b/test/IRGen/class_update_callback_without_fixed_layout_stable_abi.sil index 03c8fe7dabe3f..c674f02631a36 100644 --- a/test/IRGen/class_update_callback_without_fixed_layout_stable_abi.sil +++ b/test/IRGen/class_update_callback_without_fixed_layout_stable_abi.sil @@ -1,8 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_struct.swiftmodule -module-name=resilient_struct %S/../Inputs/resilient_struct.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -enable-library-evolution %S/class_update_callback_without_fixed_layout.sil -target %target-stable-abi-triple | %FileCheck %S/class_update_callback_without_fixed_layout.sil --check-prefix=CHECK --check-prefix=CHECK-NEW --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-NEW-%target-ptrsize -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %S/class_update_callback_without_fixed_layout.sil -target %target-stable-abi-triple +// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %S/class_update_callback_without_fixed_layout.sil -target %target-stable-abi-triple | %FileCheck %S/class_update_callback_without_fixed_layout.sil --check-prefix=CHECK --check-prefix=CHECK-NEW --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-NEW-%target-ptrsize -DINT=i%target-ptrsize // RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution -O %S/class_update_callback_without_fixed_layout.sil -target %target-stable-abi-triple // REQUIRES: objc_interop diff --git a/test/IRGen/class_with_stub_initializers.swift b/test/IRGen/class_with_stub_initializers.swift index 4c1cc0b330101..29bf9c819f4a9 100644 --- a/test/IRGen/class_with_stub_initializers.swift +++ b/test/IRGen/class_with_stub_initializers.swift @@ -1,18 +1,16 @@ // RUN: %empty-directory(%t) // RUN: %build-irgen-test-overlays -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %use_no_opaque_pointers %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %s -emit-ir +// RUN: %target-swift-frontend(mock-sdk: -sdk %S/Inputs -I %t) %s -emit-ir | %FileCheck %s // REQUIRES: objc_interop import Foundation - -// CHECK: @"$s28class_with_stub_initializers3FooCN" = +// CHECK: @"$s28class_with_stub_initializers3FooCMf" = +// CHECK-NOT: s28class_with_stub_initializers3FooCACycfc // -- The init() stub should get no vtable entry -// CHECK-NOT: %T28class_with_stub_initializers3FooC* (%swift.type*)* -// CHECK: %T28class_with_stub_initializers3FooC* (i64, %swift.type*)* +// CHECK: s28class_with_stub_initializers3FooC1xACs5Int64V_tcfC +// CHECK-NOT: s28class_with_stub_initializers3FooCACycfc // -- The init() stub should get no vtable entry -// CHECK-NOT: %T28class_with_stub_initializers3FooC* (%swift.type*)* // CHECK: {{^(@|define)}} class Foo: NSObject { init(x: Int64) { super.init() } diff --git a/test/IRGen/closure.swift b/test/IRGen/closure.swift index eb3b5b6e29f39..03912171f727e 100644 --- a/test/IRGen/closure.swift +++ b/test/IRGen/closure.swift @@ -1,7 +1,6 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -primary-file %s -emit-ir -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir | %FileCheck %s --check-prefix=CAPTURE -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -O -emit-ir | %FileCheck %s --check-prefix=OPT +// RUN: %target-swift-frontend -primary-file %s -emit-ir | %FileCheck %s +// RUN: %target-swift-frontend -primary-file %s -emit-ir | %FileCheck %s --check-prefix=CAPTURE +// RUN: %target-swift-frontend -primary-file %s -O -emit-ir | %FileCheck %s --check-prefix=OPT // REQUIRES: PTRSIZE=64 @@ -10,7 +9,7 @@ // -- partial_apply context metadata -// CHECK-DAG: [[METADATA:@.*]] = private constant %swift.full_boxmetadata { void (%swift.refcounted*)* {{.*}}@objectdestroy{{(\.ptrauth.*)?}}, i8** null, %swift.type { i64 1024 }, i32 16, i8* bitcast ({ i32, i32, i32, i32 }* @"\01l__swift5_reflection_descriptor" to i8*) } +// CHECK-DAG: [[METADATA:@.*]] = private constant %swift.full_boxmetadata { ptr {{.*}}@objectdestroy{{(\.ptrauth.*)?}}, ptr null, %swift.type { i64 1024 }, i32 16, ptr @"\01l__swift5_reflection_descriptor" } func a(i i: Int) -> (Int) -> Int { return { x in i } @@ -28,30 +27,27 @@ func b(seq seq: T) -> (Int) -> Int { } // -- partial_apply stub -// CHECK: define internal swiftcc i64 @"$s7closure1a1iS2icSi_tFS2icfU_TA"(i64 %0, %swift.refcounted* swiftself %1) +// CHECK: define internal swiftcc i64 @"$s7closure1a1iS2icSi_tFS2icfU_TA"(i64 %0, ptr swiftself %1) // CHECK: } // -- Closure entry point -// CHECK: define internal swiftcc i64 @"$s7closure1b3seqS2icx_tAA9OrdinableRzlFS2icfU_"(i64 %0, %swift.opaque* noalias nocapture %1, %swift.type* %T, i8** %T.Ordinable) {{.*}} { +// CHECK: define internal swiftcc i64 @"$s7closure1b3seqS2icx_tAA9OrdinableRzlFS2icfU_"(i64 %0, ptr noalias nocapture %1, ptr %T, ptr %T.Ordinable) {{.*}} { // -- partial_apply stub -// CHECK: define internal swiftcc i64 @"$s7closure1b3seqS2icx_tAA9OrdinableRzlFS2icfU_TA"(i64 %0, %swift.refcounted* swiftself %1) {{.*}} { +// CHECK: define internal swiftcc i64 @"$s7closure1b3seqS2icx_tAA9OrdinableRzlFS2icfU_TA"(i64 %0, ptr swiftself %1) {{.*}} { // CHECK: entry: -// CHECK: [[CONTEXT:%.*]] = bitcast %swift.refcounted* %1 to <{ %swift.refcounted, [16 x i8] }>* -// CHECK: [[BINDINGSADDR:%.*]] = getelementptr inbounds <{ %swift.refcounted, [16 x i8] }>, <{ %swift.refcounted, [16 x i8] }>* [[CONTEXT]], i32 0, i32 1 -// CHECK: [[TYPEADDR:%.*]] = bitcast [16 x i8]* [[BINDINGSADDR]] -// CHECK: [[TYPE:%.*]] = load %swift.type*, %swift.type** [[TYPEADDR]], align 8 -// CHECK: [[WITNESSADDR_0:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[TYPEADDR]], i32 1 -// CHECK: [[WITNESSADDR:%.*]] = bitcast %swift.type** [[WITNESSADDR_0]] -// CHECK: [[WITNESS:%.*]] = load i8**, i8*** [[WITNESSADDR]], align 8 -// CHECK: [[RES:%.*]] = tail call swiftcc i64 @"$s7closure1b3seqS2icx_tAA9OrdinableRzlFS2icfU_"(i64 %0, %swift.opaque* noalias nocapture {{.*}}, %swift.type* [[TYPE]], i8** [[WITNESS]]) +// CHECK: [[BINDINGSADDR:%.*]] = getelementptr inbounds <{ %swift.refcounted, [16 x i8] }>, ptr %1, i32 0, i32 1 +// CHECK: [[TYPE:%.*]] = load ptr, ptr [[BINDINGSADDR]], align 8 +// CHECK: [[WITNESSADDR:%.*]] = getelementptr inbounds ptr, ptr [[BINDINGSADDR]], i32 1 +// CHECK: [[WITNESS:%.*]] = load ptr, ptr [[WITNESSADDR]], align 8 +// CHECK: [[RES:%.*]] = tail call swiftcc i64 @"$s7closure1b3seqS2icx_tAA9OrdinableRzlFS2icfU_"(i64 %0, ptr noalias nocapture {{.*}}, ptr [[TYPE]], ptr [[WITNESS]]) // CHECK: ret i64 [[RES]] // CHECK: } // -- Boxing of tuples with generic elements -// CHECK: define hidden swiftcc { i8*, %swift.refcounted* } @"$s7closure14captures_tuple1xx_q_tycx_q_t_tr0_lF"(%swift.opaque* noalias nocapture %0, %swift.opaque* noalias nocapture %1, %swift.type* %T, %swift.type* %U) +// CHECK: define hidden swiftcc { ptr, ptr } @"$s7closure14captures_tuple1xx_q_tycx_q_t_tr0_lF"(ptr noalias nocapture %0, ptr noalias nocapture %1, ptr %T, ptr %U) func captures_tuple(x x: (T, U)) -> () -> (T, U) { - // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata2(i64 0, %swift.type* %T, %swift.type* %U, i8* null, i8** null) + // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @swift_getTupleTypeMetadata2(i64 0, ptr %T, ptr %U, ptr null, ptr null) // CHECK-NEXT: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NOT: @swift_getTupleTypeMetadata2 // CHECK: ret @@ -67,10 +63,10 @@ func no_capture_descriptor(_ c: C, _ d: C, _ e: C, _ f: C, _ g: C) { useClosure( { _ = c ; _ = d ; _ = e ; _ = f ; _ = g }) } -// CHECK-LABEL: define hidden swiftcc { i8*, %swift.refcounted* } @"$s7closure9letEscape1fyycyyXE_tF"(i8* %0, %swift.opaque* %1) -// CHECK: call zeroext i1 @swift_isEscapingClosureAtFileLocation(%swift.refcounted* {{.*}}, i8* getelementptr inbounds ({{.*}} [[FILENAME]] -// OPT-LABEL: define hidden swiftcc { i8*, %swift.refcounted* } @"$s7closure9letEscape1fyycyyXE_tF"(i8* %0, %swift.opaque* %1) -// OPT: call zeroext i1 @swift_isEscapingClosureAtFileLocation(%swift.refcounted* {{.*}}, i8* {{(nonnull )?}}getelementptr inbounds ({{.*}} [[FILENAME]] +// CHECK-LABEL: define hidden swiftcc { ptr, ptr } @"$s7closure9letEscape1fyycyyXE_tF"(ptr %0, ptr %1) +// CHECK: call zeroext i1 @swift_isEscapingClosureAtFileLocation(ptr {{.*}}, ptr [[FILENAME]] +// OPT-LABEL: define hidden swiftcc { ptr, ptr } @"$s7closure9letEscape1fyycyyXE_tF"(ptr %0, ptr %1) +// OPT: call zeroext i1 @swift_isEscapingClosureAtFileLocation(ptr {{.*}}, ptr {{(nonnull )?}}[[FILENAME]] func letEscape(f: () -> ()) -> () -> () { return withoutActuallyEscaping(f) { return $0 } } diff --git a/test/IRGen/conditional-dead-strip-ir.swift b/test/IRGen/conditional-dead-strip-ir.swift index 0807e810a5719..250b6407dda17 100644 --- a/test/IRGen/conditional-dead-strip-ir.swift +++ b/test/IRGen/conditional-dead-strip-ir.swift @@ -2,8 +2,7 @@ // enum, protocol, and protocol conformance records as conditionally removable // via !llvm.used.conditional metadata. -// RUN: %target-build-swift %use_no_opaque_pointers -Xfrontend -conditional-runtime-records -Xfrontend -disable-objc-interop %s -emit-ir -o - | %FileCheck %s -// RUN: %target-build-swift -Xfrontend -conditional-runtime-records -Xfrontend -disable-objc-interop %s -emit-ir -o - +// RUN: %target-build-swift -Xfrontend -conditional-runtime-records -Xfrontend -disable-objc-interop %s -emit-ir -o - | %FileCheck %s public protocol TheProtocol { } @@ -36,8 +35,7 @@ public enum Enum { // CHECK-DAG: [[M4]] = !{{{.*}} @"$s4main4EnumOMF", i32 0, [[M4A:!.*]]} // CHECK-DAG: [[M4A]] = {{.*}} @"$s4main4EnumOMn" -// CHECK-DAG: [[C1]] = !{{{.*}} @"$s4main11TheProtocolHr", i32 0, [[C1A:!.*]]} -// CHECK-DAG: [[C1A]] = {{.*}} @"$s4main11TheProtocolMp"} +// CHECK-DAG: [[C1]] = !{{{.*}} @"$s4main11TheProtocolHr", i32 0, [[M1A:!.*]]} // CHECK-DAG: [[C2]] = !{{{.*}} @"$s4main5ClassCAA11TheProtocolAAHc", i32 1, [[C2A:!.*]]} // CHECK-DAG: [[C2A]] = {{.*}} @"$s4main11TheProtocolMp", {{.*}} @"$s4main5ClassCMn"} diff --git a/test/IRGen/conditional_conformances.swift b/test/IRGen/conditional_conformances.swift index 28ae22f52d592..964a2ecb783e5 100644 --- a/test/IRGen/conditional_conformances.swift +++ b/test/IRGen/conditional_conformances.swift @@ -1,14 +1,7 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift | %FileCheck %S/../Inputs/conditional_conformance_basic_conformances.swift --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_with_assoc.swift | %FileCheck %S/../Inputs/conditional_conformance_with_assoc.swift --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_subclass.swift | %FileCheck %S/../Inputs/conditional_conformance_subclass.swift --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_recursive.swift | %FileCheck %S/../Inputs/conditional_conformance_recursive.swift --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi - -// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift -// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_with_assoc.swift -// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_subclass.swift -// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_recursive.swift - +// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift | %FileCheck %S/../Inputs/conditional_conformance_basic_conformances.swift --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi +// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_with_assoc.swift | %FileCheck %S/../Inputs/conditional_conformance_with_assoc.swift --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi +// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_subclass.swift | %FileCheck %S/../Inputs/conditional_conformance_subclass.swift --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi +// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -emit-ir %S/../Inputs/conditional_conformance_recursive.swift | %FileCheck %S/../Inputs/conditional_conformance_recursive.swift --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi // Too many pointer-sized integers in the IR // REQUIRES: PTRSIZE=64 - diff --git a/test/IRGen/conditional_conformances_future.swift b/test/IRGen/conditional_conformances_future.swift index 6121f8e879bbd..2024ed49c4e28 100644 --- a/test/IRGen/conditional_conformances_future.swift +++ b/test/IRGen/conditional_conformances_future.swift @@ -1,14 +1,8 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift | %FileCheck %S/../Inputs/conditional_conformance_basic_conformances_future.swift -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=%target-os -// RUN: %target-swift-frontend %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_with_assoc.swift | %FileCheck %S/../Inputs/conditional_conformance_with_assoc_future.swift -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi -// RUN: %target-swift-frontend %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_subclass.swift | %FileCheck %S/../Inputs/conditional_conformance_subclass_future.swift -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi -// RUN: %target-swift-frontend %use_no_opaque_pointers -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_recursive.swift | %FileCheck %S/../Inputs/conditional_conformance_recursive.swift -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi - -// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift -// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_with_assoc.swift -// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_subclass.swift -// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_recursive.swift +// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift | %FileCheck %S/../Inputs/conditional_conformance_basic_conformances_future.swift -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=%target-os +// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_with_assoc.swift | %FileCheck %S/../Inputs/conditional_conformance_with_assoc_future.swift -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi +// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_subclass.swift | %FileCheck %S/../Inputs/conditional_conformance_subclass_future.swift -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi +// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %module-target-future -emit-ir %S/../Inputs/conditional_conformance_recursive.swift | %FileCheck %S/../Inputs/conditional_conformance_recursive.swift -DINT=i%target-ptrsize --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-%target-mandates-stable-abi // Too many pointer-sized integers in the IR // REQUIRES: PTRSIZE=64 // REQUIRES: VENDOR=apple || OS=linux-gnu - diff --git a/test/IRGen/conditional_conformances_gettypemetdatabyname.swift b/test/IRGen/conditional_conformances_gettypemetdatabyname.swift index 5ce41aa8a6e8f..4339574bbb2d6 100644 --- a/test/IRGen/conditional_conformances_gettypemetdatabyname.swift +++ b/test/IRGen/conditional_conformances_gettypemetdatabyname.swift @@ -1,12 +1,7 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-generic-metadata-prespecialization -target %target-cpu-apple-macosx10.15.4 -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift | %FileCheck %S/../Inputs/conditional_conformance_basic_conformances.swift --check-prefix=TYPEBYNAME -// RUN: %target-swift-frontend %use_no_opaque_pointers -prespecialize-generic-metadata -target %target-cpu-apple-macosx99.99 -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift | %FileCheck %S/../Inputs/conditional_conformance_basic_conformances.swift --check-prefix=TYPEBYNAME_PRESPECIALIZED -// RUN: %target-swift-frontend %use_no_opaque_pointers -target %target-cpu-apple-macosx10.15.4 -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift | %FileCheck %S/../Inputs/conditional_conformance_basic_conformances.swift --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-TRUE - -// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -target %target-cpu-apple-macosx10.15.4 -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift -// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %target-cpu-apple-macosx99.99 -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift -// RUN: %target-swift-frontend -target %target-cpu-apple-macosx10.15.4 -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift +// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization -target %target-cpu-apple-macosx10.15.4 -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift | %FileCheck %S/../Inputs/conditional_conformance_basic_conformances.swift --check-prefix=TYPEBYNAME +// RUN: %target-swift-frontend -prespecialize-generic-metadata -target %target-cpu-apple-macosx99.99 -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift | %FileCheck %S/../Inputs/conditional_conformance_basic_conformances.swift --check-prefix=TYPEBYNAME_PRESPECIALIZED +// RUN: %target-swift-frontend -target %target-cpu-apple-macosx10.15.4 -emit-ir %S/../Inputs/conditional_conformance_basic_conformances.swift | %FileCheck %S/../Inputs/conditional_conformance_basic_conformances.swift --check-prefix=CHECK --check-prefix=CHECK-STABLE-ABI-TRUE // Too many pointer-sized integers in the IR // REQUIRES: PTRSIZE=64 // REQUIRES: OS=macosx - diff --git a/test/IRGen/conformance_access_path.swift b/test/IRGen/conformance_access_path.swift index 10a928328a079..4a03e308721e4 100644 --- a/test/IRGen/conformance_access_path.swift +++ b/test/IRGen/conformance_access_path.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -primary-file %s -emit-ir > %t.ll -// RUN: %target-swift-frontend -primary-file %s -emit-ir +// RUN: %target-swift-frontend -primary-file %s -emit-ir > %t.ll // RUN: %FileCheck %s < %t.ll @@ -18,10 +17,9 @@ extension Validatable { // CHECK-LABEL: define{{.*}}$s23conformance_access_path11ValidatablePAAE6tested2byyqd__m_t9InputTypeQyd__RszAA15ValidationSuiteRd__lF public func tested(by suite: S.Type) where S.InputType == Self { - // CHECK: [[S_AS_VALIDATION_SUITE_GEP:%[0-9]+]] = getelementptr inbounds i8*, i8** %S.ValidationSuite, i32 1 - // CHECK: [[S_AS_VALIDATION_SUITE:%[0-9]+]] = load i8*, i8** [[S_AS_VALIDATION_SUITE_GEP]] - // CHECK-NEXT: [[S_VALIDATOR_BASE:%.*]] = bitcast i8* [[S_AS_VALIDATION_SUITE]] to i8** - // CHECK-NEXT: call swiftcc i8** @swift_getAssociatedConformanceWitness(i8** %S.Validator, %swift.type* %S, %swift.type* %Self, + // CHECK: [[S_AS_VALIDATION_SUITE_GEP:%[0-9]+]] = getelementptr inbounds ptr, ptr %S.ValidationSuite, i32 1 + // CHECK: [[S_AS_VALIDATION_SUITE:%.*]] = load ptr, ptr [[S_AS_VALIDATION_SUITE_GEP]] + // CHECK-NEXT: call swiftcc ptr @swift_getAssociatedConformanceWitness(ptr %S.Validator, ptr %S, ptr %Self, tested() } } diff --git a/test/IRGen/dead_method.swift b/test/IRGen/dead_method.swift index 55ec4c91a4de1..a7877096f2aee 100644 --- a/test/IRGen/dead_method.swift +++ b/test/IRGen/dead_method.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers %s -emit-ir -O | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize -// RUN: %target-swift-frontend %s -emit-ir -O +// RUN: %target-swift-frontend %s -emit-ir -O | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%target-ptrsize // Test to make sure that methods removed by dead code elimination still appear // in the vtable in both the nominal type descriptor and class metadata. @@ -35,20 +34,20 @@ public class Class { // CHECK-LABEL: @"$s11dead_method5ClassCMf" = internal global <{{.*}}> <{ // -- destructor -// CHECK-SAME: void (%T11dead_method5ClassC*)* {{.*}}@"$s11dead_method5ClassCfD{{(.ptrauth)?}}" +// CHECK-SAME: ptr {{.*}}@"$s11dead_method5ClassCfD{{(.ptrauth)?}}" // -- value witness table -// CHECK-SAME: i8** {{@"\$sBoWV"|null}}, +// CHECK-SAME: ptr {{@"\$sBoWV"|null}}, // -- nominal type descriptor // CHECK-SAME: @"$s11dead_method5ClassCMn{{(.ptrauth)?}}" // -- ivar destroyer -// CHECK-SAME: i8* null, +// CHECK-SAME: ptr null, // -- vtable -// CHECK-SAME: %T11dead_method5ClassC* (%swift.type*)* {{.*}}@"$s11dead_method5ClassCACycfC{{(.ptrauth)?}}" -// CHECK-SAME: void (%T11dead_method5ClassC*)* {{.*}}@"$s11dead_method5ClassC4liveyyF{{(.ptrauth)?}}" -// CHECK-SAME: i8* bitcast {{.*}}@swift_deletedMethodError{{(.ptrauth)?}} to i8*) +// CHECK-SAME: ptr {{.*}}@"$s11dead_method5ClassCACycfC{{(.ptrauth)?}}" +// CHECK-SAME: ptr {{.*}}@"$s11dead_method5ClassC4liveyyF{{(.ptrauth)?}}" +// CHECK-SAME: ptr {{.*}}@swift_deletedMethodError{{(.ptrauth)?}} // CHECK-SAME: }> diff --git a/test/IRGen/dllexport.swift b/test/IRGen/dllexport.swift index 031614531914a..dc764bfbcef45 100644 --- a/test/IRGen/dllexport.swift +++ b/test/IRGen/dllexport.swift @@ -1,7 +1,5 @@ -// RUN: %swift %use_no_opaque_pointers -target thumbv7--windows-itanium -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllexport %s -o - | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-NO-OPT -// RUN: %swift %use_no_opaque_pointers -target thumbv7--windows-itanium -O -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllexport %s -o - | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-OPT -// RUN: %swift -target thumbv7--windows-itanium -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllexport %s -o - -// RUN: %swift -target thumbv7--windows-itanium -O -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllexport %s -o - +// RUN: %swift -target thumbv7--windows-itanium -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllexport %s -o - | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-NO-OPT +// RUN: %swift -target thumbv7--windows-itanium -O -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllexport %s -o - | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-OPT // REQUIRES: CODEGENERATOR=ARM @@ -27,24 +25,24 @@ open class d { } } -// CHECK-DAG: @"$s9dllexport2ciAA1cCvp" = dllexport global %T9dllexport1cC* null, align 4 +// CHECK-DAG: @"$s9dllexport2ciAA1cCvp" = dllexport global ptr null, align 4 // CHECK-DAG: @"$s9dllexport1pMp" = dllexport constant // CHECK-DAG: @"$s9dllexport1cCMn" = dllexport constant // CHECK-DAG: @"$s9dllexport1cCN" = dllexport alias %swift.type -// CHECK-DAG: @"$s9dllexport1dCN" = dllexport alias %swift.type, bitcast ({{.*}}) -// CHECK-DAG-OPT: @"$s9dllexport1dC1m33_C57BA610BA35E21738CC992438E660E9LLyyF" = dllexport alias void (), void ()* @_swift_dead_method_stub -// CHECK-DAG-OPT: @"$s9dllexport1dCACycfc" = dllexport alias void (), void ()* @_swift_dead_method_stub -// CHECK-DAG-OPT: @"$s9dllexport1cCACycfc" = dllexport alias void (), void ()* @_swift_dead_method_stub -// CHECK-DAG-OPT: @"$s9dllexport1cCACycfC" = dllexport alias void (), void ()* @_swift_dead_method_stub -// CHECK-DAG: define dllexport swiftcc %swift.refcounted* @"$s9dllexport1cCfd"(%T9dllexport1cC*{{.*}}) -// CHECK-DAG-NO-OPT: define dllexport swiftcc %T9dllexport1cC* @"$s9dllexport1cCACycfc"(%T9dllexport1cC* %0) -// CHECK-DAG-NO-OPT: define dllexport swiftcc %T9dllexport1cC* @"$s9dllexport1cCACycfC"(%swift.type* %0) -// CHECK-DAG: define dllexport swiftcc {{(nonnull )?}}i8* @"$s9dllexport2ciAA1cCvau"() -// CHECK-DAG-NO-OPT: define dllexport swiftcc void @"$s9dllexport1dC1m33_C57BA610BA35E21738CC992438E660E9LLyyF"(%T9dllexport1dC* %0) -// CHECK-DAG-NO-OPT: define dllexport swiftcc void @"$s9dllexport1dCfD"(%T9dllexport1dC* %0) -// CHECK-DAG: define dllexport swiftcc %swift.refcounted* @"$s9dllexport1dCfd"(%T9dllexport1dC*{{.*}}) +// CHECK-DAG: @"$s9dllexport1dCN" = dllexport alias %swift.type +// CHECK-DAG-OPT: @"$s9dllexport1dC1m33_C57BA610BA35E21738CC992438E660E9LLyyF" = dllexport alias void (), ptr @_swift_dead_method_stub +// CHECK-DAG-OPT: @"$s9dllexport1dCACycfc" = dllexport alias void (), ptr @_swift_dead_method_stub +// CHECK-DAG-OPT: @"$s9dllexport1cCACycfc" = dllexport alias void (), ptr @_swift_dead_method_stub +// CHECK-DAG-OPT: @"$s9dllexport1cCACycfC" = dllexport alias void (), ptr @_swift_dead_method_stub +// CHECK-DAG: define dllexport swiftcc ptr @"$s9dllexport1cCfd"(ptr{{.*}}) +// CHECK-DAG-NO-OPT: define dllexport swiftcc ptr @"$s9dllexport1cCACycfc"(ptr %0) +// CHECK-DAG-NO-OPT: define dllexport swiftcc ptr @"$s9dllexport1cCACycfC"(ptr %0) +// CHECK-DAG: define dllexport swiftcc {{(nonnull )?}}ptr @"$s9dllexport2ciAA1cCvau"() +// CHECK-DAG-NO-OPT: define dllexport swiftcc void @"$s9dllexport1dC1m33_C57BA610BA35E21738CC992438E660E9LLyyF"(ptr %0) +// CHECK-DAG-NO-OPT: define dllexport swiftcc void @"$s9dllexport1dCfD"(ptr %0) +// CHECK-DAG: define dllexport swiftcc ptr @"$s9dllexport1dCfd"(ptr{{.*}}) // CHECK-DAG: define dllexport swiftcc %swift.metadata_response @"$s9dllexport1cCMa"(i32 %0) // CHECK-DAG: define dllexport swiftcc %swift.metadata_response @"$s9dllexport1dCMa"(i32 %0) -// CHECK-DAG-NO-OPT: define dllexport swiftcc %T9dllexport1dC* @"$s9dllexport1dCACycfc"(%T9dllexport1dC* %0) -// CHECK-DAG-OPT: define dllexport swiftcc void @"$s9dllexport1dCfD"(%T9dllexport1dC* %0) +// CHECK-DAG-NO-OPT: define dllexport swiftcc ptr @"$s9dllexport1dCACycfc"(ptr %0) +// CHECK-DAG-OPT: define dllexport swiftcc void @"$s9dllexport1dCfD"(ptr %0) diff --git a/test/IRGen/dynamic_cast.sil b/test/IRGen/dynamic_cast.sil index bfeeaca6887d8..fcd91b9c670e1 100644 --- a/test/IRGen/dynamic_cast.sil +++ b/test/IRGen/dynamic_cast.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize -// RUN: %target-swift-frontend -emit-ir %s +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize // REQUIRES: CPU=i386 || CPU=x86_64 @@ -22,10 +21,8 @@ struct S { sil @testUnconditional0 : $@convention(thin) (@in P) -> () { bb0(%0 : $*P): // CHECK: [[T0:%.*]] = alloca [[S:%.*]], align - // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]* - // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]* // CHECK: [[T4:%.*]] = call {{.*}}@"$s12dynamic_cast1P_pMD" - // CHECK: call zeroext i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], %swift.type* [[T4]], %swift.type* {{.*}}, [[INT]] 7) + // CHECK: call zeroext i1 @swift_dynamicCast(ptr [[T0]], ptr {{%.*}}, ptr [[T4]], ptr {{.*}}, [[INT]] 7) %1 = alloc_stack $S unconditional_checked_cast_addr P in %0 : $*P to S in %1 : $*S destroy_addr %1 : $*S @@ -38,10 +35,8 @@ bb0(%0 : $*P): sil @testUnconditional1 : $@convention(thin) (@in P) -> () { bb0(%0 : $*P): // CHECK: [[T0:%.*]] = alloca [[S:%.*]], align - // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]* - // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]* // CHECK: [[T4:%.*]] = call {{.*}}@"$s12dynamic_cast1P_pMD" - // CHECK: call zeroext i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], %swift.type* [[T4]], %swift.type* {{.*}}, [[INT]] 7) + // CHECK: call zeroext i1 @swift_dynamicCast(ptr [[T0]], ptr {{%.*}}, ptr [[T4]], ptr {{.*}}, [[INT]] 7) %1 = alloc_stack $S unconditional_checked_cast_addr P in %0 : $*P to S in %1 : $*S destroy_addr %1 : $*S @@ -54,10 +49,8 @@ bb0(%0 : $*P): sil @testConditional0 : $@convention(thin) (@in P) -> () { bb0(%0 : $*P): // CHECK: [[T0:%.*]] = alloca [[S:%.*]], align - // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]* - // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]* // CHECK: [[T4:%.*]] = call {{.*}}@"$s12dynamic_cast1P_pMD" - // CHECK: [[T5:%.*]] = call zeroext i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], %swift.type* [[T4]], %swift.type* {{.*}}, [[INT]] 6) + // CHECK: [[T5:%.*]] = call zeroext i1 @swift_dynamicCast(ptr [[T0]], ptr {{%.*}}, ptr [[T4]], ptr {{.*}}, [[INT]] 6) // CHECK: br i1 [[T5]], %1 = alloc_stack $S checked_cast_addr_br take_always P in %0 : $*P to S in %1 : $*S, bb1, bb2 @@ -76,10 +69,8 @@ bb3: sil @testConditional1 : $@convention(thin) (@in P) -> () { bb0(%0 : $*P): // CHECK: [[T0:%.*]] = alloca [[S:%.*]], align - // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]* - // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]* // CHECK: [[T4:%.*]] = call {{.*}}@"$s12dynamic_cast1P_pMD" - // CHECK: [[T5:%.*]] = call zeroext i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], %swift.type* [[T4]], %swift.type* {{.*}}, [[INT]] 2) + // CHECK: [[T5:%.*]] = call zeroext i1 @swift_dynamicCast(ptr [[T0]], ptr {{%.*}}, ptr [[T4]], ptr {{.*}}, [[INT]] 2) // CHECK: br i1 [[T5]], %1 = alloc_stack $S checked_cast_addr_br take_on_success P in %0 : $*P to S in %1 : $*S, bb1, bb2 @@ -98,10 +89,8 @@ bb3: sil @testConditional2 : $@convention(thin) (@in P) -> () { bb0(%0 : $*P): // CHECK: [[T0:%.*]] = alloca [[S:%.*]], align - // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]* - // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]* // CHECK: [[T4:%.*]] = call {{.*}}@"$s12dynamic_cast1P_pMD" - // CHECK: [[T5:%.*]] = call zeroext i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], %swift.type* [[T4]], %swift.type* {{.*}}, [[INT]] 0) + // CHECK: [[T5:%.*]] = call zeroext i1 @swift_dynamicCast(ptr [[T0]], ptr {{%.*}}, ptr [[T4]], ptr {{.*}}, [[INT]] 0) // CHECK: br i1 [[T5]], %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 39d5ec867e8c3..a53c6d75a0f98 100644 --- a/test/IRGen/dynamic_init.sil +++ b/test/IRGen/dynamic_init.sil @@ -1,7 +1,5 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -enable-objc-interop -emit-ir %s | %FileCheck %s --check-prefixes=CHECK,CHECK-objc -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-objc-interop -emit-ir %s | %FileCheck %s --check-prefixes=CHECK,CHECK-native -// RUN: %target-swift-frontend -enable-objc-interop -emit-ir %s -// RUN: %target-swift-frontend -disable-objc-interop -emit-ir %s +// RUN: %target-swift-frontend -enable-objc-interop -emit-ir %s | %FileCheck %s --check-prefixes=CHECK,CHECK-objc +// RUN: %target-swift-frontend -disable-objc-interop -emit-ir %s | %FileCheck %s --check-prefixes=CHECK,CHECK-native // REQUIRES: CPU=x86_64 @@ -23,14 +21,13 @@ sil @$s12dynamic_init1CCfD : $@convention(method) (@owned C) -> () // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s12dynamic_init15testDynamicInityAA1CCm2cm_tF" sil @$s12dynamic_init15testDynamicInityAA1CCm2cm_tF : $@convention(method) (@thick C.Type) -> () { bb0(%0 : $@thick C.Type): - // CHECK: [[META:%[0-9]+]] = bitcast %swift.type* %0 to %T12dynamic_init1CC* (%swift.type*)** - // CHECK-objc: [[VTABLE_OFFSET:%[0-9]+]] = getelementptr inbounds %T12dynamic_init1CC* (%swift.type*)*, %T12dynamic_init1CC* (%swift.type*)** [[META]], i64 10 - // CHECK-native: [[VTABLE_OFFSET:%[0-9]+]] = getelementptr inbounds %T12dynamic_init1CC* (%swift.type*)*, %T12dynamic_init1CC* (%swift.type*)** [[META]], i64 7 - // CHECK: [[CTOR:%[0-9]+]] = load %T12dynamic_init1CC* (%swift.type*)*, %T12dynamic_init1CC* (%swift.type*)** [[VTABLE_OFFSET]], align 8 + // CHECK-objc: [[VTABLE_OFFSET:%[0-9]+]] = getelementptr inbounds ptr, ptr %0, i64 10 + // CHECK-native: [[VTABLE_OFFSET:%[0-9]+]] = getelementptr inbounds ptr, ptr %0, i64 7 + // CHECK: [[CTOR:%[0-9]+]] = load ptr, ptr [[VTABLE_OFFSET]], align 8 %2 = class_method %0 : $@thick C.Type, #C.init!allocator : (C.Type) -> () -> C, $@convention(method) (@thick C.Type) -> @owned C - // CHECK: [[RESULT:%[0-9]+]] = call swiftcc %T12dynamic_init1CC* [[CTOR]](%swift.type* swiftself %0) + // CHECK: [[RESULT:%[0-9]+]] = call swiftcc ptr [[CTOR]](ptr swiftself %0) %3 = apply %2(%0) : $@convention(method) (@thick C.Type) -> @owned C - // CHECK: call void bitcast (void (%swift.refcounted*)* @swift_release to void (%T12dynamic_init1CC*)*)(%T12dynamic_init1CC* [[RESULT]]) + // CHECK: call void @swift_release(ptr [[RESULT]]) strong_release %3 : $C // CHECK: ret void %5 = tuple () diff --git a/test/IRGen/dynamic_lookup.sil b/test/IRGen/dynamic_lookup.sil index b0e3482ad790f..c03502fb0b585 100644 --- a/test/IRGen/dynamic_lookup.sil +++ b/test/IRGen/dynamic_lookup.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -enable-objc-interop -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend -enable-objc-interop -emit-ir %s +// RUN: %target-swift-frontend -enable-objc-interop -emit-ir %s | %FileCheck %s // REQUIRES: CPU=i386 || CPU=x86_64 @@ -51,7 +50,7 @@ bb0(%0 : $X): return %7 : $Int } -// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @dynamic_lookup_br(%objc_object* %0) +// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @dynamic_lookup_br(ptr %0) sil @dynamic_lookup_br : $@convention(thin) (AnyObject) -> () { bb0(%0 : $AnyObject): %1 = alloc_box $<τ_0_0> { var τ_0_0 } @@ -62,9 +61,9 @@ bb0(%0 : $AnyObject): strong_retain %4 : $AnyObject %6 = open_existential_ref %4 : $AnyObject to $@opened("01234567-89ab-cdef-0123-000000000000", AnyObject) Self - // CHECK: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(f)" - // CHECK: [[RESPONDS:%[0-9]+]] = load i8*, i8** @"\01L_selector(respondsToSelector:)" - // CHECK: [[HAS_SEL:%[0-9]]] = call i1 {{.*}}@objc_msgSend {{.*}}(%objc_object* [[OBJECT:%[0-9]+]], i8* [[RESPONDS]], i8* [[SEL]]) + // CHECK: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(f)" + // CHECK: [[RESPONDS:%[0-9]+]] = load ptr, ptr @"\01L_selector(respondsToSelector:)" + // CHECK: [[HAS_SEL:%[0-9]]] = call i1 {{.*}}@objc_msgSend(ptr [[OBJECT:%[0-9]+]], ptr [[RESPONDS]], ptr [[SEL]]) // CHECK: br i1 [[HAS_SEL]] dynamic_method_br %6 : $@opened("01234567-89ab-cdef-0123-000000000000", AnyObject) Self, #X.f!foreign, bb1, bb2 @@ -81,12 +80,12 @@ bb3: return %43 : $() } -// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @dynamic_lookup_static_br(%swift.type* %0) +// CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @dynamic_lookup_static_br(ptr %0) sil @dynamic_lookup_static_br : $@convention(thin) (@thick AnyObject.Type) -> () { bb0(%0 : $@thick AnyObject.Type): - // CHECK: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(g)", align {{(4|8)}} - // CHECK: [[RESPONDS:%[0-9]+]] = load i8*, i8** @"\01L_selector(respondsToSelector:)" - // CHECK: [[HAS_SEL:%[0-9]]] = call i1 {{.*}}@objc_msgSend {{.*}}(%objc_object* [[OBJECT:%[0-9]+]], i8* [[RESPONDS]], i8* [[SEL]]) + // CHECK: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(g)", align {{(4|8)}} + // CHECK: [[RESPONDS:%[0-9]+]] = load ptr, ptr @"\01L_selector(respondsToSelector:)" + // CHECK: [[HAS_SEL:%[0-9]]] = call i1 {{.*}}@objc_msgSend(ptr [[OBJECT:%[0-9]+]], ptr [[RESPONDS]], ptr [[SEL]]) // CHECK: br i1 [[HAS_SEL]] %1 = open_existential_metatype %0 : $@thick AnyObject.Type to $@thick (@opened("EF9BE7CA-DFBF-11E4-99CB-28CFE91AF28F", AnyObject) Self).Type dynamic_method_br %1 : $@thick (@opened("EF9BE7CA-DFBF-11E4-99CB-28CFE91AF28F", AnyObject) Self).Type, #X.g!foreign, bb1, bb2 @@ -124,7 +123,7 @@ bb3: return %43 : $() } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @_T1t16opt_to_subscriptFT3objPSo13AnyObject_1iSi_T_(%objc_object* %0, {{(i32|i64)}} %1) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @_T1t16opt_to_subscriptFT3objPSo13AnyObject_1iSi_T_(ptr %0, {{(i32|i64)}} %1) sil @_T1t16opt_to_subscriptFT3objPSo13AnyObject_1iSi_T_ : $@convention(thin) (AnyObject, Int) -> () { bb0(%0 : $AnyObject, %1 : $Int): %2 = alloc_box $<τ_0_0> { var τ_0_0 } @@ -136,9 +135,9 @@ bb0(%0 : $AnyObject, %1 : $Int): %8 = load %2a : $*AnyObject strong_retain %8 : $AnyObject %10 = open_existential_ref %8 : $AnyObject to $@opened("21234567-89ab-cdef-0123-111111111111", AnyObject) Self - // CHECK: [[SEL:%[0-9]+]] = load i8*, i8** @"\01L_selector(objectAtIndexedSubscript:)", align {{(4|8)}} - // CHECK: [[RESPONDS:%[0-9]+]] = load i8*, i8** @"\01L_selector(respondsToSelector:)" - // CHECK-NEXT: [[HAS_SEL:%[0-9]+]] = call i1 {{.*}}@objc_msgSend {{.*}}(%objc_object* [[OBJECT:%[0-9]+]], i8* [[RESPONDS]], i8* [[SEL]]) + // CHECK: [[SEL:%[0-9]+]] = load ptr, ptr @"\01L_selector(objectAtIndexedSubscript:)", align {{(4|8)}} + // CHECK: [[RESPONDS:%[0-9]+]] = load ptr, ptr @"\01L_selector(respondsToSelector:)" + // CHECK-NEXT: [[HAS_SEL:%[0-9]+]] = call i1 {{.*}}@objc_msgSend(ptr [[OBJECT:%[0-9]+]], ptr [[RESPONDS]], ptr [[SEL]]) // CHECK-NEXT: br i1 [[HAS_SEL]], label [[HAS_METHOD:%[0-9]+]], label [[HAS_METHOD:%[0-9]+]] dynamic_method_br %10 : $@opened("21234567-89ab-cdef-0123-111111111111", AnyObject) Self, #X.subscript!getter.foreign, bb1, bb2 diff --git a/test/IRGen/dynamic_replaceable_coroutine.swift b/test/IRGen/dynamic_replaceable_coroutine.swift index 4470f53f8f6b8..79c85c94bbc56 100644 --- a/test/IRGen/dynamic_replaceable_coroutine.swift +++ b/test/IRGen/dynamic_replaceable_coroutine.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -module-name A -enable-implicit-dynamic -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend -module-name A -enable-implicit-dynamic -emit-ir %s +// RUN: %target-swift-frontend -module-name A -enable-implicit-dynamic -emit-ir %s | %FileCheck %s extension Int { @@ -15,14 +14,12 @@ extension Int { // Make sure the initialization of `thing` is after the dynamic replacement // check. Coro splitting does not like memsets before the coro.begin. - // CHECK: define{{.*}} swiftcc { i8*, %TSi1AE5ThingV* } @"$sSi1AE5thingSiAAE5ThingVvM" - // CHECK: call i8* @swift_getFunctionReplacement + // CHECK: define{{.*}} swiftcc { ptr, ptr } @"$sSi1AE5thingSiAAE5ThingVvM" + // CHECK: call ptr @swift_getFunctionReplacement // CHECK: br - // CHECK: original_entry: - // CHECK: [[FRAMEPTR:%.*]] = bitcast i8* %0 to - // CHECK: [[THING:%.*]] = getelementptr inbounds {{.*}}* [[FRAMEPTR]], i32 0 - // CHECK: [[THING2:%.*]] = bitcast %TSi1AE5ThingV* [[THING]] to i8* - // CHECK: call void @llvm.memset{{.*}}(i8* {{.*}} [[THING2]] + // CHECK: AllocaSpillBB: + // CHECK: [[THING:%.*]] = getelementptr inbounds %"$sSi1AE5thingSiAAE5ThingVvM.Frame", ptr %0, i32 0 + // CHECK: call void @llvm.memset{{.*}}(ptr {{.*}} [[THING]] // CHECK: ret _modify { var thing = Thing(self) diff --git a/test/IRGen/dynamic_replaceable_opaque_return.swift b/test/IRGen/dynamic_replaceable_opaque_return.swift index 618d16ee1ee7b..f4674ec2e0606 100644 --- a/test/IRGen/dynamic_replaceable_opaque_return.swift +++ b/test/IRGen/dynamic_replaceable_opaque_return.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-availability-checking -module-name A -swift-version 5 -primary-file %s -emit-ir | %FileCheck %s -// RUN: %target-swift-frontend -disable-availability-checking -module-name A -swift-version 5 -primary-file %s -emit-ir +// RUN: %target-swift-frontend -disable-availability-checking -module-name A -swift-version 5 -primary-file %s -emit-ir | %FileCheck %s // The arm64e test is in ptrauth-dynamic_replaceable.sil. // UNSUPPORTED: CPU=arm64e @@ -10,13 +9,13 @@ // UNSUPPORTED: CPU=armv7s // UNSUPPORTED: CPU=i386 -// CHECK: @"$s1A3baryQrSiFQOMk" = global %swift.dyn_repl_link_entry { {{.*}}@"$s1A3baryQrSiFQOMh" to i8*), %swift.dyn_repl_link_entry* null } -// CHECK: @"$s1A3baryQrSiFQOMj" = constant %swift.dyn_repl_key { {{.*}}%swift.dyn_repl_link_entry* @"$s1A3baryQrSiFQOMk"{{.*}}, i32 0 }, section "__TEXT,__const" +// CHECK: @"$s1A3baryQrSiFQOMk" = global %swift.dyn_repl_link_entry { ptr @"$s1A3baryQrSiFQOMh", ptr null } +// CHECK: @"$s1A3baryQrSiFQOMj" = constant %swift.dyn_repl_key { {{.*}}ptr @"$s1A3baryQrSiFQOMk"{{.*}}, i32 0 }, section "__TEXT,__const" // CHECK: @"$s1A16_replacement_bar1yQrSi_tFQOMk" = global %swift.dyn_repl_link_entry zeroinitializer // CHECK: @"\01l_unnamed_dynamic_replacements" = // CHECK-SAME: private constant { i32, i32, [4 x { i32, i32, i32, i32 }] } // CHECK-SAME: { i32 0, i32 4, [4 x { i32, i32, i32, i32 }] [ -// CHECK-SAME: { i32, i32, i32, i32 } { {{.*}}%swift.dyn_repl_key* @"$s1A3baryQrSiFTx"{{.*}}@"$s1A16_replacement_bar1yQrSi_tF"{{.*}}%swift.dyn_repl_link_entry* @"$s1A16_replacement_bar1yQrSi_tFTX"{{.*}}, i32 0 }, { i32, i32, i32, i32 } { {{.*}}%swift.dyn_repl_key* @"$s1A9ContainerV4propQrvgTx"{{.*}}@"$s1A9ContainerV7_r_propQrvg"{{.*}}, i32 0 }, { i32, i32, i32, i32 } { {{.*}}%swift.dyn_repl_key* @"$s1A3baryQrSiFQOMj"{{.*}},{{.*}}@"$s1A16_replacement_bar1yQrSi_tFQOMg"{{.*}},{{.*}}@"$s1A16_replacement_bar1yQrSi_tFQOMk"{{.*}}, i32 0 }, { i32, i32, i32, i32 } { {{.*}}%swift.dyn_repl_key* @"$s1A9ContainerV4propQrvpQOMj"{{.*}},{{.*}}@"$s1A9ContainerV7_r_propQrvpQOMg"{{.*}},{{.*}}@"$s1A9ContainerV7_r_propQrvpQOMk"{{.*}}, i32 0 }] } +// CHECK-SAME: { i32, i32, i32, i32 } { {{.*}}ptr @"$s1A3baryQrSiFTx"{{.*}}@"$s1A16_replacement_bar1yQrSi_tF"{{.*}}ptr @"$s1A16_replacement_bar1yQrSi_tFTX"{{.*}}, i32 0 }, { i32, i32, i32, i32 } { {{.*}}ptr @"$s1A9ContainerV4propQrvgTx"{{.*}}@"$s1A9ContainerV7_r_propQrvg"{{.*}}, i32 0 }, { i32, i32, i32, i32 } { {{.*}}ptr @"$s1A3baryQrSiFQOMj"{{.*}},{{.*}}@"$s1A16_replacement_bar1yQrSi_tFQOMg"{{.*}},{{.*}}@"$s1A16_replacement_bar1yQrSi_tFQOMk"{{.*}}, i32 0 }, { i32, i32, i32, i32 } { {{.*}}ptr @"$s1A9ContainerV4propQrvpQOMj"{{.*}},{{.*}}@"$s1A9ContainerV7_r_propQrvpQOMg"{{.*}},{{.*}}@"$s1A9ContainerV7_r_propQrvpQOMk"{{.*}}, i32 0 }] } // CHECK: , section "__TEXT,__const" public protocol P { @@ -29,18 +28,17 @@ extension Int: P { } } // Opaque result type descriptor accessor for bar. -// CHECK-LABEL: define{{.*}} swiftcc %swift.type_descriptor* @"$s1A3baryQrSiFQOMg"() +// CHECK-LABEL: define{{.*}} swiftcc ptr @"$s1A3baryQrSiFQOMg"() // CHECK: entry: -// CHECK: %0 = load i8*, i8** getelementptr inbounds (%swift.dyn_repl_link_entry, %swift.dyn_repl_link_entry* @"$s1A3baryQrSiFQOMk", i32 0, i32 0) -// CHECK: %1 = bitcast i8* %0 to %swift.type_descriptor* ()* -// CHECK: %2 = tail call swiftcc %swift.type_descriptor* %1() -// CHECK: ret %swift.type_descriptor* %2 +// CHECK: %0 = load ptr, ptr @"$s1A3baryQrSiFQOMk" +// CHECK: %1 = tail call swiftcc ptr %0() +// CHECK: ret ptr %1 // CHECK: } // Opaque result type descriptor accessor impl. -// CHECK-LABEL: define{{.*}} swiftcc %swift.type_descriptor* @"$s1A3baryQrSiFQOMh"() +// CHECK-LABEL: define{{.*}} swiftcc ptr @"$s1A3baryQrSiFQOMh"() // CHECK: entry: -// CHECK: ret %swift.type_descriptor* bitcast ({{.*}}* @"$s1A3baryQrSiFQOMQ" to %swift.type_descriptor*) +// CHECK: ret ptr @"$s1A3baryQrSiFQOMQ" // CHECK: } public dynamic func bar(_ x: Int) -> some P { @@ -55,9 +53,9 @@ struct Pair : P { } } // Opaque result type descriptor accessor for _replacement_bar. -// CHECK: define{{.*}} swiftcc %swift.type_descriptor* @"$s1A16_replacement_bar1yQrSi_tFQOMg"() +// CHECK: define{{.*}} swiftcc ptr @"$s1A16_replacement_bar1yQrSi_tFQOMg"() // CHECK: entry: -// CHECK: ret %swift.type_descriptor* bitcast ({{.*}} @"$s1A16_replacement_bar1yQrSi_tFQOMQ" to %swift.type_descriptor*) +// CHECK: ret ptr @"$s1A16_replacement_bar1yQrSi_tFQOMQ" // CHECK: } @_dynamicReplacement(for:bar(_:)) public func _replacement_bar(y x: Int) -> some P { @@ -72,16 +70,15 @@ struct Container { } } -// CHECK: define{{.*}} hidden swiftcc %swift.type_descriptor* @"$s1A9ContainerV4propQrvpQOMg"() +// CHECK: define{{.*}} hidden swiftcc ptr @"$s1A9ContainerV4propQrvpQOMg"() // CHECK: entry: -// CHECK: %0 = load i8*, i8** getelementptr inbounds (%swift.dyn_repl_link_entry, %swift.dyn_repl_link_entry* @"$s1A9ContainerV4propQrvpQOMk", i32 0, i32 0) -// CHECK: %1 = bitcast i8* %0 to %swift.type_descriptor* ()* -// CHECK: %2 = tail call swiftcc %swift.type_descriptor* %1() -// CHECK: ret %swift.type_descriptor* %2 +// CHECK: %0 = load ptr, ptr @"$s1A9ContainerV4propQrvpQOMk" +// CHECK: %1 = tail call swiftcc ptr %0() +// CHECK: ret ptr %1 -// CHECK: define{{.*}} hidden swiftcc %swift.type_descriptor* @"$s1A9ContainerV4propQrvpQOMh"() +// CHECK: define{{.*}} hidden swiftcc ptr @"$s1A9ContainerV4propQrvpQOMh"() // CHECK: entry: -// CHECK: ret %swift.type_descriptor* bitcast ({{.*}} @"$s1A9ContainerV4propQrvpQOMQ" to %swift.type_descriptor*) +// CHECK: ret ptr @"$s1A9ContainerV4propQrvpQOMQ" extension Container { @_dynamicReplacement(for: prop) @@ -92,9 +89,9 @@ extension Container { } } -// CHECK: define{{.*}} hidden swiftcc %swift.type_descriptor* @"$s1A9ContainerV7_r_propQrvpQOMg"() +// CHECK: define{{.*}} hidden swiftcc ptr @"$s1A9ContainerV7_r_propQrvpQOMg"() // CHECK: entry: -// CHECK: ret %swift.type_descriptor* bitcast ({{.*}} @"$s1A9ContainerV7_r_propQrvpQOMQ" to %swift.type_descriptor*) +// CHECK: ret ptr @"$s1A9ContainerV7_r_propQrvpQOMQ" // CHECK-NOT: s1A16noOpaqueAccessor{{.*}}Mg diff --git a/test/IRGen/dynamic_self.sil b/test/IRGen/dynamic_self.sil index 18e46524add90..d45eab6ecf898 100644 --- a/test/IRGen/dynamic_self.sil +++ b/test/IRGen/dynamic_self.sil @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s -// RUN: %target-swift-frontend -emit-ir %s +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s // REQUIRES: CPU=i386 || CPU=x86_64 @@ -18,8 +17,8 @@ bb0(%0 : $*P): debug_value %0 : $*P, let, name "p", expr op_deref // id: %1 %2 = alloc_stack $P // users: %3, %4, %12 copy_addr %0 to [init] %2 : $*P // id: %3 - // CHECK: call %swift.opaque* - // CHECK: call %swift.opaque* + // CHECK: call ptr + // CHECK: call ptr %4 = open_existential_addr immutable_access %2 : $*P to $*@opened("01234567-89ab-cdef-0123-000000000000", P) Self // users: %8, %10 dealloc_stack %2 : $*P // id: %12 destroy_addr %0 : $*P // id: %13 diff --git a/test/IRGen/dynamic_self_metadata.swift b/test/IRGen/dynamic_self_metadata.swift index acd18fd325e34..340db46002d1a 100644 --- a/test/IRGen/dynamic_self_metadata.swift +++ b/test/IRGen/dynamic_self_metadata.swift @@ -28,31 +28,29 @@ struct G : P { class C { class func fromMetatype() -> Self? { return nil } - // CHECK-LABEL: define hidden swiftcc i64 @"$s21dynamic_self_metadata1CC12fromMetatypeACXDSgyFZ"(%swift.type* swiftself %0) + // CHECK-LABEL: define hidden swiftcc i64 @"$s21dynamic_self_metadata1CC12fromMetatypeACXDSgyFZ"(ptr swiftself %0) // CHECK: ret i64 0 func fromInstance() -> Self? { return nil } - // CHECK-LABEL: define hidden swiftcc i64 @"$s21dynamic_self_metadata1CC12fromInstanceACXDSgyF"(%T21dynamic_self_metadata1CC* swiftself %0) + // CHECK-LABEL: define hidden swiftcc i64 @"$s21dynamic_self_metadata1CC12fromInstanceACXDSgyF"(ptr swiftself %0) // CHECK: ret i64 0 func dynamicSelfArgument() -> Self? { return id(nil) } - // CHECK-LABEL: define hidden swiftcc i64 @"$s21dynamic_self_metadata1CC0A12SelfArgumentACXDSgyF"(%T21dynamic_self_metadata1CC* swiftself %0) - // CHECK: [[GEP1:%.+]] = bitcast {{.*}} %0 - // CHECK: [[TYPE1:%.+]] = load {{.*}} [[GEP1]] - // CHECK: [[T0:%.+]] = call swiftcc %swift.metadata_response @"$sSqMa"(i64 0, %swift.type* [[TYPE1]]) + // CHECK-LABEL: define hidden swiftcc i64 @"$s21dynamic_self_metadata1CC0A12SelfArgumentACXDSgyF"(ptr swiftself %0) + // CHECK: [[TYPE1:%.+]] = load {{.*}} %0 + // CHECK: [[T0:%.+]] = call swiftcc %swift.metadata_response @"$sSqMa"(i64 0, ptr [[TYPE1]]) // CHECK: [[TYPE2:%.+]] = extractvalue %swift.metadata_response [[T0]], 0 - // CHECK: call swiftcc void @"$s21dynamic_self_metadata2idyxxlF"({{.*}}, %swift.type* [[TYPE2]]) + // CHECK: call swiftcc void @"$s21dynamic_self_metadata2idyxxlF"({{.*}}, ptr [[TYPE2]]) func dynamicSelfConformingType() -> Self? { _ = G(t: self).f() return nil } - // CHECK-LABEL: define hidden swiftcc i64 @"$s21dynamic_self_metadata1CC0A18SelfConformingTypeACXDSgyF"(%T21dynamic_self_metadata1CC* swiftself %0) - // CHECK: [[SELF_GEP:%.+]] = bitcast {{.*}} %0 - // CHECK: [[SELF_TYPE:%.+]] = load {{.*}} [[SELF_GEP]] - // CHECK: [[METADATA_RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s21dynamic_self_metadata1GVMa"(i64 0, %swift.type* [[SELF_TYPE]]) + // CHECK-LABEL: define hidden swiftcc i64 @"$s21dynamic_self_metadata1CC0A18SelfConformingTypeACXDSgyF"(ptr swiftself %0) + // CHECK: [[SELF_TYPE:%.+]] = load {{.*}} %0 + // CHECK: [[METADATA_RESPONSE:%.*]] = call swiftcc %swift.metadata_response @"$s21dynamic_self_metadata1GVMa"(i64 0, ptr [[SELF_TYPE]]) // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[METADATA_RESPONSE]], 0 - // CHECK: call i8** @swift_getWitnessTable(%swift.protocol_conformance_descriptor* bitcast ({{.*}} @"$s21dynamic_self_metadata1GVyxGAA1PAAMc" to %swift.protocol_conformance_descriptor*), %swift.type* [[METADATA]], i8*** undef) + // CHECK: call ptr @swift_getWitnessTable(ptr @"$s21dynamic_self_metadata1GVyxGAA1PAAMc", ptr [[METADATA]], ptr undef) } diff --git a/test/IRGen/dynamic_self_metadata_future.swift b/test/IRGen/dynamic_self_metadata_future.swift index 2ba71f973744f..972eec019742d 100644 --- a/test/IRGen/dynamic_self_metadata_future.swift +++ b/test/IRGen/dynamic_self_metadata_future.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -prespecialize-generic-metadata %s -target %module-target-future -emit-ir -parse-as-library | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment -// RUN: %target-swift-frontend -prespecialize-generic-metadata %s -target %module-target-future -emit-ir -parse-as-library +// RUN: %target-swift-frontend -prespecialize-generic-metadata %s -target %module-target-future -emit-ir -parse-as-library | %FileCheck %s -DINT=i%target-ptrsize -DALIGNMENT=%target-alignment // REQUIRES: VENDOR=apple || OS=linux-gnu @@ -29,36 +28,31 @@ struct G : P { class C { class func fromMetatype() -> Self? { return nil } - // CHECK-LABEL: define hidden swiftcc i64 @"$s28dynamic_self_metadata_future1CC12fromMetatypeACXDSgyFZ"(%swift.type* swiftself %0) + // CHECK-LABEL: define hidden swiftcc i64 @"$s28dynamic_self_metadata_future1CC12fromMetatypeACXDSgyFZ"(ptr swiftself %0) // CHECK: ret i64 0 func fromInstance() -> Self? { return nil } - // CHECK-LABEL: define hidden swiftcc i64 @"$s28dynamic_self_metadata_future1CC12fromInstanceACXDSgyF"(%T28dynamic_self_metadata_future1CC* swiftself %0) + // CHECK-LABEL: define hidden swiftcc i64 @"$s28dynamic_self_metadata_future1CC12fromInstanceACXDSgyF"(ptr swiftself %0) // CHECK: ret i64 0 func dynamicSelfArgument() -> Self? { return id(nil) } - // CHECK-LABEL: define hidden swiftcc i64 @"$s28dynamic_self_metadata_future1CC0A12SelfArgumentACXDSgyF"(%T28dynamic_self_metadata_future1CC* swiftself %0) - // CHECK: [[GEP1:%.+]] = bitcast {{.*}} %0 - // CHECK: [[TYPE1:%.+]] = load {{.*}} [[GEP1]] - // CHECK: [[T0:%.+]] = call swiftcc %swift.metadata_response @"$sSqMa"(i64 0, %swift.type* [[TYPE1]]) + // CHECK-LABEL: define hidden swiftcc i64 @"$s28dynamic_self_metadata_future1CC0A12SelfArgumentACXDSgyF"(ptr swiftself %0) + // CHECK: [[TYPE1:%.+]] = load {{.*}} %0 + // CHECK: [[T0:%.+]] = call swiftcc %swift.metadata_response @"$sSqMa"(i64 0, ptr [[TYPE1]]) // CHECK: [[TYPE2:%.+]] = extractvalue %swift.metadata_response [[T0]], 0 - // CHECK: call swiftcc void @"$s28dynamic_self_metadata_future2idyxxlF"({{.*}}, %swift.type* [[TYPE2]]) + // CHECK: call swiftcc void @"$s28dynamic_self_metadata_future2idyxxlF"({{.*}}, ptr [[TYPE2]]) func dynamicSelfConformingType() -> Self? { _ = G(t: self).f() return nil } - // CHECK-LABEL: define hidden swiftcc i64 @"$s28dynamic_self_metadata_future1CC0A18SelfConformingTypeACXDSgyF"(%T28dynamic_self_metadata_future1CC* swiftself %0) - // CHECK: [[SELF_GEP:%.+]] = bitcast {{.*}} %0 - // CHECK: [[SELF_TYPE:%.+]] = load {{.*}} [[SELF_GEP]] - // CHECK: call i8** @swift_getWitnessTable( - // CHECK-SAME: %swift.protocol_conformance_descriptor* bitcast ( - // CHECK-SAME: {{.*}} @"$s28dynamic_self_metadata_future1GVyxGAA1PAAMc" - // CHECK-SAME: to %swift.protocol_conformance_descriptor* - // CHECK-SAME: ), - // CHECK-SAME: %swift.type* %{{[0-9]+}}, - // CHECK-SAME: i8*** undef + // CHECK-LABEL: define hidden swiftcc i64 @"$s28dynamic_self_metadata_future1CC0A18SelfConformingTypeACXDSgyF"(ptr swiftself %0) + // CHECK: [[SELF_TYPE:%.+]] = load {{.*}} %0 + // CHECK: call ptr @swift_getWitnessTable( + // CHECK-SAME: ptr @"$s28dynamic_self_metadata_future1GVyxGAA1PAAMc" + // CHECK-SAME: ptr %{{[0-9]+}}, + // CHECK-SAME: ptr undef // CHECK-SAME: ) } diff --git a/test/Inputs/conditional_conformance_basic_conformances.swift b/test/Inputs/conditional_conformance_basic_conformances.swift index 3741d627948be..385cca09bb3d5 100644 --- a/test/Inputs/conditional_conformance_basic_conformances.swift +++ b/test/Inputs/conditional_conformance_basic_conformances.swift @@ -18,45 +18,41 @@ extension Single: P1 where A: P2 { // witness method for Single.normal -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlAaEP6normalyyFTW"(%T42conditional_conformance_basic_conformances6SingleV* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlAaEP6normalyyFTW"(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[A_P2_i8star:%.*]] = load i8*, i8** [[A_P2_PTR]], align 8 -// CHECK-NEXT: [[A_P2:%.*]] = bitcast i8* [[A_P2_i8star]] to i8** -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[A_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[A:%.*]] = load %swift.type*, %swift.type** [[A_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVA2A2P2RzlE6normalyyF"(%swift.type* [[A]], i8** [[A_P2]]) +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[A_P2_i8star:%.*]] = load ptr, ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[A_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[A:%.*]] = load ptr, ptr [[A_PTR]], align 8 +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVA2A2P2RzlE6normalyyF"(ptr [[A]], ptr [[A_P2_i8star]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // witness method for Single.generic -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlAaEP7genericyyqd__AA2P3Rd__lFTW"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_1_0", i8** %"\CF\84_1_0.P3", %T42conditional_conformance_basic_conformances6SingleV* noalias nocapture swiftself %1, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlAaEP7genericyyqd__AA2P3Rd__lFTW"(ptr noalias nocapture %0, ptr %"\CF\84_1_0", ptr %"\CF\84_1_0.P3", ptr noalias nocapture swiftself %1, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[A_P2_i8star:%.*]] = load i8*, i8** [[A_P2_PTR]], align 8 -// CHECK-NEXT: [[A_P2:%.*]] = bitcast i8* [[A_P2_i8star]] to i8** -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[A_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[A:%.*]] = load %swift.type*, %swift.type** [[A_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVA2A2P2RzlE7genericyyqd__AA2P3Rd__lF"(%swift.opaque* noalias nocapture %0, %swift.type* [[A]], %swift.type* %"\CF\84_1_0", i8** [[A_P2]], i8** %"\CF\84_1_0.P3") +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[A_P2_i8star:%.*]] = load ptr, ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[A_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[A:%.*]] = load ptr, ptr [[A_PTR]], align 8 +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVA2A2P2RzlE7genericyyqd__AA2P3Rd__lF"(ptr noalias nocapture %0, ptr [[A]], ptr %"\CF\84_1_0", ptr [[A_P2_i8star]], ptr %"\CF\84_1_0.P3") // CHECK-NEXT: ret void // CHECK-NEXT: } public func single_generic(_: T.Type) { takes_p1(Single.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances14single_genericyyxmAA2P2RzlF"(%swift.type* %0, %swift.type* %T, i8** %T.P2) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances14single_genericyyxmAA2P2RzlF"(ptr %0, ptr %T, ptr %T.P2) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6SingleVMa"(i64 0, %swift.type* %T) +// CHECK: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6SingleVMa"(i64 0, ptr %T) // CHECK-NEXT: [[Single_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[T_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** %T.P2, i8*** [[T_P2_PTR]], align 8 -// CHECK-NEXT: [[Single_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Single_TYPE]], %swift.type* [[Single_TYPE]], i8** [[Single_P1]]) +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[T_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %T.P2, ptr [[T_P2_PTR]], align 8 +// CHECK-NEXT: [[Single_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(ptr [[Single_TYPE]], ptr [[Single_TYPE]], ptr [[Single_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -67,46 +63,46 @@ public func single_concrete() { // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances15single_concreteyyF"() // CHECK-NEXT: entry: // CHECK-NEXT: [[Single_TYPE:%.*]] = call {{.*}} @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMD") -// CHECK-NEXT: [[Single_P1:%.*]] = call i8** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Single_TYPE]], %swift.type* [[Single_TYPE]], i8** [[Single_P1]]) +// CHECK-NEXT: [[Single_P1:%.*]] = call ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(ptr [[Single_TYPE]], ptr [[Single_TYPE]], ptr [[Single_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // CHECK-PRESPECIALIZED: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances15single_concreteyyF"() // CHECK-PRESPECIALIZED-NEXT: entry: -// CHECK-PRESPECIALIZED-NEXT: [[Single_P1:%.*]] = call i8** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() +// CHECK-PRESPECIALIZED-NEXT: [[Single_P1:%.*]] = call ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() // CHECK-PRESPECIALIZED-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"( -// CHECK-PRESPECIALIZED-SAME: %swift.type* getelementptr inbounds ( +// CHECK-PRESPECIALIZED-SAME: ptr getelementptr inbounds ( // CHECK-PRESPECIALIZED-SAME: %swift.full_type, -// CHECK-PRESPECIALIZED-SAME: %swift.full_type* bitcast ( +// CHECK-PRESPECIALIZED-SAME: ptr bitcast ( // CHECK-PRESPECIALIZED-SAME: <{ -// CHECK-PRESPECIALIZED-SAME: i8**, +// CHECK-PRESPECIALIZED-SAME: ptr, // CHECK-PRESPECIALIZED-SAME: [[INT]], -// CHECK-PRESPECIALIZED-SAME: %swift.type_descriptor*, -// CHECK-PRESPECIALIZED-SAME: %swift.type*, +// CHECK-PRESPECIALIZED-SAME: ptr, +// CHECK-PRESPECIALIZED-SAME: ptr, // CHECK-PRESPECIALIZED-SAME: i64 // CHECK-PRESPECIALIZED-SAME: }>* @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMf" -// CHECK-PRESPECIALIZED-SAME: to %swift.full_type* +// CHECK-PRESPECIALIZED-SAME: to ptr // CHECK-PRESPECIALIZED-SAME: ), // CHECK-PRESPECIALIZED-SAME: i32 0, // CHECK-PRESPECIALIZED-SAME: i32 1 // CHECK-PRESPECIALIZED-SAME: ), -// CHECK-PRESPECIALIZED-SAME: %swift.type* getelementptr inbounds ( +// CHECK-PRESPECIALIZED-SAME: ptr getelementptr inbounds ( // CHECK-PRESPECIALIZED-SAME: %swift.full_type, -// CHECK-PRESPECIALIZED-SAME: %swift.full_type* bitcast ( +// CHECK-PRESPECIALIZED-SAME: ptr bitcast ( // CHECK-PRESPECIALIZED-SAME: <{ -// CHECK-PRESPECIALIZED-SAME: i8**, +// CHECK-PRESPECIALIZED-SAME: ptr, // CHECK-PRESPECIALIZED-SAME: [[INT]], -// CHECK-PRESPECIALIZED-SAME: %swift.type_descriptor*, -// CHECK-PRESPECIALIZED-SAME: %swift.type*, +// CHECK-PRESPECIALIZED-SAME: ptr, +// CHECK-PRESPECIALIZED-SAME: ptr, // CHECK-PRESPECIALIZED-SAME: i64 // CHECK-PRESPECIALIZED-SAME: }>* @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMf" -// CHECK-PRESPECIALIZED-SAME: to %swift.full_type* +// CHECK-PRESPECIALIZED-SAME: to ptr // CHECK-PRESPECIALIZED-SAME: ), // CHECK-PRESPECIALIZED-SAME: i32 0, // CHECK-PRESPECIALIZED-SAME: i32 1 // CHECK-PRESPECIALIZED-SAME: ), -// CHECK-PRESPECIALIZED-SAME: i8** [[Single_P1]] +// CHECK-PRESPECIALIZED-SAME: ptr [[Single_P1]] // CHECK-PRESPECIALIZED-SAME: ) // CHECK-PRESPECIALIZED-NEXT: ret void // CHECK-PRESPECIALIZED-NEXT: } @@ -114,73 +110,73 @@ public func single_concrete() { // Lazy witness table accessor for the concrete Single : P1. -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: // CHECK-STABLE-ABI-FALSE-NEXT: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMa"(i64 255) // CHECK-STABLE-ABI-FALSE-NEXT: [[Single_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-STABLE-ABI-FALSE-NEXT: extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-STABLE-ABI-TRUE-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMD") +// CHECK-STABLE-ABI-TRUE-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMD") -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", ptr [[A_P2_PTR]], align 8 -// CHECK-NEXT: [[Single_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: store atomic i8** [[Single_P1]], i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 +// CHECK-NEXT: [[Single_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: store atomic ptr [[Single_P1]], ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } -// TYPEBYNAME-LABEL: define linkonce_odr hidden i8** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() +// TYPEBYNAME-LABEL: define linkonce_odr hidden ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() // TYPEBYNAME-NEXT: entry: -// TYPEBYNAME-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// TYPEBYNAME-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 -// TYPEBYNAME-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// TYPEBYNAME-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// TYPEBYNAME-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 +// TYPEBYNAME-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // TYPEBYNAME-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // TYPEBYNAME: cacheIsNull: -// TYPEBYNAME-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMD") -// TYPEBYNAME-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// TYPEBYNAME-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// TYPEBYNAME-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 +// TYPEBYNAME-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMD") +// TYPEBYNAME-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// TYPEBYNAME-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// TYPEBYNAME-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", ptr [[A_P2_PTR]], align 8 -// TYPEBYNAME-NEXT: [[Single_P1:%.*]] = call i8** @swift_getWitnessTable -// TYPEBYNAME-NEXT: store atomic i8** [[Single_P1]], i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 +// TYPEBYNAME-NEXT: [[Single_P1:%.*]] = call ptr @swift_getWitnessTable +// TYPEBYNAME-NEXT: store atomic ptr [[Single_P1]], ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 // TYPEBYNAME-NEXT: br label %cont // TYPEBYNAME: cont: -// TYPEBYNAME-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] -// TYPEBYNAME-NEXT: ret i8** [[T0]] +// TYPEBYNAME-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] +// TYPEBYNAME-NEXT: ret ptr [[T0]] // TYPEBYNAME-NEXT: } -// TYPEBYNAME_PRESPECIALIZED-LABEL: define linkonce_odr hidden i8** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() +// TYPEBYNAME_PRESPECIALIZED-LABEL: define linkonce_odr hidden ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() // TYPEBYNAME_PRESPECIALIZED-NEXT: entry: -// TYPEBYNAME_PRESPECIALIZED-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// TYPEBYNAME_PRESPECIALIZED-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // TYPEBYNAME_PRESPECIALIZED-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // TYPEBYNAME_PRESPECIALIZED: cacheIsNull: -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// TYPEBYNAME_PRESPECIALIZED-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// TYPEBYNAME_PRESPECIALIZED-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", ptr [[A_P2_PTR]], align 8 -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[Single_P1:%.*]] = call i8** @swift_getWitnessTable -// TYPEBYNAME_PRESPECIALIZED-NEXT: store atomic i8** [[Single_P1]], i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[Single_P1:%.*]] = call ptr @swift_getWitnessTable +// TYPEBYNAME_PRESPECIALIZED-NEXT: store atomic ptr [[Single_P1]], ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 // TYPEBYNAME_PRESPECIALIZED-NEXT: br label %cont // TYPEBYNAME_PRESPECIALIZED: cont: -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] -// TYPEBYNAME_PRESPECIALIZED-NEXT: ret i8** [[T0]] +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] +// TYPEBYNAME_PRESPECIALIZED-NEXT: ret ptr [[T0]] // TYPEBYNAME_PRESPECIALIZED-NEXT: } @@ -192,50 +188,42 @@ extension Double: P1 where B: P2, C: P3 { // witness method for Double.normal -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlAaEP6normalyyFTW"(%T42conditional_conformance_basic_conformances6DoubleV* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlAaEP6normalyyFTW"(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[B_P2_i8star:%.*]] = load i8*, i8** [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[B_P2:%.*]] = bitcast i8* [[B_P2_i8star]] to i8** +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[B_P2_i8star:%.*]] = load ptr, ptr [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -2 -// CHECK-NEXT: [[C_P3_i8star:%.*]] = load i8*, i8** [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[C_P3:%.*]] = bitcast i8* [[C_P3_i8star]] to i8** +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -2 +// CHECK-NEXT: [[C_P3_i8star:%.*]] = load ptr, ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[B:%.*]] = load %swift.type*, %swift.type** [[B_PTR]], align 8 +// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[B_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY_2:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY_2]], i64 3 -// CHECK-NEXT: [[C:%.*]] = load %swift.type*, %swift.type** [[C_PTR]], align 8 +// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 3 +// CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[C_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVA2A2P2RzAA2P3R_rlE6normalyyF"(%swift.type* [[B]], %swift.type* [[C]], i8** [[B_P2]], i8** [[C_P3]]) +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVA2A2P2RzAA2P3R_rlE6normalyyF"(ptr [[B]], ptr [[C]], ptr [[B_P2_i8star]], ptr [[C_P3_i8star]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // witness method for Double.generic -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlAaEP7genericyyqd__AaGRd__lFTW"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_1_0", i8** %"\CF\84_1_0.P3", %T42conditional_conformance_basic_conformances6DoubleV* noalias nocapture swiftself %1, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlAaEP7genericyyqd__AaGRd__lFTW"(ptr noalias nocapture %0, ptr %"\CF\84_1_0", ptr %"\CF\84_1_0.P3", ptr noalias nocapture swiftself %1, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[B_P2_i8star:%.*]] = load i8*, i8** [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[B_P2:%.*]] = bitcast i8* [[B_P2_i8star]] to i8** +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[B_P2_i8star:%.*]] = load ptr, ptr [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -2 -// CHECK-NEXT: [[C_P3_i8star:%.*]] = load i8*, i8** [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[C_P3:%.*]] = bitcast i8* [[C_P3_i8star]] to i8** +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -2 +// CHECK-NEXT: [[C_P3_i8star:%.*]] = load ptr, ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[B:%.*]] = load %swift.type*, %swift.type** [[B_PTR]], align 8 +// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[B_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY_2:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY_2]], i64 3 -// CHECK-NEXT: [[C:%.*]] = load %swift.type*, %swift.type** [[C_PTR]], align 8 +// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 3 +// CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[C_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVA2A2P2RzAA2P3R_rlE7genericyyqd__AaERd__lF"(%swift.opaque* noalias nocapture %0, %swift.type* [[B]], %swift.type* [[C]], %swift.type* %"\CF\84_1_0", i8** [[B_P2]], i8** [[C_P3]], i8** %"\CF\84_1_0.P3") +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVA2A2P2RzAA2P3R_rlE7genericyyqd__AaERd__lF"(ptr noalias nocapture %0, ptr [[B]], ptr [[C]], ptr %"\CF\84_1_0", ptr [[B_P2_i8star]], ptr [[C_P3_i8star]], ptr %"\CF\84_1_0.P3") // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -243,40 +231,40 @@ extension Double: P1 where B: P2, C: P3 { public func double_generic_generic(_: U.Type, _: V.Type) { takes_p1(Double.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances015double_generic_F0yyxm_q_mtAA2P2RzAA2P3R_r0_lF"(%swift.type* %0, %swift.type* %1, %swift.type* %U, %swift.type* %V, i8** %U.P2, i8** %V.P3) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances015double_generic_F0yyxm_q_mtAA2P2RzAA2P3R_r0_lF"(ptr %0, ptr %1, ptr %U, ptr %V, ptr %U.P2, ptr %V.P3) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [2 x i8**], align 8 -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6DoubleVMa"(i64 0, %swift.type* %U, %swift.type* %V) +// CHECK: %conditional.requirement.buffer = alloca [2 x ptr], align 8 +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6DoubleVMa"(i64 0, ptr %U, ptr %V) // CHECK-NEXT: [[Double_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x i8**], [2 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** %U.P2, i8*** [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** %V.P3, i8*** [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %U.P2, ptr [[B_P2_PTR]], align 8 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr %V.P3, ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Double_TYPE]], %swift.type* [[Double_TYPE]], i8** [[Double_P1]]) +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(ptr [[Double_TYPE]], ptr [[Double_TYPE]], ptr [[Double_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } public func double_generic_concrete(_: X.Type) { takes_p1(Double.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances23double_generic_concreteyyxmAA2P2RzlF"(%swift.type* %0, %swift.type* %X, i8** %X.P2) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances23double_generic_concreteyyxmAA2P2RzlF"(ptr %0, ptr %X, ptr %X.P2) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [2 x i8**], align 8 -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6DoubleVMa"(i64 0, %swift.type* %X, %swift.type* bitcast (i64* getelementptr inbounds (<{ i8*, i8**, i64, <{ {{.*}} }>* }>, <{ {{.*}} }>* @"$s42conditional_conformance_basic_conformances4IsP3VMf", i32 0, i32 2) to %swift.type*)) +// CHECK: %conditional.requirement.buffer = alloca [2 x ptr], align 8 +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6DoubleVMa"(i64 0, ptr %X, ptr getelementptr inbounds (<{ ptr, ptr, i64, ptr }>, ptr @"$s42conditional_conformance_basic_conformances4IsP3VMf", i32 0, i32 2)) // CHECK-NEXT: [[Double_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x i8**], [2 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** %X.P2, i8*** [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP3VAA0F0AAWP", i32 0, i32 0), i8*** [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %X.P2, ptr [[B_P2_PTR]], align 8 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP3VAA0F0AAWP", ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Double_TYPE]], %swift.type* [[Double_TYPE]], i8** [[Double_P1]]) +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(ptr [[Double_TYPE]], ptr [[Double_TYPE]], ptr [[Double_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -286,39 +274,39 @@ public func double_concrete_concrete() { // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances016double_concrete_F0yyF"() // CHECK-NEXT: entry: // CHECK-NEXT: [[Double_TYPE:%.*]] = call {{.*}} @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGMD") -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWl"() -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Double_TYPE]], %swift.type* [[Double_TYPE]], i8** [[Double_P1]]) +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWl"() +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(ptr [[Double_TYPE]], ptr [[Double_TYPE]], ptr [[Double_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // Lazy witness table accessor for the concrete Double : P1. -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [2 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [2 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: // CHECK-STABLE-ABI-FALSE-NEXT: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGMa"(i64 255) // CHECK-STABLE-ABI-FALSE-NEXT: [[Double_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-STABLE-ABI-FALSE-NEXT: extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-STABLE-ABI-TRUE-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGMD") +// CHECK-STABLE-ABI-TRUE-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGMD") -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x i8**], [2 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", i32 0, i32 0), i8*** [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP3VAA0F0AAWP", i32 0, i32 0), i8*** [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", ptr [[B_P2_PTR]], align 8 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP3VAA0F0AAWP", ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: store atomic i8** [[Double_P1]], i8*** @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWL" release, align 8 +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: store atomic ptr [[Double_P1]], ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Double_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Double_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } diff --git a/test/Inputs/conditional_conformance_basic_conformances_future.swift b/test/Inputs/conditional_conformance_basic_conformances_future.swift index 5c56e3e01cc35..b3e02f5258a0f 100644 --- a/test/Inputs/conditional_conformance_basic_conformances_future.swift +++ b/test/Inputs/conditional_conformance_basic_conformances_future.swift @@ -18,45 +18,41 @@ extension Single: P1 where A: P2 { // witness method for Single.normal -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlAaEP6normalyyFTW"(%T42conditional_conformance_basic_conformances6SingleV* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlAaEP6normalyyFTW"(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[A_P2_i8star:%.*]] = load i8*, i8** [[A_P2_PTR]], align 8 -// CHECK-NEXT: [[A_P2:%.*]] = bitcast i8* [[A_P2_i8star]] to i8** -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[A_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[A:%.*]] = load %swift.type*, %swift.type** [[A_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVA2A2P2RzlE6normalyyF"(%swift.type* [[A]], i8** [[A_P2]]) +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[A_P2_i8star:%.*]] = load ptr, ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[A_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[A:%.*]] = load ptr, ptr [[A_PTR]], align 8 +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVA2A2P2RzlE6normalyyF"(ptr [[A]], ptr [[A_P2_i8star]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // witness method for Single.generic -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlAaEP7genericyyqd__AA2P3Rd__lFTW"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_1_0", i8** %"\CF\84_1_0.P3", %T42conditional_conformance_basic_conformances6SingleV* noalias nocapture swiftself %1, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlAaEP7genericyyqd__AA2P3Rd__lFTW"(ptr noalias nocapture %0, ptr %"\CF\84_1_0", ptr %"\CF\84_1_0.P3", ptr noalias nocapture swiftself %1, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[A_P2_i8star:%.*]] = load i8*, i8** [[A_P2_PTR]], align 8 -// CHECK-NEXT: [[A_P2:%.*]] = bitcast i8* [[A_P2_i8star]] to i8** -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[A_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[A:%.*]] = load %swift.type*, %swift.type** [[A_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVA2A2P2RzlE7genericyyqd__AA2P3Rd__lF"(%swift.opaque* noalias nocapture %0, %swift.type* [[A]], %swift.type* %"\CF\84_1_0", i8** [[A_P2]], i8** %"\CF\84_1_0.P3") +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[A_P2_i8star:%.*]] = load ptr, ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[A_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[A:%.*]] = load ptr, ptr [[A_PTR]], align 8 +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6SingleVA2A2P2RzlE7genericyyqd__AA2P3Rd__lF"(ptr noalias nocapture %0, ptr [[A]], ptr %"\CF\84_1_0", ptr [[A_P2_i8star]], ptr %"\CF\84_1_0.P3") // CHECK-NEXT: ret void // CHECK-NEXT: } public func single_generic(_: T.Type) { takes_p1(Single.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances14single_genericyyxmAA2P2RzlF"(%swift.type* %0, %swift.type* %T, i8** %T.P2) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances14single_genericyyxmAA2P2RzlF"(ptr %0, ptr %T, ptr %T.P2) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6SingleVMa"(i64 0, %swift.type* %T) +// CHECK: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6SingleVMa"(i64 0, ptr %T) // CHECK-NEXT: [[Single_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[T_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** %T.P2, i8*** [[T_P2_PTR]], align 8 -// CHECK-NEXT: [[Single_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Single_TYPE]], %swift.type* [[Single_TYPE]], i8** [[Single_P1]]) +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[T_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %T.P2, ptr [[T_P2_PTR]], align 8 +// CHECK-NEXT: [[Single_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(ptr [[Single_TYPE]], ptr [[Single_TYPE]], ptr [[Single_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -66,41 +62,21 @@ public func single_concrete() { } // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances15single_concreteyyF"() // CHECK-NEXT: entry: -// CHECK-NEXT: [[Single_P1:%.*]] = call i8** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() +// CHECK-NEXT: [[Single_P1:%.*]] = call ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() // CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"( -// CHECK-SAME: %swift.type* getelementptr inbounds ( -// CHECK-SAME: %swift.full_type, -// CHECK-SAME: %swift.full_type* bitcast ( -// CHECK-SAME: <{ -// CHECK-SAME: i8*, -// CHECK-SAME: i8**, -// CHECK-SAME: [[INT]], -// CHECK-SAME: %swift.type_descriptor*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: i64 -// CHECK-SAME: }>* @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMf" -// CHECK-SAME: to %swift.full_type* -// CHECK-SAME: ), -// CHECK-SAME: i32 0, +// CHECK-SAME: ptr getelementptr inbounds ( +// CHECK-SAME: %swift.full_type, +// CHECK-SAME: ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMf" +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 -// CHECK-SAME: ), -// CHECK-SAME: %swift.type* getelementptr inbounds ( -// CHECK-SAME: %swift.full_type, -// CHECK-SAME: %swift.full_type* bitcast ( -// CHECK-SAME: <{ -// CHECK-SAME: i8*, -// CHECK-SAME: i8**, -// CHECK-SAME: [[INT]], -// CHECK-SAME: %swift.type_descriptor*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: i64 -// CHECK-SAME: }>* @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMf" -// CHECK-SAME: to %swift.full_type* -// CHECK-SAME: ), -// CHECK-SAME: i32 0, +// CHECK-SAME: ), +// CHECK-SAME: ptr getelementptr inbounds ( +// CHECK-SAME: %swift.full_type, +// CHECK-SAME: ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMf" +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 -// CHECK-SAME: ), -// CHECK-SAME: i8** [[Single_P1]] +// CHECK-SAME: ), +// CHECK-SAME: ptr [[Single_P1]] // CHECK-SAME: ) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -108,90 +84,78 @@ public func single_concrete() { // Lazy witness table accessor for the concrete Single : P1. -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 - -// CHECK-NEXT: [[Single_P1:%.*]] = call i8** @swift_getWitnessTable( -// CHECK-SAME: %swift.protocol_conformance_descriptor* bitcast ( -// CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 }* -// CHECK-SAME: @"$s42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlMc" -// CHECK-SAME: to %swift.protocol_conformance_descriptor* -// CHECK-SAME: ), -// CHECK-SAME: %swift.type* getelementptr inbounds ( -// CHECK-SAME: %swift.full_type, -// CHECK-SAME: %swift.full_type* bitcast ( -// CHECK-SAME: <{ -// CHECK-SAME: i8**, -// CHECK-SAME: [[INT]], -// CHECK-SAME: %swift.type_descriptor*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: i64 -// CHECK-SAME: }>* @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMf" -// CHECK-SAME: to %swift.full_type* -// CHECK-SAME: ), -// CHECK-SAME: i32 0, +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", ptr [[A_P2_PTR]], align 8 + +// CHECK-NEXT: [[Single_P1:%.*]] = call ptr @swift_getWitnessTable( +// CHECK-SAME: ptr +// CHECK-SAME: @"$s42conditional_conformance_basic_conformances6SingleVyxGAA2P1A2A2P2RzlMc", +// CHECK-SAME: ptr getelementptr inbounds ( +// CHECK-SAME: %swift.full_type, +// CHECK-SAME: ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMf" +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 -// CHECK-SAME: ), -// CHECK-SAME: i8*** [[CONDITIONAL_REQUIREMENTS]] +// CHECK-SAME: ), +// CHECK-SAME: ptr [[CONDITIONAL_REQUIREMENTS]] // CHECK-SAME: ) -// CHECK-NEXT: store atomic i8** [[Single_P1]], i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 +// CHECK-NEXT: store atomic ptr [[Single_P1]], ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } -// TYPEBYNAME-LABEL: define linkonce_odr hidden i8** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() +// TYPEBYNAME-LABEL: define linkonce_odr hidden ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() // TYPEBYNAME-NEXT: entry: -// TYPEBYNAME-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// TYPEBYNAME-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 -// TYPEBYNAME-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// TYPEBYNAME-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// TYPEBYNAME-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 +// TYPEBYNAME-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // TYPEBYNAME-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // TYPEBYNAME: cacheIsNull: -// TYPEBYNAME-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMD") -// TYPEBYNAME-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// TYPEBYNAME-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// TYPEBYNAME-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 +// TYPEBYNAME-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGMD") +// TYPEBYNAME-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// TYPEBYNAME-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// TYPEBYNAME-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", ptr [[A_P2_PTR]], align 8 -// TYPEBYNAME-NEXT: [[Single_P1:%.*]] = call i8** @swift_getWitnessTable -// TYPEBYNAME-NEXT: store atomic i8** [[Single_P1]], i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 +// TYPEBYNAME-NEXT: [[Single_P1:%.*]] = call ptr @swift_getWitnessTable +// TYPEBYNAME-NEXT: store atomic ptr [[Single_P1]], ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 // TYPEBYNAME-NEXT: br label %cont // TYPEBYNAME: cont: -// TYPEBYNAME-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] -// TYPEBYNAME-NEXT: ret i8** [[T0]] +// TYPEBYNAME-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] +// TYPEBYNAME-NEXT: ret ptr [[T0]] // TYPEBYNAME-NEXT: } -// TYPEBYNAME_PRESPECIALIZED-LABEL: define linkonce_odr hidden i8** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() +// TYPEBYNAME_PRESPECIALIZED-LABEL: define linkonce_odr hidden ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWl"() // TYPEBYNAME_PRESPECIALIZED-NEXT: entry: -// TYPEBYNAME_PRESPECIALIZED-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// TYPEBYNAME_PRESPECIALIZED-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL", align 8 +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // TYPEBYNAME_PRESPECIALIZED-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // TYPEBYNAME_PRESPECIALIZED: cacheIsNull: -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// TYPEBYNAME_PRESPECIALIZED-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// TYPEBYNAME_PRESPECIALIZED-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", ptr [[A_P2_PTR]], align 8 -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[Single_P1:%.*]] = call i8** @swift_getWitnessTable -// TYPEBYNAME_PRESPECIALIZED-NEXT: store atomic i8** [[Single_P1]], i8*** @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[Single_P1:%.*]] = call ptr @swift_getWitnessTable +// TYPEBYNAME_PRESPECIALIZED-NEXT: store atomic ptr [[Single_P1]], ptr @"$s42conditional_conformance_basic_conformances6SingleVyAA4IsP2VGACyxGAA2P1A2A0G0RzlWL" release, align 8 // TYPEBYNAME_PRESPECIALIZED-NEXT: br label %cont // TYPEBYNAME_PRESPECIALIZED: cont: -// TYPEBYNAME_PRESPECIALIZED-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] -// TYPEBYNAME_PRESPECIALIZED-NEXT: ret i8** [[T0]] +// TYPEBYNAME_PRESPECIALIZED-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Single_P1]], %cacheIsNull ] +// TYPEBYNAME_PRESPECIALIZED-NEXT: ret ptr [[T0]] // TYPEBYNAME_PRESPECIALIZED-NEXT: } @@ -203,50 +167,42 @@ extension Double: P1 where B: P2, C: P3 { // witness method for Double.normal -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlAaEP6normalyyFTW"(%T42conditional_conformance_basic_conformances6DoubleV* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlAaEP6normalyyFTW"(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[B_P2_i8star:%.*]] = load i8*, i8** [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[B_P2:%.*]] = bitcast i8* [[B_P2_i8star]] to i8** +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[B_P2_i8star:%.*]] = load ptr, ptr [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -2 -// CHECK-NEXT: [[C_P3_i8star:%.*]] = load i8*, i8** [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[C_P3:%.*]] = bitcast i8* [[C_P3_i8star]] to i8** +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -2 +// CHECK-NEXT: [[C_P3_i8star:%.*]] = load ptr, ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[B:%.*]] = load %swift.type*, %swift.type** [[B_PTR]], align 8 +// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[B_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY_2:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY_2]], i64 3 -// CHECK-NEXT: [[C:%.*]] = load %swift.type*, %swift.type** [[C_PTR]], align 8 +// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 3 +// CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[C_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVA2A2P2RzAA2P3R_rlE6normalyyF"(%swift.type* [[B]], %swift.type* [[C]], i8** [[B_P2]], i8** [[C_P3]]) +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVA2A2P2RzAA2P3R_rlE6normalyyF"(ptr [[B]], ptr [[C]], ptr [[B_P2_i8star]], ptr [[C_P3_i8star]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // witness method for Double.generic -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlAaEP7genericyyqd__AaGRd__lFTW"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_1_0", i8** %"\CF\84_1_0.P3", %T42conditional_conformance_basic_conformances6DoubleV* noalias nocapture swiftself %1, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlAaEP7genericyyqd__AaGRd__lFTW"(ptr noalias nocapture %0, ptr %"\CF\84_1_0", ptr %"\CF\84_1_0.P3", ptr noalias nocapture swiftself %1, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[B_P2_i8star:%.*]] = load i8*, i8** [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[B_P2:%.*]] = bitcast i8* [[B_P2_i8star]] to i8** +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[B_P2_i8star:%.*]] = load ptr, ptr [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -2 -// CHECK-NEXT: [[C_P3_i8star:%.*]] = load i8*, i8** [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[C_P3:%.*]] = bitcast i8* [[C_P3_i8star]] to i8** +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -2 +// CHECK-NEXT: [[C_P3_i8star:%.*]] = load ptr, ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[B:%.*]] = load %swift.type*, %swift.type** [[B_PTR]], align 8 +// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[B_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY_2:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY_2]], i64 3 -// CHECK-NEXT: [[C:%.*]] = load %swift.type*, %swift.type** [[C_PTR]], align 8 +// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 3 +// CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[C_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVA2A2P2RzAA2P3R_rlE7genericyyqd__AaERd__lF"(%swift.opaque* noalias nocapture %0, %swift.type* [[B]], %swift.type* [[C]], %swift.type* %"\CF\84_1_0", i8** [[B_P2]], i8** [[C_P3]], i8** %"\CF\84_1_0.P3") +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances6DoubleVA2A2P2RzAA2P3R_rlE7genericyyqd__AaERd__lF"(ptr noalias nocapture %0, ptr [[B]], ptr [[C]], ptr %"\CF\84_1_0", ptr [[B_P2_i8star]], ptr [[C_P3_i8star]], ptr %"\CF\84_1_0.P3") // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -254,74 +210,64 @@ extension Double: P1 where B: P2, C: P3 { public func double_generic_generic(_: U.Type, _: V.Type) { takes_p1(Double.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances015double_generic_F0yyxm_q_mtAA2P2RzAA2P3R_r0_lF"(%swift.type* %0, %swift.type* %1, %swift.type* %U, %swift.type* %V, i8** %U.P2, i8** %V.P3) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances015double_generic_F0yyxm_q_mtAA2P2RzAA2P3R_r0_lF"(ptr %0, ptr %1, ptr %U, ptr %V, ptr %U.P2, ptr %V.P3) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [2 x i8**], align 8 -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6DoubleVMa"(i64 0, %swift.type* %U, %swift.type* %V) +// CHECK: %conditional.requirement.buffer = alloca [2 x ptr], align 8 +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6DoubleVMa"(i64 0, ptr %U, ptr %V) // CHECK-NEXT: [[Double_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x i8**], [2 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** %U.P2, i8*** [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** %V.P3, i8*** [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %U.P2, ptr [[B_P2_PTR]], align 8 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr %V.P3, ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Double_TYPE]], %swift.type* [[Double_TYPE]], i8** [[Double_P1]]) +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"(ptr [[Double_TYPE]], ptr [[Double_TYPE]], ptr [[Double_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } public func double_generic_concrete(_: X.Type) { takes_p1(Double.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances23double_generic_concreteyyxmAA2P2RzlF"(%swift.type* %0, %swift.type* %X, i8** %X.P2) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances23double_generic_concreteyyxmAA2P2RzlF"(ptr %0, ptr %X, ptr %X.P2) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [2 x i8**], align 8 +// CHECK: %conditional.requirement.buffer = alloca [2 x ptr], align 8 // CHECK: [[Double_TYPE_Response:%[0-9]+]] = call swiftcc %swift.metadata_response @"$s42conditional_conformance_basic_conformances6DoubleVMa"( -// CHECK-SAME: i64 0, -// CHECK-SAME: %swift.type* -// CHECK-SAME: %X, -// CHECK-SAME: %swift.type* bitcast ( -// CHECK-SAME: i64* getelementptr inbounds ( -// CHECK-SAME: <{ -// CHECK-SAME: i8*, -// CHECK-SAME: i8**, -// CHECK-SAME: i64, -// CHECK-SAME: <{ i32, i32, i32, i32, i32, i32, i32 }>*, -// CHECK-SAME: i64 -// CHECK-SAME: }>, -// CHECK-SAME: <{ -// CHECK-SAME: i8**, -// CHECK-SAME: i64, -// CHECK-SAME: <{ i32, i32, i32, i32, i32, i32, i32 }>*, -// CHECK-SAME: i64 -// CHECK-SAME: }>* @"$s42conditional_conformance_basic_conformances4IsP3VMf", -// CHECK-SAME: i32 0, +// CHECK-SAME: i64 0, +// CHECK-SAME: ptr +// CHECK-SAME: %X, +// CHECK-SAME: ptr getelementptr inbounds ( +// CHECK-SAME: <{ +// CHECK-SAME: ptr, +// CHECK-SAME: ptr, +// CHECK-SAME: i64, +// CHECK-SAME: ptr, +// CHECK-SAME: i64 +// CHECK-SAME: }>, +// CHECK-SAME: ptr @"$s42conditional_conformance_basic_conformances4IsP3VMf", +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 -// CHECK-SAME: ) to %swift.type* // CHECK-SAME: ) // CHECK-SAME: ) // CHECK: [[Double_TYPE:%[0-9]+]] = extractvalue %swift.metadata_response [[Double_TYPE_Response]], 0 -// CHECK: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x i8**], [2 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** %X.P2, i8*** [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP3VAA0F0AAWP", i32 0, i32 0), i8*** [[C_P3_PTR]], align 8 - -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable( -// CHECK-SAME: %swift.protocol_conformance_descriptor* bitcast ( -// CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 }* -// CHECK-SAME: @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlMc" -// CHECK-SAME: to %swift.protocol_conformance_descriptor* -// CHECK-SAME: ), -// CHECK-SAME: %swift.type* %3, -// CHECK-SAME: i8*** [[CONDITIONAL_REQUIREMENTS]] +// CHECK: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %X.P2, ptr [[B_P2_PTR]], align 8 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP3VAA0F0AAWP", ptr [[C_P3_PTR]], align 8 + +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable( +// CHECK-SAME: ptr +// CHECK-SAME: @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlMc" +// CHECK-SAME: ptr %{{[0-9]+}}, +// CHECK-SAME: ptr [[CONDITIONAL_REQUIREMENTS]] // CHECK-SAME: ) // CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"( -// CHECK-SAME: %swift.type* [[Double_TYPE]], -// CHECK-SAME: %swift.type* [[Double_TYPE]], -// CHECK-SAME: i8** [[Double_P1]] +// CHECK-SAME: ptr [[Double_TYPE]], +// CHECK-SAME: ptr [[Double_TYPE]], +// CHECK-SAME: ptr [[Double_P1]] // CHECK-SAME: ) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -331,94 +277,58 @@ public func double_concrete_concrete() { } // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s42conditional_conformance_basic_conformances016double_concrete_F0yyF"() // CHECK-NEXT: entry: -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWl"() +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWl"() // CHECK-NEXT: call swiftcc void @"$s42conditional_conformance_basic_conformances8takes_p1yyxmAA2P1RzlF"( -// CHECK-SAME: %swift.type* getelementptr inbounds ( -// CHECK-SAME: %swift.full_type, -// CHECK-SAME: %swift.full_type* bitcast ( -// CHECK-SAME: <{ -// CHECK-SAME: i8*, -// CHECK-SAME: i8**, -// CHECK-SAME: [[INT]], -// CHECK-SAME: %swift.type_descriptor*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: i64 -// CHECK-SAME: }>* @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGMf" -// CHECK-SAME: to %swift.full_type* -// CHECK-SAME: ), -// CHECK-SAME: i32 0, +// CHECK-SAME: ptr getelementptr inbounds ( +// CHECK-SAME: %swift.full_type, +// CHECK-SAME: ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGMf" +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 -// CHECK-SAME: ), -// CHECK-SAME: %swift.type* getelementptr inbounds ( -// CHECK-SAME: %swift.full_type, -// CHECK-SAME: %swift.full_type* bitcast ( -// CHECK-SAME: <{ -// CHECK-SAME: i8*, -// CHECK-SAME: i8**, -// CHECK-SAME: [[INT]], -// CHECK-SAME: %swift.type_descriptor*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: i64 -// CHECK-SAME: }>* @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGMf" -// CHECK-SAME: to %swift.full_type* -// CHECK-SAME: ), -// CHECK-SAME: i32 0, +// CHECK-SAME: ), +// CHECK-SAME: ptr getelementptr inbounds ( +// CHECK-SAME: %swift.full_type, +// CHECK-SAME: ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGMf" +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 -// CHECK-SAME: ), -// CHECK-SAME: i8** [[Double_P1]] +// CHECK-SAME: ), +// CHECK-SAME: ptr [[Double_P1]] // CHECK-SAME: ) // CHECK-NEXT: ret void // CHECK-NEXT: } // Lazy witness table accessor for the concrete Double : P1. -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [2 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [2 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x i8**], [2 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", i32 0, i32 0), i8*** [[B_P2_PTR]], align 8 -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s42conditional_conformance_basic_conformances4IsP3VAA0F0AAWP", i32 0, i32 0), i8*** [[C_P3_PTR]], align 8 - -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable( -// CHECK-SAME: %swift.protocol_conformance_descriptor* bitcast ( -// CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 }* -// CHECK-SAME: @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlMc" -// CHECK-SAME: to %swift.protocol_conformance_descriptor* -// CHECK-SAME: ), -// CHECK-SAME: %swift.type* getelementptr inbounds ( -// CHECK-SAME: %swift.full_type, -// CHECK-SAME: %swift.full_type* bitcast ( -// CHECK-SAME: <{ -// CHECK-SAME: i8*, -// CHECK-SAME: i8**, -// CHECK-SAME: i64, -// CHECK-SAME: %swift.type_descriptor*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: i64 -// CHECK-SAME: }>* @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGMf" -// CHECK-SAME: to %swift.full_type* -// CHECK-SAME: ), -// CHECK-SAME: i32 0, +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [2 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP2VAA0F0AAWP", ptr [[B_P2_PTR]], align 8 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr @"$s42conditional_conformance_basic_conformances4IsP3VAA0F0AAWP", ptr [[C_P3_PTR]], align 8 + +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable( +// CHECK-SAME: ptr +// CHECK-SAME: @"$s42conditional_conformance_basic_conformances6DoubleVyxq_GAA2P1A2A2P2RzAA2P3R_rlMc" +// CHECK-SAME: ptr getelementptr inbounds ( +// CHECK-SAME: %swift.full_type, +// CHECK-SAME: ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGMf" +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 -// CHECK-SAME: ), -// CHECK-SAME: i8*** [[CONDITIONAL_REQUIREMENTS]] +// CHECK-SAME: ), +// CHECK-SAME: ptr [[CONDITIONAL_REQUIREMENTS]] // CHECK-SAME: ) -// CHECK-NEXT: store atomic i8** [[Double_P1]], i8*** @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWL" release, align 8 +// CHECK-NEXT: store atomic ptr [[Double_P1]], ptr @"$s42conditional_conformance_basic_conformances6DoubleVyAA4IsP2VAA0F2P3VGACyxq_GAA2P1A2A0G0RzAA0H0R_rlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Double_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Double_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } diff --git a/test/Inputs/conditional_conformance_recursive.swift b/test/Inputs/conditional_conformance_recursive.swift index c094a239802df..37725fc368e1e 100644 --- a/test/Inputs/conditional_conformance_recursive.swift +++ b/test/Inputs/conditional_conformance_recursive.swift @@ -19,7 +19,7 @@ protocol P3: P2 where A: P3 { } extension Wrapper: P3 where T: P3 { } // associated type witness table accessor for A : P2 in Wrapper: P2 -// CHECK-LABEL: define internal swiftcc i8** @"$s33conditional_conformance_recursive7WrapperVyxGAA2P2A2aERzrl1AAA2P1P_AaEPWT" -// CHECK: [[CONDITIONAL_REQ_BUFFER:%.*]] = alloca [1 x i8**] -// CHECK: [[FIRST_REQ:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* [[CONDITIONAL_REQ_BUFFER]] -// CHECK: call i8** @swift_getWitnessTable +// CHECK-LABEL: define internal swiftcc ptr @"$s33conditional_conformance_recursive7WrapperVyxGAA2P2A2aERzrl1AAA2P1P_AaEPWT" +// CHECK: [[CONDITIONAL_REQ_BUFFER:%.*]] = alloca [1 x ptr] +// CHECK: [[FIRST_REQ:%.*]] = getelementptr inbounds [1 x ptr], ptr [[CONDITIONAL_REQ_BUFFER]] +// CHECK: call ptr @swift_getWitnessTable diff --git a/test/Inputs/conditional_conformance_subclass.swift b/test/Inputs/conditional_conformance_subclass.swift index 0eb7324a5713d..87b7f8ca49911 100644 --- a/test/Inputs/conditional_conformance_subclass.swift +++ b/test/Inputs/conditional_conformance_subclass.swift @@ -16,25 +16,23 @@ extension Base: P1 where A: P2 { // witness method for Base.normal -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s32conditional_conformance_subclass4BaseCyxGAA2P1A2A2P2RzlAaEP6normalyyFTW"(%T32conditional_conformance_subclass4BaseC.0** noalias nocapture swiftself dereferenceable(8) %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s32conditional_conformance_subclass4BaseCyxGAA2P1A2A2P2RzlAaEP6normalyyFTW"(ptr noalias nocapture swiftself dereferenceable(8) %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[A_P2:%.*]] = load i8*, i8** [[A_P2_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.P2" = bitcast i8* [[A_P2]] to i8** -// CHECK-NEXT: [[SELF:%.]] = load %T32conditional_conformance_subclass4BaseC.0*, %T32conditional_conformance_subclass4BaseC.0** %0 -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass4BaseCA2A2P2RzlE6normalyyF"(i8** %"\CF\84_0_0.P2", %T32conditional_conformance_subclass4BaseC.0* swiftself [[SELF]]) +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[A_P2:%.*]] = load ptr, ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[SELF:%.]] = load ptr, ptr %0 +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass4BaseCA2A2P2RzlE6normalyyF"(ptr [[A_P2]], ptr swiftself [[SELF]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // witness method for Base.generic -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s32conditional_conformance_subclass4BaseCyxGAA2P1A2A2P2RzlAaEP7genericyyqd__AA2P3Rd__lFTW"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_1_0", i8** %"\CF\84_1_0.P3", %T32conditional_conformance_subclass4BaseC.1** noalias nocapture swiftself dereferenceable(8) %1, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s32conditional_conformance_subclass4BaseCyxGAA2P1A2A2P2RzlAaEP7genericyyqd__AA2P3Rd__lFTW"(ptr noalias nocapture %0, ptr %"\CF\84_1_0", ptr %"\CF\84_1_0.P3", ptr noalias nocapture swiftself dereferenceable(8) %1, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[A_P2:%.*]] = load i8*, i8** [[A_P2_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.P2" = bitcast i8* [[A_P2]] to i8** -// CHECK-NEXT: [[SELF:%.]] = load %T32conditional_conformance_subclass4BaseC.1*, %T32conditional_conformance_subclass4BaseC.1** %1, align 8 -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass4BaseCA2A2P2RzlE7genericyyqd__AA2P3Rd__lF"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_1_0", i8** %"\CF\84_0_0.P2", i8** %"\CF\84_1_0.P3", %T32conditional_conformance_subclass4BaseC.1* swiftself [[SELF]]) +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[A_P2:%.*]] = load ptr, ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[SELF:%.]] = load ptr, ptr %1, align 8 +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass4BaseCA2A2P2RzlE7genericyyqd__AA2P3Rd__lF"(ptr noalias nocapture %0, ptr %"\CF\84_1_0", ptr [[A_P2]], ptr %"\CF\84_1_0.P3", ptr swiftself [[SELF]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -47,16 +45,16 @@ public func subclassgeneric_generic(_: T.Type) { takes_p1(SubclassGeneric.self) } -// CHECK-LABEL: define{{( dllexport| protected)?}} swiftcc void @"$s32conditional_conformance_subclass23subclassgeneric_genericyyxmAA2P2RzlF"(%swift.type* %0, %swift.type* %T, i8** %T.P2) +// CHECK-LABEL: define{{( dllexport| protected)?}} swiftcc void @"$s32conditional_conformance_subclass23subclassgeneric_genericyyxmAA2P2RzlF"(ptr %0, ptr %T, ptr %T.P2) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s32conditional_conformance_subclass15SubclassGenericCMa"(i64 0, %swift.type* %T) +// CHECK: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s32conditional_conformance_subclass15SubclassGenericCMa"(i64 0, ptr %T) // CHECK-NEXT: [[SubclassGeneric_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[T_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** %T.P2, i8*** [[T_P2_PTR]], align 8 -// CHECK-NEXT: [[Base_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(%swift.type* [[SubclassGeneric_TYPE]], %swift.type* [[SubclassGeneric_TYPE]], i8** [[Base_P1]]) +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[T_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %T.P2, ptr [[T_P2_PTR]], align 8 +// CHECK-NEXT: [[Base_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(ptr [[SubclassGeneric_TYPE]], ptr [[SubclassGeneric_TYPE]], ptr [[Base_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -67,36 +65,36 @@ public func subclassgeneric_concrete() { // CHECK-LABEL: define{{( dllexport| protected)?}} swiftcc void @"$s32conditional_conformance_subclass24subclassgeneric_concreteyyF"() // CHECK-NEXT: entry: // CHECK-NEXT: [[SubclassGeneric_TYPE:%.*]] = call {{.*}}@"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD" -// CHECK-NEXT: [[Base_P1:%.*]] = call i8** @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWl"() -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(%swift.type* [[SubclassGeneric_TYPE]], %swift.type* [[SubclassGeneric_TYPE]], i8** [[Base_P1]]) +// CHECK-NEXT: [[Base_P1:%.*]] = call ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWl"() +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(ptr [[SubclassGeneric_TYPE]], ptr [[SubclassGeneric_TYPE]], ptr [[Base_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // Lazy witness table accessor for the concrete SubclassGeneric : Base. -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: // CHECK-STABLE-ABI-FALSE-NEXT: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMa"(i64 255) // CHECK-STABLE-ABI-FALSE-NEXT: [[SubclassGeneric_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-STABLE-ABI-FALSE-NEXT: extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-STABLE-ABI-TRUE-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") +// CHECK-STABLE-ABI-TRUE-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 -// CHECK-NEXT: [[Base_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: store atomic i8** [[Base_P1]], i8*** @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWL" release, align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[Base_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: store atomic ptr [[Base_P1]], ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } public func subclassconcrete() { @@ -107,16 +105,16 @@ public func subclassconcrete() { // CHECK-NEXT: entry: // CHECK-NEXT: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s32conditional_conformance_subclass16SubclassConcreteCMa"(i64 0) // CHECK-NEXT: [[SubclassConcrete_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[SubclassConcrete_P1:%.*]] = call i8** @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(%swift.type* [[SubclassConcrete_TYPE]], %swift.type* [[SubclassConcrete_TYPE]], i8** [[SubclassConcrete_P1]]) +// CHECK-NEXT: [[SubclassConcrete_P1:%.*]] = call ptr @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(ptr [[SubclassConcrete_TYPE]], ptr [[SubclassConcrete_TYPE]], ptr [[SubclassConcrete_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: @@ -124,16 +122,16 @@ public func subclassconcrete() { // CHECK-NEXT: [[SubclassConcrete_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NEXT: extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 -// CHECK-NEXT: [[Base_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: store atomic i8** [[Base_P1]], i8*** @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL" release, align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[Base_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: store atomic ptr [[Base_P1]], ptr @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } public func subclassgenericconcrete() { @@ -144,30 +142,30 @@ public func subclassgenericconcrete() { // CHECK-NEXT: entry: // CHECK-NEXT: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s32conditional_conformance_subclass23SubclassGenericConcreteCMa"(i64 0) // CHECK-NEXT: [[SubclassGenericConcrete_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[SubclassGenericConcrete_P1:%.*]] = call i8** @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(%swift.type* [[SubclassGenericConcrete_TYPE]], %swift.type* [[SubclassGenericConcrete_TYPE]], i8** [[SubclassGenericConcrete_P1]]) +// CHECK-NEXT: [[SubclassGenericConcrete_P1:%.*]] = call ptr @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(ptr [[SubclassGenericConcrete_TYPE]], ptr [[SubclassGenericConcrete_TYPE]], ptr [[SubclassGenericConcrete_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: // CHECK-NEXT: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s32conditional_conformance_subclass23SubclassGenericConcreteCMa"(i64 255) // CHECK-NEXT: [[SubclassGenericConcrete_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NEXT: extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 -// CHECK-NEXT: [[Base_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: store atomic i8** [[Base_P1]], i8*** @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL" release, align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[Base_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: store atomic ptr [[Base_P1]], ptr @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } diff --git a/test/Inputs/conditional_conformance_subclass_future.swift b/test/Inputs/conditional_conformance_subclass_future.swift index 16b78538135cf..92bf4482a0a81 100644 --- a/test/Inputs/conditional_conformance_subclass_future.swift +++ b/test/Inputs/conditional_conformance_subclass_future.swift @@ -16,25 +16,23 @@ extension Base: P1 where A: P2 { // witness method for Base.normal -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s32conditional_conformance_subclass4BaseCyxGAA2P1A2A2P2RzlAaEP6normalyyFTW"(%T32conditional_conformance_subclass4BaseC.0** noalias nocapture swiftself dereferenceable(8) %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s32conditional_conformance_subclass4BaseCyxGAA2P1A2A2P2RzlAaEP6normalyyFTW"(ptr noalias nocapture swiftself dereferenceable(8) %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[A_P2:%.*]] = load i8*, i8** [[A_P2_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.P2" = bitcast i8* [[A_P2]] to i8** -// CHECK-NEXT: [[SELF:%.]] = load %T32conditional_conformance_subclass4BaseC.0*, %T32conditional_conformance_subclass4BaseC.0** %0 -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass4BaseCA2A2P2RzlE6normalyyF"(i8** %"\CF\84_0_0.P2", %T32conditional_conformance_subclass4BaseC.0* swiftself [[SELF]]) +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[A_P2:%.*]] = load ptr, ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[SELF:%.]] = load ptr, ptr %0 +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass4BaseCA2A2P2RzlE6normalyyF"(ptr [[A_P2]], ptr swiftself [[SELF]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // witness method for Base.generic -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s32conditional_conformance_subclass4BaseCyxGAA2P1A2A2P2RzlAaEP7genericyyqd__AA2P3Rd__lFTW"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_1_0", i8** %"\CF\84_1_0.P3", %T32conditional_conformance_subclass4BaseC.1** noalias nocapture swiftself dereferenceable(8) %1, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s32conditional_conformance_subclass4BaseCyxGAA2P1A2A2P2RzlAaEP7genericyyqd__AA2P3Rd__lFTW"(ptr noalias nocapture %0, ptr %"\CF\84_1_0", ptr %"\CF\84_1_0.P3", ptr noalias nocapture swiftself dereferenceable(8) %1, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[A_P2:%.*]] = load i8*, i8** [[A_P2_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.P2" = bitcast i8* [[A_P2]] to i8** -// CHECK-NEXT: [[SELF:%.]] = load %T32conditional_conformance_subclass4BaseC.1*, %T32conditional_conformance_subclass4BaseC.1** %1, align 8 -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass4BaseCA2A2P2RzlE7genericyyqd__AA2P3Rd__lF"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_1_0", i8** %"\CF\84_0_0.P2", i8** %"\CF\84_1_0.P3", %T32conditional_conformance_subclass4BaseC.1* swiftself [[SELF]]) +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[A_P2:%.*]] = load ptr, ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[SELF:%.]] = load ptr, ptr %1, align 8 +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass4BaseCA2A2P2RzlE7genericyyqd__AA2P3Rd__lF"(ptr noalias nocapture %0, ptr %"\CF\84_1_0", ptr [[A_P2]], ptr %"\CF\84_1_0.P3", ptr swiftself [[SELF]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -47,16 +45,16 @@ public func subclassgeneric_generic(_: T.Type) { takes_p1(SubclassGeneric.self) } -// CHECK-LABEL: define{{( dllexport| protected)?}} swiftcc void @"$s32conditional_conformance_subclass23subclassgeneric_genericyyxmAA2P2RzlF"(%swift.type* %0, %swift.type* %T, i8** %T.P2) +// CHECK-LABEL: define{{( dllexport| protected)?}} swiftcc void @"$s32conditional_conformance_subclass23subclassgeneric_genericyyxmAA2P2RzlF"(ptr %0, ptr %T, ptr %T.P2) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s32conditional_conformance_subclass15SubclassGenericCMa"(i64 0, %swift.type* %T) +// CHECK: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s32conditional_conformance_subclass15SubclassGenericCMa"(i64 0, ptr %T) // CHECK-NEXT: [[SubclassGeneric_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[T_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** %T.P2, i8*** [[T_P2_PTR]], align 8 -// CHECK-NEXT: [[Base_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(%swift.type* [[SubclassGeneric_TYPE]], %swift.type* [[SubclassGeneric_TYPE]], i8** [[Base_P1]]) +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[T_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %T.P2, ptr [[T_P2_PTR]], align 8 +// CHECK-NEXT: [[Base_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(ptr [[SubclassGeneric_TYPE]], ptr [[SubclassGeneric_TYPE]], ptr [[Base_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -68,39 +66,39 @@ public func subclassgeneric_concrete() { // CHECK-NEXT: entry: // CHECK-NEXT: [[SubclassGeneric_RESPONSE:%.*]] = call {{.*}}@"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMb" // CHECK-NEXT: [[SubclassGeneric_TYPE:%.*]] = extractvalue %swift.metadata_response [[SubclassGeneric_RESPONSE]], 0 -// CHECK-NEXT: [[Base_P1:%.*]] = call i8** @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWl"() -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(%swift.type* [[SubclassGeneric_TYPE]], %swift.type* [[SubclassGeneric_TYPE]], i8** [[Base_P1]]) +// CHECK-NEXT: [[Base_P1:%.*]] = call ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWl"() +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(ptr [[SubclassGeneric_TYPE]], ptr [[SubclassGeneric_TYPE]], ptr [[Base_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // Lazy witness table accessor for the concrete SubclassGeneric : Base. -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// macosx-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") -// ios-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") -// watchos-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") -// tvos-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") -// linux-gnu-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") -// linux-android-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") -// windows-msvc-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") - -// CHECK: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 -// CHECK-NEXT: [[Base_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: store atomic i8** [[Base_P1]], i8*** @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWL" release, align 8 +// macosx-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") +// ios-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") +// watchos-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") +// tvos-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") +// linux-gnu-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") +// linux-android-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") +// windows-msvc-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGMD") + +// CHECK: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[Base_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: store atomic ptr [[Base_P1]], ptr @"$s32conditional_conformance_subclass15SubclassGenericCyAA4IsP2VGAA4BaseCyxGAA2P1A2A0G0RzlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } public func subclassconcrete() { @@ -111,16 +109,16 @@ public func subclassconcrete() { // CHECK-NEXT: entry: // CHECK-NEXT: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s32conditional_conformance_subclass16SubclassConcreteCMa"(i64 0) // CHECK-NEXT: [[SubclassConcrete_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[SubclassConcrete_P1:%.*]] = call i8** @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(%swift.type* [[SubclassConcrete_TYPE]], %swift.type* [[SubclassConcrete_TYPE]], i8** [[SubclassConcrete_P1]]) +// CHECK-NEXT: [[SubclassConcrete_P1:%.*]] = call ptr @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(ptr [[SubclassConcrete_TYPE]], ptr [[SubclassConcrete_TYPE]], ptr [[SubclassConcrete_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: @@ -128,16 +126,16 @@ public func subclassconcrete() { // CHECK-NEXT: [[SubclassConcrete_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NEXT: extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 -// CHECK-NEXT: [[Base_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: store atomic i8** [[Base_P1]], i8*** @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL" release, align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[Base_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: store atomic ptr [[Base_P1]], ptr @"$s32conditional_conformance_subclass16SubclassConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } public func subclassgenericconcrete() { @@ -148,30 +146,30 @@ public func subclassgenericconcrete() { // CHECK-NEXT: entry: // CHECK-NEXT: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s32conditional_conformance_subclass23SubclassGenericConcreteCMa"(i64 0) // CHECK-NEXT: [[SubclassGenericConcrete_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// CHECK-NEXT: [[SubclassGenericConcrete_P1:%.*]] = call i8** @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() -// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(%swift.type* [[SubclassGenericConcrete_TYPE]], %swift.type* [[SubclassGenericConcrete_TYPE]], i8** [[SubclassGenericConcrete_P1]]) +// CHECK-NEXT: [[SubclassGenericConcrete_P1:%.*]] = call ptr @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() +// CHECK-NEXT: call swiftcc void @"$s32conditional_conformance_subclass8takes_p1yyxmAA2P1RzlF"(ptr [[SubclassGenericConcrete_TYPE]], ptr [[SubclassGenericConcrete_TYPE]], ptr [[SubclassGenericConcrete_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [1 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: // CHECK-NEXT: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s32conditional_conformance_subclass23SubclassGenericConcreteCMa"(i64 255) // CHECK-NEXT: [[SubclassGenericConcrete_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-NEXT: extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x i8**], [1 x i8**]* %conditional.requirement.buffer, i32 0, i32 0 -// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 0 -// CHECK-NEXT: store i8** getelementptr inbounds ([1 x i8*], [1 x i8*]* @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", i32 0, i32 0), i8*** [[A_P2_PTR]], align 8 -// CHECK-NEXT: [[Base_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: store atomic i8** [[Base_P1]], i8*** @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL" release, align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [1 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[A_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s32conditional_conformance_subclass4IsP2VAA0E0AAWP", ptr [[A_P2_PTR]], align 8 +// CHECK-NEXT: [[Base_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: store atomic ptr [[Base_P1]], ptr @"$s32conditional_conformance_subclass23SubclassGenericConcreteCAA4BaseCyxGAA2P1A2A2P2RzlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Base_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } diff --git a/test/Inputs/conditional_conformance_with_assoc.swift b/test/Inputs/conditional_conformance_with_assoc.swift index eaf29461f8645..5f705f5d9459d 100644 --- a/test/Inputs/conditional_conformance_with_assoc.swift +++ b/test/Inputs/conditional_conformance_with_assoc.swift @@ -41,65 +41,53 @@ extension Double: P1 where B.AT2: P2, C: P3, B.AT2.AT2.AT3: P3 { // witness method for Double.normal -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVyxq_GAA2P1A2A2P3R_AA2P23AT2RpzAafH_AhaGP3AT3RPzrlAaEP6normalyyFTW"(%T34conditional_conformance_with_assoc6DoubleV* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVyxq_GAA2P1A2A2P3R_AA2P23AT2RpzAafH_AhaGP3AT3RPzrlAaEP6normalyyFTW"(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[C_P3:%.*]] = load i8*, i8** [[C_P3_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_1.P3" = bitcast i8* [[C_P3]] to i8** +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[C_P3:%.*]] = load ptr, ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -2 -// CHECK-NEXT: [[B_AT2_P2:%.*]] = load i8*, i8** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.AT2.P2" = bitcast i8* [[B_AT2_P2]] to i8** +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -2 +// CHECK-NEXT: [[B_AT2_P2:%.*]] = load ptr, ptr [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -3 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3:%.*]] = load i8*, i8** [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.AT2.AT2.AT3.P3" = bitcast i8* [[B_AT2_AT2_AT3_P3]] to i8** +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -3 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3:%.*]] = load ptr, ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[B:%.*]] = load %swift.type*, %swift.type** [[B_PTR]], align 8 +// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[B_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY_2:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY_2]], i64 3 -// CHECK-NEXT: [[C:%.*]] = load %swift.type*, %swift.type** [[C_PTR]], align 8 +// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 3 +// CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[C_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_WT_ARRAY:%.*]] = bitcast %swift.type* %Self to i8*** -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[SELF_AS_WT_ARRAY]], i64 4 -// CHECK-NEXT: %"\CF\84_0_0.P2" = load i8**, i8*** [[B_P2_PTR]], align 8 +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 4 +// CHECK-NEXT: %"\CF\84_0_0.P2" = load ptr, ptr [[B_P2_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVA2A2P3R_AA2P23AT2RpzAadF_AfaEP3AT3RPzrlE6normalyyF"(%swift.type* %"\CF\84_0_0", %swift.type* %"\CF\84_0_1", i8** %"\CF\84_0_0.P2", i8** %"\CF\84_0_1.P3", i8** %"\CF\84_0_0.AT2.P2", i8** %"\CF\84_0_0.AT2.AT2.AT3.P3") +// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVA2A2P3R_AA2P23AT2RpzAadF_AfaEP3AT3RPzrlE6normalyyF"(ptr %"\CF\84_0_0", ptr %"\CF\84_0_1", ptr %"\CF\84_0_0.P2", ptr [[C_P3]], ptr [[B_AT2_P2]], ptr [[B_AT2_AT2_AT3_P3]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // witness method for Double.generic -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVyxq_GAA2P1A2A2P3R_AA2P23AT2RpzAafH_AhaGP3AT3RPzrlAaEP7genericyyqd__AaFRd__lFTW"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_1_0", i8** %"\CF\84_1_0.P3", %T34conditional_conformance_with_assoc6DoubleV* noalias nocapture swiftself %1, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVyxq_GAA2P1A2A2P3R_AA2P23AT2RpzAafH_AhaGP3AT3RPzrlAaEP7genericyyqd__AaFRd__lFTW"(ptr noalias nocapture %0, ptr %"\CF\84_1_0", ptr %"\CF\84_1_0.P3", ptr noalias nocapture swiftself %1, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[C_P3:%.*]] = load i8*, i8** [[C_P3_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_1.P3" = bitcast i8* [[C_P3]] to i8** +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[C_P3:%.*]] = load ptr, ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -2 -// CHECK-NEXT: [[B_AT2_P2:%.*]] = load i8*, i8** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.AT2.P2" = bitcast i8* [[B_AT2_P2]] to i8** +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -2 +// CHECK-NEXT: [[B_AT2_P2:%.*]] = load ptr, ptr [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -3 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3:%.*]] = load i8*, i8** [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.AT2.AT2.AT3.P3" = bitcast i8* [[B_AT2_AT2_AT3_P3]] to i8** +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -3 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3:%.*]] = load ptr, ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[B:%.*]] = load %swift.type*, %swift.type** [[B_PTR]], align 8 +// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[B_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY_2:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY_2]], i64 3 -// CHECK-NEXT: [[C:%.*]] = load %swift.type*, %swift.type** [[C_PTR]], align 8 +// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 3 +// CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[C_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_WT_ARRAY:%.*]] = bitcast %swift.type* %Self to i8*** -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[SELF_AS_WT_ARRAY]], i64 4 -// CHECK-NEXT: %"\CF\84_0_0.P2" = load i8**, i8*** [[B_P2_PTR]], align 8 +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 4 +// CHECK-NEXT: %"\CF\84_0_0.P2" = load ptr, ptr [[B_P2_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVA2A2P3R_AA2P23AT2RpzAadF_AfaEP3AT3RPzrlE7genericyyqd__AaDRd__lF"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_0_0", %swift.type* %"\CF\84_0_1", %swift.type* %"\CF\84_1_0", i8** %"\CF\84_0_0.P2", i8** %"\CF\84_0_1.P3", i8** %"\CF\84_1_0.P3", i8** %"\CF\84_0_0.AT2.P2", i8** %"\CF\84_0_0.AT2.AT2.AT3.P3") +// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVA2A2P3R_AA2P23AT2RpzAadF_AfaEP3AT3RPzrlE7genericyyqd__AaDRd__lF"(ptr noalias nocapture %0, ptr %"\CF\84_0_0", ptr %"\CF\84_0_1", ptr %"\CF\84_1_0", ptr %"\CF\84_0_0.P2", ptr [[C_P3]], ptr %"\CF\84_1_0.P3", ptr [[B_AT2_P2]], ptr [[B_AT2_AT2_AT3_P3]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -109,22 +97,22 @@ public func generic_generic(_: T.Type, _: U.Type) { takes_p1(Double.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc08generic_E0yyxm_q_mtAA2P2RzAA2P3R_AaC3AT2RpzAadE_AeaCP3AT3RPzr0_lF"(%swift.type* %0, %swift.type* %1, %swift.type* %T, %swift.type* %U, i8** %T.P2, i8** %U.P3, i8** %T.AT2.P2, i8** %T.AT2.AT2.AT3.P3) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc08generic_E0yyxm_q_mtAA2P2RzAA2P3R_AaC3AT2RpzAadE_AeaCP3AT3RPzr0_lF"(ptr %0, ptr %1, ptr %T, ptr %U, ptr %T.P2, ptr %U.P3, ptr %T.AT2.P2, ptr %T.AT2.AT2.AT3.P3) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [3 x i8**], align 8 -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s34conditional_conformance_with_assoc6DoubleVMa"(i64 0, %swift.type* %T, %swift.type* %U, i8** %T.P2) +// CHECK: %conditional.requirement.buffer = alloca [3 x ptr], align 8 +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s34conditional_conformance_with_assoc6DoubleVMa"(i64 0, ptr %T, ptr %U, ptr %T.P2) // CHECK-NEXT: [[Double_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// 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** %U.P3, i8*** [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** %T.AT2.P2, i8*** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 2 -// CHECK-NEXT: store i8** %T.AT2.AT2.AT3.P3, i8*** [[B_AT2_AT2_AT3_P3_PTR]], align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [3 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %U.P3, ptr [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr %T.AT2.P2, ptr [[B_AT2_P2_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 2 +// CHECK-NEXT: store ptr %T.AT2.AT2.AT3.P3, ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Double_TYPE]], %swift.type* [[Double_TYPE]], i8** [[Double_P1]]) +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(ptr [[Double_TYPE]], ptr [[Double_TYPE]], ptr [[Double_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -133,39 +121,37 @@ public func generic_concrete(_: T.Type) { takes_p1(Double.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc16generic_concreteyyxmAA2P2RzAaC3AT2RpzAA2P3AD_AdaCP3AT3RPzlF"(%swift.type* %0, %swift.type* %T, i8** %T.P2, i8** %T.AT2.P2, i8** %T.AT2.AT2.AT3.P3) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc16generic_concreteyyxmAA2P2RzAaC3AT2RpzAA2P3AD_AdaCP3AT3RPzlF"(ptr %0, ptr %T, ptr %T.P2, ptr %T.AT2.P2, ptr %T.AT2.AT2.AT3.P3) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [3 x i8**], align 8 +// CHECK: %conditional.requirement.buffer = alloca [3 x ptr], align 8 // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s34conditional_conformance_with_assoc6DoubleVMa"( -// CHECK-SAME: i64 0, -// CHECK-SAME: %swift.type* -// CHECK-SAME: %T, -// CHECK-SAME: %swift.type* bitcast ( -// CHECK-SAME: i64* getelementptr inbounds ( -// CHECK-SAME: <{ -// CHECK-SAME: i8**, -// CHECK-SAME: i64, -// CHECK-SAME: <{ {{[^}]*}} }>* -// CHECK-SAME: }>, -// CHECK-SAME: <{ {{.*}} }>* @"$s34conditional_conformance_with_assoc4IsP3VMf", -// CHECK-SAME: i32 0, +// CHECK-SAME: i64 0, +// CHECK-SAME: ptr +// CHECK-SAME: %T, +// CHECK-SAME: ptr getelementptr inbounds ( +// CHECK-SAME: <{ +// CHECK-SAME: ptr, +// CHECK-SAME: i64, +// CHECK-SAME: ptr +// CHECK-SAME: }>, +// CHECK-SAME: ptr @"$s34conditional_conformance_with_assoc4IsP3VMf", +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 -// CHECK-SAME: ) to %swift.type* -// CHECK-SAME: ), -// CHECK-SAME: i8** %T.P2 +// CHECK-SAME: ), +// CHECK-SAME: ptr %T.P2 // CHECK-SAME: ) // CHECK-NEXT: [[Double_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// 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 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** %T.AT2.P2, i8*** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 2 -// CHECK-NEXT: store i8** %T.AT2.AT2.AT3.P3, i8*** [[B_AT2_AT2_AT3_P3_PTR]], align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [3 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", ptr [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr %T.AT2.P2, ptr [[B_AT2_P2_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 2 +// CHECK-NEXT: store ptr %T.AT2.AT2.AT3.P3, ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Double_TYPE]], %swift.type* [[Double_TYPE]], i8** [[Double_P1]]) +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(ptr [[Double_TYPE]], ptr [[Double_TYPE]], ptr [[Double_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -176,20 +162,20 @@ public func concrete_generic(_: U.Type) takes_p1(Double.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc16concrete_genericyyxmAA2P3RzlF"(%swift.type* %0, %swift.type* %U, i8** %U.P3) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc16concrete_genericyyxmAA2P3RzlF"(ptr %0, ptr %U, ptr %U.P3) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [3 x i8**], align 8 -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s34conditional_conformance_with_assoc6DoubleVMa"(i64 0, %swift.type* bitcast (i64* getelementptr inbounds (<{ {{.*}} }>, <{ {{.*}} }>* @"$s34conditional_conformance_with_assoc8IsAlsoP2VMf", i32 0, i32 2) to %swift.type*), %swift.type* %U, i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @"$s34conditional_conformance_with_assoc8IsAlsoP2VAA0G0AAWP", i32 0, i32 0)) +// CHECK: %conditional.requirement.buffer = alloca [3 x ptr], align 8 +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s34conditional_conformance_with_assoc6DoubleVMa"(i64 0, ptr getelementptr inbounds (<{ {{.*}} }>, ptr @"$s34conditional_conformance_with_assoc8IsAlsoP2VMf", i32 0, i32 2), ptr %U, ptr @"$s34conditional_conformance_with_assoc8IsAlsoP2VAA0G0AAWP") // CHECK-NEXT: [[Double_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// 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** %U.P3, i8*** [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @"$s34conditional_conformance_with_assoc6IsBothVAA2P2AAWP", i32 0, i32 0), i8*** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 2 -// CHECK-NEXT: store i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", i32 0, i32 0), i8*** [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Double_TYPE]], %swift.type* [[Double_TYPE]], i8** [[Double_P1]]) +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [3 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %U.P3, ptr [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc6IsBothVAA2P2AAWP", ptr [[B_AT2_P2_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 2 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(ptr [[Double_TYPE]], ptr [[Double_TYPE]], ptr [[Double_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT:} @@ -201,39 +187,39 @@ public func concrete_concrete() { // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc09concrete_E0yyF"() // CHECK-NEXT: entry: // CHECK-NEXT: [[X:%.*]] = call {{.*}} @__swift_instantiateConcreteTypeFromMangledName({{.*}} @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMD") -// CHECK-NEXT: [[Z:%.*]] = call i8** @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWl"() -// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(%swift.type* [[X]], %swift.type* [[X]], i8** [[Z]]) +// CHECK-NEXT: [[Z:%.*]] = call ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWl"() +// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(ptr [[X]], ptr [[X]], ptr [[Z]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // Lazy witness table accessor for the concrete Double : P1. -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [3 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [3 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: // CHECK-STABLE-ABI-FALSE-NEXT: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMa"(i64 255) // CHECK-STABLE-ABI-FALSE-NEXT: [[Double_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 // CHECK-STABLE-ABI-FALSE-NEXT: extractvalue %swift.metadata_response [[T0]], 1 -// CHECK-STABLE-ABI-TRUE-NEXT: [[T0:%.*]] = call %swift.type* @__swift_instantiateConcreteTypeFromMangledNameAbstract({ i32, i32 }* @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMD") -// 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 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @"$s34conditional_conformance_with_assoc6IsBothVAA2P2AAWP", i32 0, i32 0), i8*** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 2 -// CHECK-NEXT: store i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", i32 0, i32 0), i8*** [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: store atomic i8** [[Double_P1]], i8*** @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWL" release, align 8 +// CHECK-STABLE-ABI-TRUE-NEXT: [[T0:%.*]] = call ptr @__swift_instantiateConcreteTypeFromMangledNameAbstract(ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMD") +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [3 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", ptr [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc6IsBothVAA2P2AAWP", ptr [[B_AT2_P2_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 2 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: store atomic ptr [[Double_P1]], ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Double_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Double_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } diff --git a/test/Inputs/conditional_conformance_with_assoc_future.swift b/test/Inputs/conditional_conformance_with_assoc_future.swift index e28fc5254008b..4540f3d5bceaa 100644 --- a/test/Inputs/conditional_conformance_with_assoc_future.swift +++ b/test/Inputs/conditional_conformance_with_assoc_future.swift @@ -41,65 +41,53 @@ extension Double: P1 where B.AT2: P2, C: P3, B.AT2.AT2.AT3: P3 { // witness method for Double.normal -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVyxq_GAA2P1A2A2P3R_AA2P23AT2RpzAafH_AhaGP3AT3RPzrlAaEP6normalyyFTW"(%T34conditional_conformance_with_assoc6DoubleV* noalias nocapture swiftself %0, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVyxq_GAA2P1A2A2P3R_AA2P23AT2RpzAafH_AhaGP3AT3RPzrlAaEP6normalyyFTW"(ptr noalias nocapture swiftself %0, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[C_P3:%.*]] = load i8*, i8** [[C_P3_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_1.P3" = bitcast i8* [[C_P3]] to i8** +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[C_P3:%.*]] = load ptr, ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -2 -// CHECK-NEXT: [[B_AT2_P2:%.*]] = load i8*, i8** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.AT2.P2" = bitcast i8* [[B_AT2_P2]] to i8** +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -2 +// CHECK-NEXT: [[B_AT2_P2:%.*]] = load ptr, ptr [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -3 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3:%.*]] = load i8*, i8** [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.AT2.AT2.AT3.P3" = bitcast i8* [[B_AT2_AT2_AT3_P3]] to i8** +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -3 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3:%.*]] = load ptr, ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[B:%.*]] = load %swift.type*, %swift.type** [[B_PTR]], align 8 +// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[B_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY_2:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY_2]], i64 3 -// CHECK-NEXT: [[C:%.*]] = load %swift.type*, %swift.type** [[C_PTR]], align 8 +// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 3 +// CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[C_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_WT_ARRAY:%.*]] = bitcast %swift.type* %Self to i8*** -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[SELF_AS_WT_ARRAY]], i64 4 -// CHECK-NEXT: %"\CF\84_0_0.P2" = load i8**, i8*** [[B_P2_PTR]], align 8 +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 4 +// CHECK-NEXT: %"\CF\84_0_0.P2" = load ptr, ptr [[B_P2_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVA2A2P3R_AA2P23AT2RpzAadF_AfaEP3AT3RPzrlE6normalyyF"(%swift.type* %"\CF\84_0_0", %swift.type* %"\CF\84_0_1", i8** %"\CF\84_0_0.P2", i8** %"\CF\84_0_1.P3", i8** %"\CF\84_0_0.AT2.P2", i8** %"\CF\84_0_0.AT2.AT2.AT3.P3") +// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVA2A2P3R_AA2P23AT2RpzAadF_AfaEP3AT3RPzrlE6normalyyF"(ptr %"\CF\84_0_0", ptr %"\CF\84_0_1", ptr %"\CF\84_0_0.P2", ptr [[C_P3]], ptr [[B_AT2_P2]], ptr [[B_AT2_AT2_AT3_P3]]) // CHECK-NEXT: ret void // CHECK-NEXT: } // witness method for Double.generic -// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVyxq_GAA2P1A2A2P3R_AA2P23AT2RpzAafH_AhaGP3AT3RPzrlAaEP7genericyyqd__AaFRd__lFTW"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_1_0", i8** %"\CF\84_1_0.P3", %T34conditional_conformance_with_assoc6DoubleV* noalias nocapture swiftself %1, %swift.type* %Self, i8** %SelfWitnessTable) +// CHECK-LABEL: define linkonce_odr hidden swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVyxq_GAA2P1A2A2P3R_AA2P23AT2RpzAafH_AhaGP3AT3RPzrlAaEP7genericyyqd__AaFRd__lFTW"(ptr noalias nocapture %0, ptr %"\CF\84_1_0", ptr %"\CF\84_1_0.P3", ptr noalias nocapture swiftself %1, ptr %Self, ptr %SelfWitnessTable) // CHECK-NEXT: entry: -// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -1 -// CHECK-NEXT: [[C_P3:%.*]] = load i8*, i8** [[C_P3_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_1.P3" = bitcast i8* [[C_P3]] to i8** +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -1 +// CHECK-NEXT: [[C_P3:%.*]] = load ptr, ptr [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -2 -// CHECK-NEXT: [[B_AT2_P2:%.*]] = load i8*, i8** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.AT2.P2" = bitcast i8* [[B_AT2_P2]] to i8** +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -2 +// CHECK-NEXT: [[B_AT2_P2:%.*]] = load ptr, ptr [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8*, i8** %SelfWitnessTable, i32 -3 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3:%.*]] = load i8*, i8** [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: %"\CF\84_0_0.AT2.AT2.AT3.P3" = bitcast i8* [[B_AT2_AT2_AT3_P3]] to i8** +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr %SelfWitnessTable, i32 -3 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3:%.*]] = load ptr, ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY]], i64 2 -// CHECK-NEXT: [[B:%.*]] = load %swift.type*, %swift.type** [[B_PTR]], align 8 +// CHECK-NEXT: [[B_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 2 +// CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[B_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_TYPE_ARRAY_2:%.*]] = bitcast %swift.type* %Self to %swift.type** -// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[SELF_AS_TYPE_ARRAY_2]], i64 3 -// CHECK-NEXT: [[C:%.*]] = load %swift.type*, %swift.type** [[C_PTR]], align 8 +// CHECK-NEXT: [[C_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 3 +// CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[C_PTR]], align 8 -// CHECK-NEXT: [[SELF_AS_WT_ARRAY:%.*]] = bitcast %swift.type* %Self to i8*** -// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[SELF_AS_WT_ARRAY]], i64 4 -// CHECK-NEXT: %"\CF\84_0_0.P2" = load i8**, i8*** [[B_P2_PTR]], align 8 +// CHECK-NEXT: [[B_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr %Self, i64 4 +// CHECK-NEXT: %"\CF\84_0_0.P2" = load ptr, ptr [[B_P2_PTR]], align 8 -// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVA2A2P3R_AA2P23AT2RpzAadF_AfaEP3AT3RPzrlE7genericyyqd__AaDRd__lF"(%swift.opaque* noalias nocapture %0, %swift.type* %"\CF\84_0_0", %swift.type* %"\CF\84_0_1", %swift.type* %"\CF\84_1_0", i8** %"\CF\84_0_0.P2", i8** %"\CF\84_0_1.P3", i8** %"\CF\84_1_0.P3", i8** %"\CF\84_0_0.AT2.P2", i8** %"\CF\84_0_0.AT2.AT2.AT3.P3") +// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc6DoubleVA2A2P3R_AA2P23AT2RpzAadF_AfaEP3AT3RPzrlE7genericyyqd__AaDRd__lF"(ptr noalias nocapture %0, ptr %"\CF\84_0_0", ptr %"\CF\84_0_1", ptr %"\CF\84_1_0", ptr %"\CF\84_0_0.P2", ptr [[C_P3]], ptr %"\CF\84_1_0.P3", ptr [[B_AT2_P2]], ptr [[B_AT2_AT2_AT3_P3]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -109,22 +97,22 @@ public func generic_generic(_: T.Type, _: U.Type) { takes_p1(Double.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc08generic_E0yyxm_q_mtAA2P2RzAA2P3R_AaC3AT2RpzAadE_AeaCP3AT3RPzr0_lF"(%swift.type* %0, %swift.type* %1, %swift.type* %T, %swift.type* %U, i8** %T.P2, i8** %U.P3, i8** %T.AT2.P2, i8** %T.AT2.AT2.AT3.P3) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc08generic_E0yyxm_q_mtAA2P2RzAA2P3R_AaC3AT2RpzAadE_AeaCP3AT3RPzr0_lF"(ptr %0, ptr %1, ptr %T, ptr %U, ptr %T.P2, ptr %U.P3, ptr %T.AT2.P2, ptr %T.AT2.AT2.AT3.P3) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [3 x i8**], align 8 -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s34conditional_conformance_with_assoc6DoubleVMa"(i64 0, %swift.type* %T, %swift.type* %U, i8** %T.P2) +// CHECK: %conditional.requirement.buffer = alloca [3 x ptr], align 8 +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s34conditional_conformance_with_assoc6DoubleVMa"(i64 0, ptr %T, ptr %U, ptr %T.P2) // CHECK-NEXT: [[Double_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// 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** %U.P3, i8*** [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** %T.AT2.P2, i8*** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 2 -// CHECK-NEXT: store i8** %T.AT2.AT2.AT3.P3, i8*** [[B_AT2_AT2_AT3_P3_PTR]], align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [3 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %U.P3, ptr [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr %T.AT2.P2, ptr [[B_AT2_P2_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 2 +// CHECK-NEXT: store ptr %T.AT2.AT2.AT3.P3, ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Double_TYPE]], %swift.type* [[Double_TYPE]], i8** [[Double_P1]]) +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(ptr [[Double_TYPE]], ptr [[Double_TYPE]], ptr [[Double_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -133,40 +121,38 @@ public func generic_concrete(_: T.Type) { takes_p1(Double.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc16generic_concreteyyxmAA2P2RzAaC3AT2RpzAA2P3AD_AdaCP3AT3RPzlF"(%swift.type* %0, %swift.type* %T, i8** %T.P2, i8** %T.AT2.P2, i8** %T.AT2.AT2.AT3.P3) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc16generic_concreteyyxmAA2P2RzAaC3AT2RpzAA2P3AD_AdaCP3AT3RPzlF"(ptr %0, ptr %T, ptr %T.P2, ptr %T.AT2.P2, ptr %T.AT2.AT2.AT3.P3) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [3 x i8**], align 8 +// CHECK: %conditional.requirement.buffer = alloca [3 x ptr], align 8 // CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s34conditional_conformance_with_assoc6DoubleVMa"( -// CHECK-SAME: i64 0, -// CHECK-SAME: %swift.type* -// CHECK-SAME: %T, -// CHECK-SAME: %swift.type* bitcast ( -// CHECK-SAME: i64* getelementptr inbounds ( -// CHECK-SAME: <{ -// CHECK-SAME: i8*, -// CHECK-SAME: i8**, -// CHECK-SAME: i64, -// CHECK-SAME: <{ {{[^}]*}} }>* -// CHECK-SAME: }>, -// CHECK-SAME: <{ {{.*}} }>* @"$s34conditional_conformance_with_assoc4IsP3VMf", -// CHECK-SAME: i32 0, +// CHECK-SAME: i64 0, +// CHECK-SAME: ptr +// CHECK-SAME: %T, +// CHECK-SAME: ptr getelementptr inbounds ( +// CHECK-SAME: <{ +// CHECK-SAME: ptr, +// CHECK-SAME: ptr, +// CHECK-SAME: i64, +// CHECK-SAME: ptr +// CHECK-SAME: }>, +// CHECK-SAME: ptr @"$s34conditional_conformance_with_assoc4IsP3VMf", +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 -// CHECK-SAME: ) to %swift.type* -// CHECK-SAME: ), -// CHECK-SAME: i8** %T.P2 +// CHECK-SAME: ), +// CHECK-SAME: ptr %T.P2 // CHECK-SAME: ) // CHECK-NEXT: [[Double_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// 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 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** %T.AT2.P2, i8*** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 2 -// CHECK-NEXT: store i8** %T.AT2.AT2.AT3.P3, i8*** [[B_AT2_AT2_AT3_P3_PTR]], align 8 +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [3 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", ptr [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr %T.AT2.P2, ptr [[B_AT2_P2_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 2 +// CHECK-NEXT: store ptr %T.AT2.AT2.AT3.P3, ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Double_TYPE]], %swift.type* [[Double_TYPE]], i8** [[Double_P1]]) +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(ptr [[Double_TYPE]], ptr [[Double_TYPE]], ptr [[Double_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT: } @@ -177,20 +163,20 @@ public func concrete_generic(_: U.Type) takes_p1(Double.self) } -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc16concrete_genericyyxmAA2P3RzlF"(%swift.type* %0, %swift.type* %U, i8** %U.P3) +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc16concrete_genericyyxmAA2P3RzlF"(ptr %0, ptr %U, ptr %U.P3) // CHECK-NEXT: entry: -// CHECK: %conditional.requirement.buffer = alloca [3 x i8**], align 8 -// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s34conditional_conformance_with_assoc6DoubleVMa"(i64 0, %swift.type* bitcast (i64* getelementptr inbounds (<{ {{.*}} }>, <{ {{.*}} }>* @"$s34conditional_conformance_with_assoc8IsAlsoP2VMf", i32 0, i32 2) to %swift.type*), %swift.type* %U, i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @"$s34conditional_conformance_with_assoc8IsAlsoP2VAA0G0AAWP", i32 0, i32 0)) +// CHECK: %conditional.requirement.buffer = alloca [3 x ptr], align 8 +// CHECK: [[T0:%.*]] = call swiftcc %swift.metadata_response @"$s34conditional_conformance_with_assoc6DoubleVMa"(i64 0, ptr getelementptr inbounds (<{ {{.*}} }>, ptr @"$s34conditional_conformance_with_assoc8IsAlsoP2VMf", i32 0, i32 2), ptr %U, ptr @"$s34conditional_conformance_with_assoc8IsAlsoP2VAA0G0AAWP") // CHECK-NEXT: [[Double_TYPE:%.*]] = extractvalue %swift.metadata_response [[T0]], 0 -// 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** %U.P3, i8*** [[C_P3_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @"$s34conditional_conformance_with_assoc6IsBothVAA2P2AAWP", i32 0, i32 0), i8*** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 2 -// CHECK-NEXT: store i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", i32 0, i32 0), i8*** [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable -// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(%swift.type* [[Double_TYPE]], %swift.type* [[Double_TYPE]], i8** [[Double_P1]]) +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [3 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr %U.P3, ptr [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc6IsBothVAA2P2AAWP", ptr [[B_AT2_P2_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 2 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable +// CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"(ptr [[Double_TYPE]], ptr [[Double_TYPE]], ptr [[Double_P1]]) // CHECK-NEXT: ret void // CHECK-NEXT:} @@ -201,42 +187,18 @@ public func concrete_concrete() { // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s34conditional_conformance_with_assoc09concrete_E0yyF"() // CHECK-NEXT: entry: -// CHECK-NEXT: [[Z:%.*]] = call i8** @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWl"() +// CHECK-NEXT: [[Z:%.*]] = call ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWl"() // CHECK-NEXT: call swiftcc void @"$s34conditional_conformance_with_assoc8takes_p1yyxmAA2P1RzlF"( -// CHECK-SAME: %swift.type* getelementptr inbounds ( +// CHECK-SAME: ptr getelementptr inbounds ( // CHECK-SAME: %swift.full_type, -// CHECK-SAME: %swift.full_type* bitcast ( -// CHECK-SAME: <{ -// CHECK-SAME: i8*, -// CHECK-SAME: i8**, -// CHECK-SAME: [[INT]], -// CHECK-SAME: %swift.type_descriptor*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: i8**, -// CHECK-SAME: i64 -// CHECK-SAME: }>* @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMf" -// CHECK-SAME: to %swift.full_type* -// CHECK-SAME: ), -// CHECK-SAME: i32 0, +// CHECK-SAME: ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMf" +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 -// CHECK-SAME: ), -// CHECK-SAME: %swift.type* getelementptr inbounds ( -// CHECK-SAME: %swift.full_type, -// CHECK-SAME: %swift.full_type* bitcast ( -// CHECK-SAME: <{ -// CHECK-SAME: i8*, -// CHECK-SAME: i8**, -// CHECK-SAME: [[INT]], -// CHECK-SAME: %swift.type_descriptor*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: i8**, -// CHECK-SAME: i64 -// CHECK-SAME: }>* @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMf" -// CHECK-SAME: to %swift.full_type* -// CHECK-SAME: ), -// CHECK-SAME: i32 0, +// CHECK-SAME: ), +// CHECK-SAME: ptr getelementptr inbounds ( +// CHECK-SAME: %swift.full_type, +// CHECK-SAME: ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMf" +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 // CHECK-SAME: ) // CHECK-SAME: ) @@ -245,53 +207,38 @@ public func concrete_concrete() { // Lazy witness table accessor for the concrete Double : P1. -// CHECK-LABEL: define linkonce_odr hidden i8** @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWl"() +// CHECK-LABEL: define linkonce_odr hidden ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWl"() // CHECK-NEXT: entry: -// CHECK-NEXT: %conditional.requirement.buffer = alloca [3 x i8**], align 8 -// CHECK-NEXT: [[CACHE:%.*]] = load i8**, i8*** @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWL", align 8 -// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq i8** [[CACHE]], null +// CHECK-NEXT: %conditional.requirement.buffer = alloca [3 x ptr], align 8 +// CHECK-NEXT: [[CACHE:%.*]] = load ptr, ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWL", align 8 +// CHECK-NEXT: [[IS_NULL:%.*]] = icmp eq ptr [[CACHE]], null // CHECK-NEXT: br i1 [[IS_NULL]], label %cacheIsNull, label %cont // CHECK: cacheIsNull: -// 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 -// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 1 -// CHECK-NEXT: store i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @"$s34conditional_conformance_with_assoc6IsBothVAA2P2AAWP", i32 0, i32 0), i8*** [[B_AT2_P2_PTR]], align 8 -// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds i8**, i8*** [[CONDITIONAL_REQUIREMENTS]], i32 2 -// CHECK-NEXT: store i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", i32 0, i32 0), i8*** [[B_AT2_AT2_AT3_P3_PTR]], align 8 -// CHECK-NEXT: [[Double_P1:%.*]] = call i8** @swift_getWitnessTable( -// CHECK-SAME: %swift.protocol_conformance_descriptor* bitcast ( -// CHECK-SAME: { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i16, i16, i32, i32 }* -// CHECK-SAME: @"$s34conditional_conformance_with_assoc6DoubleVyxq_GAA2P1A2A2P3R_AA2P23AT2RpzAafH_AhaGP3AT3RPzrlMc" -// CHECK-SAME: to %swift.protocol_conformance_descriptor* -// CHECK-SAME: ), -// CHECK-SAME: %swift.type* getelementptr inbounds ( -// CHECK-SAME: %swift.full_type, -// CHECK-SAME: %swift.full_type* bitcast ( -// CHECK-SAME: <{ -// CHECK-SAME: i8*, -// CHECK-SAME: i8**, -// CHECK-SAME: [[INT]], -// CHECK-SAME: %swift.type_descriptor*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: %swift.type*, -// CHECK-SAME: i8**, -// CHECK-SAME: i64 -// CHECK-SAME: }>* @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMf" -// CHECK-SAME: to %swift.full_type* -// CHECK-SAME: ), -// CHECK-SAME: i32 0, +// CHECK-NEXT: [[CONDITIONAL_REQUIREMENTS:%.*]] = getelementptr inbounds [3 x ptr], ptr %conditional.requirement.buffer, i32 0, i32 0 +// CHECK-NEXT: [[C_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 0 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", ptr [[C_P3_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_P2_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 1 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc6IsBothVAA2P2AAWP", ptr [[B_AT2_P2_PTR]], align 8 +// CHECK-NEXT: [[B_AT2_AT2_AT3_P3_PTR:%.*]] = getelementptr inbounds ptr, ptr [[CONDITIONAL_REQUIREMENTS]], i32 2 +// CHECK-NEXT: store ptr @"$s34conditional_conformance_with_assoc4IsP3VAA0F0AAWP", ptr [[B_AT2_AT2_AT3_P3_PTR]], align 8 +// CHECK-NEXT: [[Double_P1:%.*]] = call ptr @swift_getWitnessTable( +// CHECK-SAME: ptr +// CHECK-SAME: @"$s34conditional_conformance_with_assoc6DoubleVyxq_GAA2P1A2A2P3R_AA2P23AT2RpzAafH_AhaGP3AT3RPzrlMc" +// CHECK-SAME: ptr getelementptr inbounds ( +// CHECK-SAME: %swift.full_type, +// CHECK-SAME: ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGMf" +// CHECK-SAME: i32 0, // CHECK-SAME: i32 2 -// CHECK-SAME: ), -// CHECK-SAME: i8*** [[CONDITIONAL_REQUIREMENTS]] +// CHECK-SAME: ), +// CHECK-SAME: ptr [[CONDITIONAL_REQUIREMENTS]] // CHECK-SAME: ) -// CHECK-NEXT: store atomic i8** [[Double_P1]], i8*** @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWL" release, align 8 +// CHECK-NEXT: store atomic ptr [[Double_P1]], ptr @"$s34conditional_conformance_with_assoc6DoubleVyAA8IsAlsoP2VAA0F2P3VGACyxq_GAA2P1A2A0I0R_AA0H03AT2RpzAakM_AmaLP3AT3RPzrlWL" release, align 8 // CHECK-NEXT: br label %cont // CHECK: cont: -// CHECK-NEXT: [[T0:%.*]] = phi i8** [ [[CACHE]], %entry ], [ [[Double_P1]], %cacheIsNull ] -// CHECK-NEXT: ret i8** [[T0]] +// CHECK-NEXT: [[T0:%.*]] = phi ptr [ [[CACHE]], %entry ], [ [[Double_P1]], %cacheIsNull ] +// CHECK-NEXT: ret ptr [[T0]] // CHECK-NEXT: } From a44b36ce760a6acddc0339f6fd56aed0a9204852 Mon Sep 17 00:00:00 2001 From: Arnold Schwaighofer Date: Wed, 21 Jun 2023 12:51:35 -0700 Subject: [PATCH 12/38] Fix abitypes.swift, class_update_callback_without_fixed_layout.sil,dynamic_self_metadata.swift --- test/IRGen/abitypes.swift | 22 +++++++------------ ...s_update_callback_without_fixed_layout.sil | 2 +- test/IRGen/dynamic_self_metadata.swift | 3 +-- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/test/IRGen/abitypes.swift b/test/IRGen/abitypes.swift index 75f60a38b5d3c..0924943d8eb93 100644 --- a/test/IRGen/abitypes.swift +++ b/test/IRGen/abitypes.swift @@ -145,10 +145,9 @@ class Foo { // x86_64 returns an HA of four floats directly in two <2 x float> // x86_64-macosx: define hidden swiftcc float @"$s8abitypes3FooC4barc{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr swiftself %1) {{.*}} { // x86_64-macosx: load ptr, ptr @"\01L_selector(newRect)", align 8 - // x86_64-macosx: [[RESULT:%.*]] = call { <2 x float>, <2 x float> } bitcast (ptr @objc_msgSend + // x86_64-macosx: [[RESULT:%.*]] = call { <2 x float>, <2 x float> } @objc_msgSend // x86_64-macosx: store { <2 x float>, <2 x float> } [[RESULT]] - // x86_64-macosx: [[CAST:%.*]] = bitcast ptr - // x86_64-macosx: load { float, float, float, float }, ptr [[CAST]] + // x86_64-macosx: load { float, float, float, float }, ptr // x86_64-macosx: ret float // // armv7 returns an HA of four floats indirectly @@ -174,7 +173,7 @@ class Foo { // armv7k returns an HA of four floats directly // armv7k-watchos: define hidden swiftcc float @"$s8abitypes3FooC4barc{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr swiftself %1) {{.*}} { // armv7k-watchos: load ptr, ptr @"\01L_selector(newRect)", align 4 - // armv7k-watchos: [[RESULT:%.*]] = call [[ARMV7K_MYRECT]] bitcast (ptr @objc_msgSend + // armv7k-watchos: [[RESULT:%.*]] = call [[ARMV7K_MYRECT]] @objc_msgSend // armv7k-watchos: store [[ARMV7K_MYRECT]] [[RESULT]] // armv7k-watchos: [[CAST:%.*]] = bitcast ptr // armv7k-watchos: load { float, float, float, float }, ptr [[CAST]] @@ -191,7 +190,6 @@ class Foo { // x86_64-macosx: define hidden swiftcc double @"$s8abitypes3FooC4bazc{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr swiftself %1) {{.*}} { // x86_64-macosx: load ptr, ptr @"\01L_selector(newTrio)", align 8 - // x86_64-macosx: [[CAST:%[0-9]+]] = bitcast ptr %0 // x86_64-macosx: call void @objc_msgSend_stret func bazc(_ p: StructReturns) -> Double { return p.newTrio().j @@ -215,13 +213,11 @@ class Foo { // x86_64-macosx: define hidden swiftcc i64 @"$s8abitypes3FooC9getnested{{[_0-9a-zA-Z]*}}F"(ptr %0, ptr swiftself %1) {{.*}} { // x86_64-macosx: call i64 @objc_msgSend - // x86_64-macosx: bitcast // x86_64-macosx: call void @llvm.lifetime.start // x86_64-macosx: store i32 {{.*}} // x86_64-macosx: store i32 {{.*}} - // x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { i64 }, { i64 } + // x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { i64 }, ptr // x86_64-macosx: load i64, ptr [[T0]], align 8 - // x86_64-macosx: bitcast // x86_64-macosx: call void @llvm.lifetime.end // x86_64-macosx: ret i64 func getnested(_ p: StructReturns) -> NestedInts { @@ -237,17 +233,15 @@ class Foo { } // x86_64-macosx: define internal ptr @"$s8abitypes3FooC9copyProto{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} { - // x86_64-macosx: [[VALUE:%[0-9]+]] = call swiftcc [[TYPE:%.*]] @"$s8abitypes3FooC9copyProto{{[_0-9a-zA-Z]*}}F" - // x86_64-macosx: [[RESULT:%[0-9]+]] = bitcast [[TYPE:%.*]] [[VALUE]] to ptr - // x86_64-macosx: ret ptr [[RESULT]] + // x86_64-macosx: [[VALUE:%[0-9]+]] = call swiftcc ptr @"$s8abitypes3FooC9copyProto{{[_0-9a-zA-Z]*}}F" + // x86_64-macosx: ret ptr [[VALUE]] @objc dynamic func copyProto(_ a: AnyObject) -> AnyObject { return a } // x86_64-macosx: define internal ptr @"$s8abitypes3FooC13copyProtoComp{{[_0-9a-zA-Z]*}}FTo"(ptr %0, ptr %1, ptr %2) {{[#0-9]*}} { - // x86_64-macosx: [[VALUE:%[0-9]+]] = call swiftcc [[TYPE:%.*]] @"$s8abitypes3FooC13copyProtoComp{{[_0-9a-zA-Z]*}}F" - // x86_64-macosx: [[RESULT:%[0-9]+]] = bitcast [[TYPE]] [[VALUE]] to ptr - // x86_64-macosx: ret ptr [[RESULT]] + // x86_64-macosx: [[VALUE:%[0-9]+]] = call swiftcc ptr @"$s8abitypes3FooC13copyProtoComp{{[_0-9a-zA-Z]*}}F" + // x86_64-macosx: ret ptr [[VALUE]] @objc dynamic func copyProtoComp(_ a: P1 & P2) -> P1 & P2 { return a } diff --git a/test/IRGen/class_update_callback_without_fixed_layout.sil b/test/IRGen/class_update_callback_without_fixed_layout.sil index a124d7a30643b..f7327307649bb 100644 --- a/test/IRGen/class_update_callback_without_fixed_layout.sil +++ b/test/IRGen/class_update_callback_without_fixed_layout.sil @@ -1,7 +1,7 @@ // RUN: %empty-directory(%t) // RUN: %target-swift-frontend -emit-module -enable-library-evolution -emit-module-path=%t/resilient_struct.swiftmodule -module-name=resilient_struct %S/../Inputs/resilient_struct.swift -// RUN: %target-swift-frontend %use_no_opaque_pointers -I %t -emit-ir -enable-library-evolution %s -target %target-pre-stable-abi-triple | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-OLD --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-OLD-%target-ptrsize -DINT=i%target-ptrsize +// RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %s -target %target-pre-stable-abi-triple | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-OLD --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-OLD-%target-ptrsize -DINT=i%target-ptrsize // RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution %s -target %target-pre-stable-abi-triple // RUN: %target-swift-frontend -I %t -emit-ir -enable-library-evolution -O %s -target %target-pre-stable-abi-triple diff --git a/test/IRGen/dynamic_self_metadata.swift b/test/IRGen/dynamic_self_metadata.swift index 340db46002d1a..a677e03a33036 100644 --- a/test/IRGen/dynamic_self_metadata.swift +++ b/test/IRGen/dynamic_self_metadata.swift @@ -1,5 +1,4 @@ -// RUN: %target-swift-frontend %use_no_opaque_pointers -disable-generic-metadata-prespecialization %s -emit-ir -parse-as-library | %FileCheck %s -// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization %s -emit-ir -parse-as-library +// RUN: %target-swift-frontend -disable-generic-metadata-prespecialization %s -emit-ir -parse-as-library | %FileCheck %s // UNSUPPORTED: OS=windows-msvc // REQUIRES: CPU=x86_64 From 52961c9b57855faf59ceaf44eb82e3075d0ea754 Mon Sep 17 00:00:00 2001 From: Arnold Schwaighofer Date: Wed, 21 Jun 2023 13:07:54 -0700 Subject: [PATCH 13/38] Try to fix windows/linux --- test/IRGen/async/class_resilience.swift | 2 +- test/IRGen/protocol_with_superclass.sil | 6 ++---- test/IRGen/protocol_with_superclass_where_clause.sil | 6 ++---- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/test/IRGen/async/class_resilience.swift b/test/IRGen/async/class_resilience.swift index 413cb76d67064..669944dbf785a 100644 --- a/test/IRGen/async/class_resilience.swift +++ b/test/IRGen/async/class_resilience.swift @@ -44,7 +44,7 @@ open class MyBaseClass { // CHECK-LABEL: define {{(dllexport )?}}{{(protected )?}}swift{{(tail)?}}cc void @"$s16class_resilience14callsAwaitableyx010resilient_A09BaseClassCyxGYalF"(ptr noalias nocapture %0, ptr swiftasync %1{{.*}}) // CHECK-DIRECT: ptr @"$s15resilient_class9BaseClassC4waitxyYaFTjTu" // CHECK-INDIRECT: [[LOAD:%[0-9]+]] = load ptr, ptr inttoptr (i64 and (i64 add (i64 ptrtoint (ptr @"\01__imp_$s15resilient_class9BaseClassC4waitxyYaFTjTu" to i64), i64 1), i64 -2) to ptr), align {{4|8}} -// CHECK-INDIRECT-NEXT: %14 = select i1 icmp eq (i64 and (i64 add (i64 ptrtoint (ptr @"\01__imp_$s15resilient_class9BaseClassC4waitxyYaFTjTu" to i64), i64 1), i64 1), i64 0), +// CHECK-INDIRECT-NEXT: select i1 icmp eq (i64 and (i64 add (i64 ptrtoint (ptr @"\01__imp_$s15resilient_class9BaseClassC4waitxyYaFTjTu" to i64), i64 1), i64 1), i64 0), // CHECK-INDIRECT-SAME: ptr inttoptr (i64 add (i64 ptrtoint (ptr @"\01__imp_$s15resilient_class9BaseClassC4waitxyYaFTjTu" to i64), i64 1) to ptr), // CHECK-INDIRECT-SAME: ptr [[LOAD]] // CHECK: ret void diff --git a/test/IRGen/protocol_with_superclass.sil b/test/IRGen/protocol_with_superclass.sil index 6e312fdfb555d..8d1e4d21af5e4 100644 --- a/test/IRGen/protocol_with_superclass.sil +++ b/test/IRGen/protocol_with_superclass.sil @@ -47,8 +47,7 @@ bb0(%0 : $Concrete, %1 : $SuperProto, %2 : $SuperProto & Concrete, %3 : $ProtoRe strong_release %6 : $SubProto // CHECK-objc: [[ISA:%.*]] = call ptr @swift_getObjectType(ptr %{{[0-9]+}}) - // CHECK-native: [[ISA_ADDR:%.*]] = bitcast ptr %1 - // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr [[ISA_ADDR]] + // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr %1 // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %1, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %7 = unconditional_checked_cast %1 : $SuperProto to ProtoRefinesClass @@ -57,8 +56,7 @@ bb0(%0 : $Concrete, %1 : $SuperProto, %2 : $SuperProto & Concrete, %3 : $ProtoRe strong_release %7 : $ProtoRefinesClass // CHECK-objc: [[ISA:%.*]] = call ptr @swift_getObjectType(ptr %{{[0-9]+}}) - // CHECK-native: [[ISA_ADDR:%.*]] = bitcast ptr %1 - // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr [[ISA_ADDR]] + // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr %1 // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %1, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %8 = unconditional_checked_cast %1 : $SuperProto to SubProto diff --git a/test/IRGen/protocol_with_superclass_where_clause.sil b/test/IRGen/protocol_with_superclass_where_clause.sil index 94961309fe4f7..2de06b6898523 100644 --- a/test/IRGen/protocol_with_superclass_where_clause.sil +++ b/test/IRGen/protocol_with_superclass_where_clause.sil @@ -47,8 +47,7 @@ bb0(%0 : $Concrete, %1 : $SuperProto, %2 : $SuperProto & Concrete, %3 : $ProtoRe strong_release %6 : $SubProto // CHECK-objc: [[ISA:%.*]] = call ptr @swift_getObjectType(ptr %{{[0-9]+}}) - // CHECK-native: [[ISA_ADDR:%.*]] = bitcast ptr %1 - // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr [[ISA_ADDR]] + // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr %1 // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %1, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass17ProtoRefinesClassMp" // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %7 = unconditional_checked_cast %1 : $SuperProto to ProtoRefinesClass @@ -57,8 +56,7 @@ bb0(%0 : $Concrete, %1 : $SuperProto, %2 : $SuperProto & Concrete, %3 : $ProtoRe strong_release %7 : $ProtoRefinesClass // CHECK-objc: [[ISA:%.*]] = call ptr @swift_getObjectType(ptr %{{[0-9]+}}) - // CHECK-native: [[ISA_ADDR:%.*]] = bitcast ptr %1 - // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr [[ISA_ADDR]] + // CHECK-native-NEXT: [[ISA:%.*]] = load ptr, ptr %1 // CHECK-NEXT: [[RESULT:%.*]] = call { ptr, ptr } @dynamic_cast_existential_1_unconditional(ptr %1, ptr [[ISA]], {{.*}} @"$s24protocol_with_superclass8SubProtoMp" // CHECK-NEXT: [[FIRST:%.*]] = extractvalue { ptr, ptr } [[RESULT]], 0 %8 = unconditional_checked_cast %1 : $SuperProto to SubProto From 059bbf51ef9a229f7c3a6504ddd16c2c52922172 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Wed, 21 Jun 2023 04:13:41 +0000 Subject: [PATCH 14/38] [test][Backtracing] Fix crash message pattern for single threaded mode With libdispatch executor, `level` function is called on non-main thread because it does not specify main executor explicitly. Therefore, the crash message from swift-backtrace says `Thread 1 crashed: ...`. However, with single threaded executor, all jobs are executed on the main thread, and main thread always has its name, so the message can be thread name 'Thread 0 "CrashAsync" crashed:'. --- test/Backtracing/CrashAsync.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Backtracing/CrashAsync.swift b/test/Backtracing/CrashAsync.swift index e462129f9c25c..1c72147ddc3b7 100644 --- a/test/Backtracing/CrashAsync.swift +++ b/test/Backtracing/CrashAsync.swift @@ -40,7 +40,7 @@ struct CrashAsync { // CHECK: *** Program crashed: Bad pointer dereference at 0x{{0+}}4 *** -// CHECK: Thread {{[0-9]+}} crashed: +// CHECK: Thread {{[0-9]+( ".*")?}} crashed: // CHECK: 0 0x{{[0-9a-f]+}} {{_?}}$s10CrashAsync5crashyyF + {{[0-9]+}} in CrashAsync at {{.*}}/CrashAsync.swift:21:15 // CHECK-NEXT: 1 [ra] 0x{{[0-9a-f]+}} {{_?}}$s10CrashAsync5levelyySiYaFTY0_ + {{[0-9]+}} in CrashAsync at {{.*}}/CrashAsync.swift:29:5 @@ -57,7 +57,7 @@ struct CrashAsync { // FRIENDLY: *** Program crashed: Bad pointer dereference at 0x{{0+}}4 *** -// FRIENDLY: Thread {{[0-9]+}} crashed: +// FRIENDLY: Thread {{[0-9]+( ".*")?}} crashed: // FRIENDLY: 0 {{_?}}$s10CrashAsync5crashyyF + {{[0-9]+}} in CrashAsync at {{.*}}CrashAsync.swift:21:15 From 4500aadd18723916bceae54016ddd5b6baf8aed4 Mon Sep 17 00:00:00 2001 From: Felipe de Azevedo Piovezan Date: Thu, 22 Jun 2023 07:00:14 -0400 Subject: [PATCH 15/38] [DebugInfo][NFC] Update test to not check width of alloca integer argument For the size argument of an alloca, some targets use a i32 bit integer, some use a 64 bit integer; the updated test was hard-coding i64, which caused it to fail in other targets. This is irrelevant for what the test is doing, so we remove that. --- test/DebugInfo/inlined-generics-basic.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/DebugInfo/inlined-generics-basic.swift b/test/DebugInfo/inlined-generics-basic.swift index f1e4c48605df3..3aa6de6d738fc 100644 --- a/test/DebugInfo/inlined-generics-basic.swift +++ b/test/DebugInfo/inlined-generics-basic.swift @@ -51,7 +51,7 @@ public class C { // SIL: function_ref {{.*}}yes{{.*}} scope [[F1G1]] // SIL: function_ref {{.*}}use{{.*}} scope [[F1G3H]] // IR: dbg.value(metadata ptr %[[ARG_S]], metadata ![[MD_1_0:[0-9]+]] - // IR: %[[RS_PAIR:.*]] = alloca i8, i64 % + // IR: %[[RS_PAIR:.*]] = alloca i8, i{{.*}} % // IR: dbg.declare(metadata ptr %[[RS_PAIR]], metadata ![[GRS_T:[0-9]+]], // IR: dbg.value(metadata ptr %[[ARG_0]], metadata ![[S:[0-9]+]] // IR: dbg.value(metadata ptr %[[ARG_0]], metadata ![[GS_T:[0-9]+]] From f38b9a960df744e22c0663b6cec1b129aec6975e Mon Sep 17 00:00:00 2001 From: Alastair Houghton Date: Thu, 22 Jun 2023 12:28:06 +0100 Subject: [PATCH 16/38] [Threading][TSan] Update comments. Updated the comments for tsan::acquire and tsan::release to better reflect what TSan is actually doing. rdar://110665213 --- include/swift/Threading/ThreadSanitizer.h | 41 ++++++++++++++++++----- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/include/swift/Threading/ThreadSanitizer.h b/include/swift/Threading/ThreadSanitizer.h index e7f95dec29ddc..0a6a8028ea183 100644 --- a/include/swift/Threading/ThreadSanitizer.h +++ b/include/swift/Threading/ThreadSanitizer.h @@ -63,11 +63,35 @@ inline bool enabled() { return threading_impl::_swift_tsan_enabled; } -/// Indicate to TSan that an acquiring load has occurred on the current -/// thread. If some other thread does a releasing store with the same -/// pointer, we are indicating to TSan that all writes that happened -/// before that store will be visible to the current thread after the -/// `acquire()`. +/// Inform TSan about a synchronization operation. +/// +/// This is used when TSan cannot see the synchronization operation, for +/// example, if it is using a custom primitive for which TSan doesn't have +/// a built-in interceptor. This does not necessarily mean a lock or a C(++) +/// atomic operation - it could be any kind of synchronization mechanism. +/// +/// An acquire-release pair using the same address establishes an ordering +/// constraint in TSan's happens-before graph, which TSan uses to determine +/// whether two memory accesses from different threads have a well-defined +/// order. +/// +/// For instance, in +/// +/// Thread 1 Thread 2 +/// +/// access to y +/// tsan::release(x) +/// lock given away +/// +/// --> sync point --> +/// +/// lock taken +/// tsan::acquire(x) +/// access to y +/// +/// the access to y from Thread 2 is safe relative to the preceding access to +/// y on Thread 1 because it is preceded by an acquire of x that was itself +/// preceded by a release of x. template T *acquire(T *ptr) { if (threading_impl::_swift_tsan_acquire) { @@ -76,10 +100,9 @@ T *acquire(T *ptr) { return ptr; } -/// Indicate to TSan that a releasing store has occurred on the current -/// thread. If some other thread does an acquiring load with the same -/// pointer, we are indicating to TSan that that thread will be able to -/// see all writes that happened before the `release()`. +/// Inform TSan about a synchronization operation. +/// +/// This is the counterpart to tsan::acquire. template T *release(T *ptr) { if (threading_impl::_swift_tsan_release) { From 3f0c0f05536ce782c526fa6811254792a43220b3 Mon Sep 17 00:00:00 2001 From: Artem Chikin Date: Wed, 14 Jun 2023 15:18:22 -0400 Subject: [PATCH 17/38] [Compile Time Constant Extraction] Add extraction of all conformances and type aliases of applicable nominal types This change adds to the extracted type metadata the following fields: - Conformances: this is a list of all protocols that the given nominal type conforms to - associated type aliases: this is a list of all associated types across all conformances that the given nominal type substitutes with concrete types. For a given associated type, we gather: - Associated type name - Substituted type's fully-qualified name - Substituted type's mangled name - If the substituted type is opaque: - List of conformance requirements of this opaque type - List of same-type requirements of this opaque type --- lib/ConstExtract/ConstExtract.cpp | 208 +++++++++++++++--- lib/Option/features.json | 3 + test/ConstExtraction/ExtractAnnotations.swift | 14 ++ test/ConstExtraction/ExtractCalls.swift | 11 + test/ConstExtraction/ExtractEnums.swift | 37 ++++ test/ConstExtraction/ExtractGroups.swift | 24 ++ test/ConstExtraction/ExtractLiterals.swift | 46 +++- .../ExtractOpaqueTypealias.swift | 73 ++++++ .../ExtractResultBuilders.swift | 13 ++ .../ExtractRuntimeMetadataAttr.swift | 7 + test/ConstExtraction/ExtractTypeValue.swift | 1 + 11 files changed, 402 insertions(+), 35 deletions(-) create mode 100644 test/ConstExtraction/ExtractOpaqueTypealias.swift diff --git a/lib/ConstExtract/ConstExtract.cpp b/lib/ConstExtract/ConstExtract.cpp index 56f97e08df17d..669878075f8b1 100644 --- a/lib/ConstExtract/ConstExtract.cpp +++ b/lib/ConstExtract/ConstExtract.cpp @@ -71,13 +71,21 @@ std::string toFullyQualifiedTypeNameString(const swift::Type &Type) { Options.AlwaysDesugarArraySliceTypes = true; Options.AlwaysDesugarDictionaryTypes = true; Options.AlwaysDesugarOptionalTypes = true; + Options.OpaqueReturnTypePrinting = + PrintOptions::OpaqueReturnTypePrintingMode::WithOpaqueKeyword; Type.print(OutputStream, Options); OutputStream.flush(); return TypeNameOutput; } +std::string toFullyQualifiedProtocolNameString(const swift::ProtocolDecl &Protocol) { + // Protocols cannot be nested in other declarations, so the only fully-qualified + // context is the declaring module name. + return Protocol.getParentModule()->getNameStr().str() + "." + Protocol.getNameStr().str(); +} + std::string toMangledTypeNameString(const swift::Type &Type) { - return Mangle::ASTMangler().mangleTypeWithoutPrefix(Type); + return Mangle::ASTMangler().mangleTypeWithoutPrefix(Type->getCanonicalType()); } } // namespace @@ -803,46 +811,178 @@ void writeAttrInformation(llvm::json::OStream &JSON, }); } +void writeParameterizedProtocolSameTypeRequirements( + llvm::json::OStream &JSON, + const ParameterizedProtocolType &ParameterizedProtoTy) { + auto Protocol = ParameterizedProtoTy.getProtocol(); + auto ProtocolTy = ParameterizedProtoTy.getBaseType(); + auto Requirements = Protocol->getProtocolRequirements(); + auto ParameterTypeNames = Protocol->getPrimaryAssociatedTypeNames(); + auto ProtocolArguments = ParameterizedProtoTy.getArgs(); + llvm::dbgs() << Requirements.size() << "\n"; + assert(ProtocolArguments.size() >= ParameterTypeNames.size()); + + for (size_t i = 0; i < ProtocolArguments.size(); ++i) { + auto ProtocolArgumentTy = ProtocolArguments[i]; + std::string ArgumentName = ParameterTypeNames.size() > i + ? ParameterTypeNames[i].first.str().str() + : "unknown"; + + JSON.object([&] { + auto QualifiedTypeAliasName = toFullyQualifiedProtocolNameString( + *ParameterizedProtoTy.getProtocol()) + + "." + ArgumentName; + JSON.attribute("typeAliasName", QualifiedTypeAliasName); + JSON.attribute("substitutedTypeName", + toFullyQualifiedTypeNameString(ProtocolArgumentTy)); + JSON.attribute("substitutedMangledTypeName", + toMangledTypeNameString(ProtocolArgumentTy)); + }); + } +} + +void writeOpaqueTypeProtocolCompositionSameTypeRequirements( + llvm::json::OStream &JSON, + const ProtocolCompositionType &ProtocolCompositionTy) { + for (auto CompositionMemberProto : ProtocolCompositionTy.getMembers()) { + if (auto ParameterizedProtoTy = + CompositionMemberProto->getAs()) { + writeParameterizedProtocolSameTypeRequirements(JSON, + *ParameterizedProtoTy); + } + } +} + +void writeSubstitutedOpaqueTypeAliasDetails( + llvm::json::OStream &JSON, const OpaqueTypeArchetypeType &OpaqueTy) { + JSON.attributeArray("opaqueTypeProtocolRequirements", [&] { + auto ConformsToProtocols = OpaqueTy.getConformsTo(); + for (auto Proto : ConformsToProtocols) { + JSON.value(toFullyQualifiedProtocolNameString(*Proto)); + } + }); + JSON.attributeArray("opaqueTypeSameTypeRequirements", [&] { + auto GenericSig = OpaqueTy.getDecl() + ->getNamingDecl() + ->getInnermostDeclContext() + ->getGenericSignatureOfContext(); + auto ConstraintTy = OpaqueTy.getExistentialType(); + if (auto existential = ConstraintTy->getAs()) + ConstraintTy = existential->getConstraintType(); + + // Opaque archetype substitutions are always canonical, so + // re-sugar the constraint type using the owning + // declaration's generic parameter names. + if (GenericSig) + ConstraintTy = GenericSig->getSugaredType(ConstraintTy); + + if (auto ParameterizedProtoTy = + ConstraintTy->getAs()) { + writeParameterizedProtocolSameTypeRequirements(JSON, + *ParameterizedProtoTy); + } else if (auto ProtocolCompositionTy = + ConstraintTy->getAs()) { + writeOpaqueTypeProtocolCompositionSameTypeRequirements( + JSON, *ProtocolCompositionTy); + } + }); +} + +void writeAssociatedTypeAliases(llvm::json::OStream &JSON, + const NominalTypeDecl &NomTypeDecl) { + JSON.attributeArray("associatedTypeAliases", [&] { + for (auto &Conformance : NomTypeDecl.getAllConformances()) { + Conformance->forEachTypeWitness( + [&](AssociatedTypeDecl *assoc, Type type, TypeDecl *typeDecl) { + JSON.object([&] { + JSON.attribute("typeAliasName", assoc->getName().str().str()); + JSON.attribute("substitutedTypeName", + toFullyQualifiedTypeNameString(type)); + JSON.attribute("substitutedMangledTypeName", + toMangledTypeNameString(type)); + if (auto OpaqueTy = dyn_cast(type)) { + writeSubstitutedOpaqueTypeAliasDetails(JSON, *OpaqueTy); + } + }); + return false; + }); + } + }); +} + +void writeProperties(llvm::json::OStream &JSON, + const ConstValueTypeInfo &TypeInfo, + const NominalTypeDecl &NomTypeDecl) { + JSON.attributeArray("properties", [&] { + for (const auto &PropertyInfo : TypeInfo.Properties) { + JSON.object([&] { + const auto *decl = PropertyInfo.VarDecl; + JSON.attribute("label", decl->getName().str().str()); + JSON.attribute("type", toFullyQualifiedTypeNameString(decl->getType())); + JSON.attribute("mangledTypeName", toMangledTypeNameString(decl->getType())); + JSON.attribute("isStatic", decl->isStatic() ? "true" : "false"); + JSON.attribute("isComputed", !decl->hasStorage() ? "true" : "false"); + writeLocationInformation(JSON, decl->getLoc(), + decl->getDeclContext()->getASTContext()); + writeValue(JSON, PropertyInfo.Value); + writePropertyWrapperAttributes(JSON, PropertyInfo.PropertyWrappers, + decl->getASTContext()); + writeRuntimeMetadataAttributes(JSON, + PropertyInfo.RuntimeMetadataAttributes, + decl->getASTContext()); + writeResultBuilderInformation(JSON, &NomTypeDecl, decl); + writeAttrInformation(JSON, decl->getAttrs()); + }); + } + }); +} + +void writeConformances(llvm::json::OStream &JSON, + const NominalTypeDecl &NomTypeDecl) { + JSON.attributeArray("conformances", [&] { + for (auto &Protocol : NomTypeDecl.getAllProtocols()) { + JSON.value(toFullyQualifiedProtocolNameString(*Protocol)); + } + }); +} + +void writeTypeName(llvm::json::OStream &JSON, const TypeDecl &TypeDecl) { + JSON.attribute("typeName", + toFullyQualifiedTypeNameString( + TypeDecl.getDeclaredInterfaceType())); + JSON.attribute("mangledTypeName", + toMangledTypeNameString(TypeDecl.getDeclaredInterfaceType())); +} + +void writeNominalTypeKind(llvm::json::OStream &JSON, + const NominalTypeDecl &NomTypeDecl) { + JSON.attribute( + "kind", + NomTypeDecl.getDescriptiveKindName(NomTypeDecl.getDescriptiveKind()) + .str()); +} + bool writeAsJSONToFile(const std::vector &ConstValueInfos, llvm::raw_fd_ostream &OS) { llvm::json::OStream JSON(OS, 2); JSON.array([&] { for (const auto &TypeInfo : ConstValueInfos) { + assert(isa(TypeInfo.TypeDecl) && + "Expected Nominal Type Decl for a conformance"); + const auto *NomTypeDecl = cast(TypeInfo.TypeDecl); + const auto SourceLoc = + extractNearestSourceLoc(NomTypeDecl->getInnermostDeclContext()); + const auto &Ctx = NomTypeDecl->getInnermostDeclContext()->getASTContext(); + JSON.object([&] { - const auto *TypeDecl = TypeInfo.TypeDecl; - JSON.attribute("typeName", toFullyQualifiedTypeNameString( - TypeDecl->getDeclaredInterfaceType())); - JSON.attribute( - "kind", - TypeDecl->getDescriptiveKindName(TypeDecl->getDescriptiveKind()) - .str()); - writeLocationInformation( - JSON, extractNearestSourceLoc(TypeDecl->getInnermostDeclContext()), - TypeDecl->getInnermostDeclContext()->getASTContext()); - JSON.attributeArray("properties", [&] { - for (const auto &PropertyInfo : TypeInfo.Properties) { - JSON.object([&] { - const auto *decl = PropertyInfo.VarDecl; - JSON.attribute("label", decl->getName().str().str()); - JSON.attribute("type", - toFullyQualifiedTypeNameString(decl->getType())); - JSON.attribute("isStatic", decl->isStatic() ? "true" : "false"); - JSON.attribute("isComputed", - !decl->hasStorage() ? "true" : "false"); - writeLocationInformation(JSON, decl->getLoc(), - decl->getDeclContext()->getASTContext()); - writeValue(JSON, PropertyInfo.Value); - writePropertyWrapperAttributes( - JSON, PropertyInfo.PropertyWrappers, decl->getASTContext()); - writeRuntimeMetadataAttributes( - JSON, PropertyInfo.RuntimeMetadataAttributes, decl->getASTContext()); - writeResultBuilderInformation(JSON, TypeDecl, decl); - writeAttrInformation(JSON, decl->getAttrs()); - }); - } - }); + writeTypeName(JSON, *NomTypeDecl); + writeNominalTypeKind(JSON, *NomTypeDecl); + writeLocationInformation(JSON, SourceLoc, Ctx); + writeConformances(JSON, *NomTypeDecl); + writeAssociatedTypeAliases(JSON, *NomTypeDecl); + writeProperties(JSON, TypeInfo, *NomTypeDecl); writeEnumCases(JSON, TypeInfo.EnumElements); - writeAttrInformation(JSON, TypeDecl->getAttrs()); + writeAttrInformation(JSON, NomTypeDecl->getAttrs()); }); } }); diff --git a/lib/Option/features.json b/lib/Option/features.json index 850552004c71f..8df06d7e87251 100644 --- a/lib/Option/features.json +++ b/lib/Option/features.json @@ -32,6 +32,9 @@ }, { "name": "package-name-if-supported" + }, + { + "name": "const-extract-complete-metadata" } ] } diff --git a/test/ConstExtraction/ExtractAnnotations.swift b/test/ConstExtraction/ExtractAnnotations.swift index f56dc92c3d091..fe01545ff36bd 100644 --- a/test/ConstExtraction/ExtractAnnotations.swift +++ b/test/ConstExtraction/ExtractAnnotations.swift @@ -30,13 +30,19 @@ public struct DeprecatedAnnotations: MyProto {} // CHECK: [ // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractAnnotations.Annotations", +// CHECK-NEXT: "mangledTypeName": "18ExtractAnnotations0B0V", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractAnnotations.swift", // CHECK-NEXT: "line": 9, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractAnnotations.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "available1", // CHECK-NEXT: "type": "Swift.String", +// CHECK-NEXT: "mangledTypeName": "SS", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractAnnotations.swift", @@ -61,6 +67,7 @@ public struct DeprecatedAnnotations: MyProto {} // CHECK-NEXT: { // CHECK-NEXT: "label": "deprecated1", // CHECK-NEXT: "type": "Swift.String", +// CHECK-NEXT: "mangledTypeName": "SS", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractAnnotations.swift", @@ -85,6 +92,7 @@ public struct DeprecatedAnnotations: MyProto {} // CHECK-NEXT: { // CHECK-NEXT: "label": "renamed1", // CHECK-NEXT: "type": "Swift.String", +// CHECK-NEXT: "mangledTypeName": "SS", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractAnnotations.swift", @@ -104,6 +112,7 @@ public struct DeprecatedAnnotations: MyProto {} // CHECK-NEXT: { // CHECK-NEXT: "label": "introduced1", // CHECK-NEXT: "type": "Swift.String", +// CHECK-NEXT: "mangledTypeName": "SS", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractAnnotations.swift", @@ -123,9 +132,14 @@ public struct DeprecatedAnnotations: MyProto {} // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractAnnotations.DeprecatedAnnotations", +// CHECK-NEXT: "mangledTypeName": "18ExtractAnnotations010DeprecatedB0V", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractAnnotations.swift", // CHECK-NEXT: "line": 28, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractAnnotations.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [], // CHECK-NEXT: "availabilityAttributes": [ // CHECK-NEXT: { diff --git a/test/ConstExtraction/ExtractCalls.swift b/test/ConstExtraction/ExtractCalls.swift index 1558e1de8c8b9..5586fe80b1151 100644 --- a/test/ConstExtraction/ExtractCalls.swift +++ b/test/ConstExtraction/ExtractCalls.swift @@ -39,13 +39,19 @@ public struct Bat { // CHECK: [ // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractCalls.Foo", +// CHECK-NEXT: "mangledTypeName": "12ExtractCalls3FooV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractCalls.swift", // CHECK-NEXT: "line": 9, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractCalls.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "init1", // CHECK-NEXT: "type": "ExtractCalls.Bar", +// CHECK-NEXT: "mangledTypeName": "12ExtractCalls3BarV", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractCalls.swift", @@ -59,6 +65,7 @@ public struct Bat { // CHECK-NEXT: { // CHECK-NEXT: "label": "init2", // CHECK-NEXT: "type": "ExtractCalls.Bat", +// CHECK-NEXT: "mangledTypeName": "12ExtractCalls3BatV", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractCalls.swift", @@ -85,6 +92,7 @@ public struct Bat { // CHECK-NEXT: { // CHECK-NEXT: "label": "init3", // CHECK-NEXT: "type": "ExtractCalls.Bat", +// CHECK-NEXT: "mangledTypeName": "12ExtractCalls3BatV", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractCalls.swift", @@ -110,6 +118,7 @@ public struct Bat { // CHECK-NEXT: { // CHECK-NEXT: "label": "func1", // CHECK-NEXT: "type": "Swift.Int", +// CHECK-NEXT: "mangledTypeName": "Si", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractCalls.swift", @@ -119,6 +128,7 @@ public struct Bat { // CHECK-NEXT: { // CHECK-NEXT: "label": "init4", // CHECK-NEXT: "type": "Swift.Optional", +// CHECK-NEXT: "mangledTypeName": "12ExtractCalls3BarVSg", // CHECK-NEXT: "isStatic": "true", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractCalls.swift", @@ -132,6 +142,7 @@ public struct Bat { // CHECK-NEXT: { // CHECK-NEXT: "label": "ext1", // CHECK-NEXT: "type": "ExtractCalls.Foo.Boo", +// CHECK-NEXT: "mangledTypeName": "12ExtractCalls3FooV3BooV", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractCalls.swift", diff --git a/test/ConstExtraction/ExtractEnums.swift b/test/ConstExtraction/ExtractEnums.swift index f83da7f8f451a..13a3c04c2532f 100644 --- a/test/ConstExtraction/ExtractEnums.swift +++ b/test/ConstExtraction/ExtractEnums.swift @@ -31,13 +31,21 @@ public struct Enums: MyProto { // CHECK: [ // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractEnums.SimpleEnum", +// CHECK-NEXT: "mangledTypeName": "12ExtractEnums10SimpleEnumO", // CHECK-NEXT: "kind": "enum", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractEnums.swift", // CHECK-NEXT: "line": 9, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "Swift.Equatable", +// CHECK-NEXT: "Swift.Hashable", +// CHECK-NEXT: "ExtractEnums.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "hashValue", // CHECK-NEXT: "type": "Swift.Int", +// CHECK-NEXT: "mangledTypeName": "Si", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "valueKind": "Runtime" @@ -54,13 +62,28 @@ public struct Enums: MyProto { // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractEnums.StringEnum", +// CHECK-NEXT: "mangledTypeName": "12ExtractEnums10StringEnumO", // CHECK-NEXT: "kind": "enum", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractEnums.swift", // CHECK-NEXT: "line": 14, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "Swift.Equatable", +// CHECK-NEXT: "Swift.Hashable", +// CHECK-NEXT: "Swift.RawRepresentable", +// CHECK-NEXT: "ExtractEnums.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [ +// CHECK-NEXT: { +// CHECK-NEXT: "typeAliasName": "RawValue", +// CHECK-NEXT: "substitutedTypeName": "Swift.String", +// CHECK-NEXT: "substitutedMangledTypeName": "SS" +// CHECK-NEXT: } +// CHECK-NEXT: ], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "rawValue", // CHECK-NEXT: "type": "Swift.String", +// CHECK-NEXT: "mangledTypeName": "SS", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "valueKind": "Runtime" @@ -83,9 +106,14 @@ public struct Enums: MyProto { // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractEnums.AssociatedEnums", +// CHECK-NEXT: "mangledTypeName": "12ExtractEnums010AssociatedB0O", // CHECK-NEXT: "kind": "enum", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractEnums.swift", // CHECK-NEXT: "line": 19, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractEnums.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [], // CHECK-NEXT: "cases": [ // CHECK-NEXT: { @@ -113,13 +141,19 @@ public struct Enums: MyProto { // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractEnums.Enums", +// CHECK-NEXT: "mangledTypeName": "12ExtractEnums0B0V", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractEnums.swift", // CHECK-NEXT: "line": 24, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractEnums.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "enum1", // CHECK-NEXT: "type": "ExtractEnums.SimpleEnum", +// CHECK-NEXT: "mangledTypeName": "12ExtractEnums10SimpleEnumO", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractEnums.swift", @@ -132,6 +166,7 @@ public struct Enums: MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "enum3", // CHECK-NEXT: "type": "ExtractEnums.AssociatedEnums", +// CHECK-NEXT: "mangledTypeName": "12ExtractEnums010AssociatedB0O", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractEnums.swift", @@ -158,6 +193,7 @@ public struct Enums: MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "enum2", // CHECK-NEXT: "type": "ExtractEnums.StringEnum", +// CHECK-NEXT: "mangledTypeName": "12ExtractEnums10StringEnumO", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractEnums.swift", @@ -170,6 +206,7 @@ public struct Enums: MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "enum4", // CHECK-NEXT: "type": "ExtractEnums.AssociatedEnums", +// CHECK-NEXT: "mangledTypeName": "12ExtractEnums010AssociatedB0O", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractEnums.swift", diff --git a/test/ConstExtraction/ExtractGroups.swift b/test/ConstExtraction/ExtractGroups.swift index b4f2dc93c41a8..33758ca44f635 100644 --- a/test/ConstExtraction/ExtractGroups.swift +++ b/test/ConstExtraction/ExtractGroups.swift @@ -38,13 +38,19 @@ extension String: Foo {} // CHECK: [ // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractGroups.Arrays", +// CHECK-NEXT: "mangledTypeName": "13ExtractGroups6ArraysV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", // CHECK-NEXT: "line": 9, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractGroups.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "array1", // CHECK-NEXT: "type": "Swift.Array", +// CHECK-NEXT: "mangledTypeName": "SaySiG", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", @@ -68,6 +74,7 @@ extension String: Foo {} // CHECK-NEXT: { // CHECK-NEXT: "label": "array2", // CHECK-NEXT: "type": "Swift.Array", +// CHECK-NEXT: "mangledTypeName": "Say13ExtractGroups3Foo_pG", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", @@ -94,6 +101,7 @@ extension String: Foo {} // CHECK-NEXT: { // CHECK-NEXT: "label": "array3", // CHECK-NEXT: "type": "Swift.Array", +// CHECK-NEXT: "mangledTypeName": "Say13ExtractGroups3BarVG", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", @@ -113,13 +121,19 @@ extension String: Foo {} // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractGroups.Dictionaries", +// CHECK-NEXT: "mangledTypeName": "13ExtractGroups12DictionariesV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", // CHECK-NEXT: "line": 15, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractGroups.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "dict1", // CHECK-NEXT: "type": "Swift.Dictionary", +// CHECK-NEXT: "mangledTypeName": "SDySSSiG", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", @@ -161,6 +175,7 @@ extension String: Foo {} // CHECK-NEXT: { // CHECK-NEXT: "label": "dict2", // CHECK-NEXT: "type": "Swift.Dictionary>", +// CHECK-NEXT: "mangledTypeName": "SDySiSaySSGG", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", @@ -210,6 +225,7 @@ extension String: Foo {} // CHECK-NEXT: { // CHECK-NEXT: "label": "dict3", // CHECK-NEXT: "type": "Swift.Dictionary", +// CHECK-NEXT: "mangledTypeName": "SDySS13ExtractGroups3Foo_pG", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", @@ -245,13 +261,19 @@ extension String: Foo {} // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractGroups.Tuples", +// CHECK-NEXT: "mangledTypeName": "13ExtractGroups6TuplesV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", // CHECK-NEXT: "line": 27, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractGroups.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "tuple1", // CHECK-NEXT: "type": "(Swift.String, ExtractGroups.Bar)", +// CHECK-NEXT: "mangledTypeName": "SS_13ExtractGroups3BarVt", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", @@ -276,6 +298,7 @@ extension String: Foo {} // CHECK-NEXT: { // CHECK-NEXT: "label": "tuple2", // CHECK-NEXT: "type": "(lat: Swift.Float, lng: Swift.Float)", +// CHECK-NEXT: "mangledTypeName": "Sf3lat_Sf3lngt", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", @@ -299,6 +322,7 @@ extension String: Foo {} // CHECK-NEXT: { // CHECK-NEXT: "label": "tuple3", // CHECK-NEXT: "type": "Swift.Void", +// CHECK-NEXT: "mangledTypeName": "yt", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractGroups.swift", diff --git a/test/ConstExtraction/ExtractLiterals.swift b/test/ConstExtraction/ExtractLiterals.swift index ecfe6290ced4a..4b0a82a6ff16c 100644 --- a/test/ConstExtraction/ExtractLiterals.swift +++ b/test/ConstExtraction/ExtractLiterals.swift @@ -94,13 +94,19 @@ public struct PropertyWrappers : MyProto { // CHECK: [ // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractLiterals.Bools", +// CHECK-NEXT: "mangledTypeName": "15ExtractLiterals5BoolsV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", // CHECK-NEXT: "line": 9, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractLiterals.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "bool1", // CHECK-NEXT: "type": "Swift.Bool", +// CHECK-NEXT: "mangledTypeName": "Sb", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -111,6 +117,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "bool2", // CHECK-NEXT: "type": "Swift.Optional", +// CHECK-NEXT: "mangledTypeName": "SbSg", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -122,13 +129,19 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractLiterals.Ints", +// CHECK-NEXT: "mangledTypeName": "15ExtractLiterals4IntsV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", // CHECK-NEXT: "line": 14, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractLiterals.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "int1", // CHECK-NEXT: "type": "Swift.Int", +// CHECK-NEXT: "mangledTypeName": "Si", // CHECK-NEXT: "isStatic": "true", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -139,6 +152,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "int2", // CHECK-NEXT: "type": "Swift.Int", +// CHECK-NEXT: "mangledTypeName": "Si", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -149,6 +163,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "int3", // CHECK-NEXT: "type": "Swift.Int", +// CHECK-NEXT: "mangledTypeName": "Si", // CHECK-NEXT: "isStatic": "true", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -160,13 +175,19 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractLiterals.Floats", +// CHECK-NEXT: "mangledTypeName": "15ExtractLiterals6FloatsV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", -// CHECK-NEXT: "line": 20, +// CHECK-NEXT: "line": 20, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractLiterals.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "float1", // CHECK-NEXT: "type": "Swift.Float", +// CHECK-NEXT: "mangledTypeName": "Sf", // CHECK-NEXT: "isStatic": "true", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -177,6 +198,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "float2", // CHECK-NEXT: "type": "Swift.Float", +// CHECK-NEXT: "mangledTypeName": "Sf", // CHECK-NEXT: "isStatic": "true", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -187,6 +209,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "float3", // CHECK-NEXT: "type": "Swift.Float", +// CHECK-NEXT: "mangledTypeName": "Sf", // CHECK-NEXT: "isStatic": "true", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -197,13 +220,19 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractLiterals.Strings", +// CHECK-NEXT: "mangledTypeName": "15ExtractLiterals7StringsV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", // CHECK-NEXT: "line": 26, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractLiterals.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "string1", // CHECK-NEXT: "type": "Swift.String", +// CHECK-NEXT: "mangledTypeName": "SS", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -214,6 +243,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "string2", // CHECK-NEXT: "type": "Swift.String", +// CHECK-NEXT: "mangledTypeName": "SS", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -224,6 +254,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "string3", // CHECK-NEXT: "type": "Swift.String", +// CHECK-NEXT: "mangledTypeName": "SS", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -235,13 +266,19 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractLiterals.PropertyWrappers", +// CHECK-NEXT: "mangledTypeName": "15ExtractLiterals16PropertyWrappersV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", // CHECK-NEXT: "line": 37, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractLiterals.MyProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "_propertyWrapper1", // CHECK-NEXT: "type": "ExtractLiterals.Buffered", +// CHECK-NEXT: "mangledTypeName": "15ExtractLiterals8BufferedVySSG", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -262,6 +299,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "_propertyWrapper2", // CHECK-NEXT: "type": "ExtractLiterals.Clamping", +// CHECK-NEXT: "mangledTypeName": "15ExtractLiterals8ClampingVySiG", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -294,6 +332,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "_propertyWrapper3", // CHECK-NEXT: "type": "ExtractLiterals.Buffered>", +// CHECK-NEXT: "mangledTypeName": "15ExtractLiterals8BufferedVyAA8ClampingVySiGG", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -336,6 +375,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "propertyWrapper1", // CHECK-NEXT: "type": "Swift.String", +// CHECK-NEXT: "mangledTypeName": "SS", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -364,6 +404,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "$propertyWrapper1", // CHECK-NEXT: "type": "(Swift.String, Swift.Optional)", +// CHECK-NEXT: "mangledTypeName": "SS_SSSgt", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -373,6 +414,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "propertyWrapper2", // CHECK-NEXT: "type": "Swift.Int", +// CHECK-NEXT: "mangledTypeName": "Si", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -426,6 +468,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "propertyWrapper3", // CHECK-NEXT: "type": "Swift.Int", +// CHECK-NEXT: "mangledTypeName": "Si", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", @@ -495,6 +538,7 @@ public struct PropertyWrappers : MyProto { // CHECK-NEXT: { // CHECK-NEXT: "label": "$propertyWrapper3", // CHECK-NEXT: "type": "(ExtractLiterals.Clamping, Swift.Optional>)", +// CHECK-NEXT: "mangledTypeName": "15ExtractLiterals8ClampingVySiG_ADSgt", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractLiterals.swift", diff --git a/test/ConstExtraction/ExtractOpaqueTypealias.swift b/test/ConstExtraction/ExtractOpaqueTypealias.swift new file mode 100644 index 0000000000000..a30e739481d01 --- /dev/null +++ b/test/ConstExtraction/ExtractOpaqueTypealias.swift @@ -0,0 +1,73 @@ +// REQUIRES: OS=macosx +// RUN: %empty-directory(%t) +// RUN: %empty-directory(%t/includes) +// RUN: echo "[myProto]" > %t/protocols.json + +// Build external Swift library/module to also check conformances to external protocols +// RUN: %target-build-swift -target %target-cpu-apple-macosx10.15 %S/../Reflection/Inputs/swiftmodules/testModB.swift -parse-as-library -emit-module -emit-library -module-name testModB -o %t/includes/testModB.o + +// RUN: %target-swift-frontend -target %target-cpu-apple-macosx10.15 -typecheck -emit-const-values-path %t/ExtractOpaqueTypealias.swiftconstvalues -const-gather-protocols-file %t/protocols.json -primary-file %s -I %t/includes +// RUN: cat %t/ExtractOpaqueTypealias.swiftconstvalues 2>&1 | %FileCheck %s + +import testModB + +public protocol myProto { + associatedtype PerformReturn + func perform() -> PerformReturn +} +public protocol protoA { + associatedtype T +} +public protocol protoB { + associatedtype K +} + +public struct Bar : protoA, protoB, testModBProtocol { + public typealias T = M + public typealias K = N +} + +public struct Foo : myProto { + public func perform() -> some protoA & protoB & testModBProtocol { return baz() } +} + +private func baz() -> some protoA & protoB & testModBProtocol { return Bar() } + + +// CHECK: [ +// CHECK-NEXT: { +// CHECK-NEXT: "typeName": "ExtractOpaqueTypealias.Foo", +// CHECK-NEXT: "mangledTypeName": "22ExtractOpaqueTypealias3FooV", +// CHECK-NEXT: "kind": "struct", +// CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractOpaqueTypealias.swift", +// CHECK-NEXT: "line": 30, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractOpaqueTypealias.myProto" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [ +// CHECK-NEXT: { +// CHECK-NEXT: "typeAliasName": "PerformReturn", +// CHECK-NEXT: "substitutedTypeName": "some ExtractOpaqueTypealias.protoA & ExtractOpaqueTypealias.protoB & testModB.testModBProtocol", +// CHECK-NEXT: "substitutedMangledTypeName": "22ExtractOpaqueTypealias3FooV7performQryFQOy_Qo_", +// CHECK-NEXT: "opaqueTypeProtocolRequirements": [ +// CHECK-NEXT: "ExtractOpaqueTypealias.protoA", +// CHECK-NEXT: "ExtractOpaqueTypealias.protoB", +// CHECK-NEXT: "testModB.testModBProtocol" +// CHECK-NEXT: ], +// CHECK-NEXT: "opaqueTypeSameTypeRequirements": [ +// CHECK-NEXT: { +// CHECK-NEXT: "typeAliasName": "ExtractOpaqueTypealias.protoA.T", +// CHECK-NEXT: "substitutedTypeName": "testModB.testModBStruct", +// CHECK-NEXT: "substitutedMangledTypeName": "8testModB0aB7BStructV" +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: "typeAliasName": "ExtractOpaqueTypealias.protoB.K", +// CHECK-NEXT: "substitutedTypeName": "Swift.Float", +// CHECK-NEXT: "substitutedMangledTypeName": "Sf" +// CHECK-NEXT: } +// CHECK-NEXT: ] +// CHECK-NEXT: } +// CHECK-NEXT: ], +// CHECK-NEXT: "properties": [] +// CHECK-NEXT: } +// CHECK-NEXT:] diff --git a/test/ConstExtraction/ExtractResultBuilders.swift b/test/ConstExtraction/ExtractResultBuilders.swift index 66518e4df3e0c..0a3225eff2cd6 100644 --- a/test/ConstExtraction/ExtractResultBuilders.swift +++ b/test/ConstExtraction/ExtractResultBuilders.swift @@ -49,13 +49,19 @@ public struct MyFooProviderInferred: FooProvider { // CHECK: [ // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractResultBuilders.MyFooProvider", +// CHECK-NEXT: "mangledTypeName": "21ExtractResultBuilders13MyFooProviderV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractResultBuilders.swift", // CHECK-NEXT: "line": 28, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractResultBuilders.FooProvider" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "foos", // CHECK-NEXT: "type": "Swift.Array", +// CHECK-NEXT: "mangledTypeName": "Say21ExtractResultBuilders3FooVG", // CHECK-NEXT: "isStatic": "true", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractResultBuilders.swift", @@ -68,6 +74,7 @@ public struct MyFooProviderInferred: FooProvider { // CHECK-NEXT: { // CHECK-NEXT: "label": "fooTwo", // CHECK-NEXT: "type": "Swift.Array", +// CHECK-NEXT: "mangledTypeName": "Say21ExtractResultBuilders3FooVG", // CHECK-NEXT: "isStatic": "true", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractResultBuilders.swift", @@ -81,13 +88,19 @@ public struct MyFooProviderInferred: FooProvider { // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "typeName": "ExtractResultBuilders.MyFooProviderInferred", +// CHECK-NEXT: "mangledTypeName": "21ExtractResultBuilders21MyFooProviderInferredV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractResultBuilders.swift", // CHECK-NEXT: "line": 42, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractResultBuilders.FooProvider" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "foos", // CHECK-NEXT: "type": "Swift.Array", +// CHECK-NEXT: "mangledTypeName": "Say21ExtractResultBuilders3FooVG", // CHECK-NEXT: "isStatic": "true", // CHECK-NEXT: "isComputed": "true", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractResultBuilders.swift", diff --git a/test/ConstExtraction/ExtractRuntimeMetadataAttr.swift b/test/ConstExtraction/ExtractRuntimeMetadataAttr.swift index 7510067ea61f5..7176bde57ccee 100644 --- a/test/ConstExtraction/ExtractRuntimeMetadataAttr.swift +++ b/test/ConstExtraction/ExtractRuntimeMetadataAttr.swift @@ -20,13 +20,20 @@ struct A : MyProto { } // CHECK: "typeName": "ExtractRuntimeMetadataAttr.A", +// CHECK-NEXT: "mangledTypeName": "26ExtractRuntimeMetadataAttr1AV", // CHECK-NEXT: "kind": "struct", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractRuntimeMetadataAttr.swift", // CHECK-NEXT: "line": 18, +// CHECK-NEXT: "conformances": [ +// CHECK-NEXT: "ExtractRuntimeMetadataAttr.MyProto", +// CHECK-NEXT: "Swift.Sendable" +// CHECK-NEXT: ], +// CHECK-NEXT: "associatedTypeAliases": [], // CHECK-NEXT: "properties": [ // CHECK-NEXT: { // CHECK-NEXT: "label": "v1", // CHECK-NEXT: "type": "Swift.String", +// CHECK-NEXT: "mangledTypeName": "SS", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}test{{/|\\\\}}ConstExtraction{{/|\\\\}}ExtractRuntimeMetadataAttr.swift", diff --git a/test/ConstExtraction/ExtractTypeValue.swift b/test/ConstExtraction/ExtractTypeValue.swift index 4ce9aade71a05..671e5051eca9b 100644 --- a/test/ConstExtraction/ExtractTypeValue.swift +++ b/test/ConstExtraction/ExtractTypeValue.swift @@ -17,6 +17,7 @@ struct TypeValuePropertyStruct : MyProto { // CHECK: "label": "birdTypes", // CHECK-NEXT: "type": "Swift.Array", +// CHECK-NEXT: "mangledTypeName": "Say16ExtractTypeValue4Bird_pXpG", // CHECK-NEXT: "isStatic": "false", // CHECK-NEXT: "isComputed": "false", // CHECK-NEXT: "file": "{{.*}}ExtractTypeValue.swift", From c5018f32c1592a9ba3095219009a956f49498123 Mon Sep 17 00:00:00 2001 From: Philippe Hausler Date: Thu, 22 Jun 2023 09:19:00 -0700 Subject: [PATCH 18/38] [Observation] Ensure lock storage rounding works for non-integral lock types (#66832) --- .../Sources/Observation/Locking.swift | 27 ++----------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/stdlib/public/Observation/Sources/Observation/Locking.swift b/stdlib/public/Observation/Sources/Observation/Locking.swift index 89d87299e06fc..3b7f380f135ed 100644 --- a/stdlib/public/Observation/Sources/Observation/Locking.swift +++ b/stdlib/public/Observation/Sources/Observation/Locking.swift @@ -33,7 +33,8 @@ internal struct _ManagedCriticalState { } internal init(_ initial: State) { - self.init(LockedBuffer.create(minimumCapacity: Swift.max(_lockSize() / MemoryLayout.size, 1)) { buffer in + let roundedSize = (_lockSize() + MemoryLayout.size - 1) / MemoryLayout.size + self.init(LockedBuffer.create(minimumCapacity: Swift.max(roundedSize, 1)) { buffer in buffer.withUnsafeMutablePointerToElements { _lockInit(UnsafeRawPointer($0)) } return initial }) @@ -52,30 +53,6 @@ internal struct _ManagedCriticalState { } } -@available(SwiftStdlib 5.9, *) -internal protocol _Deinitializable { - mutating func deinitialize() -} - -@available(SwiftStdlib 5.9, *) -extension _ManagedCriticalState where State: _Deinitializable { - final private class DeinitializingLockedBuffer: - ManagedBuffer { - deinit { - withUnsafeMutablePointers { header, lock in - header.pointee.deinitialize() - } - } - } - - internal init(managing initial: State) { - self.init(DeinitializingLockedBuffer.create(minimumCapacity: Swift.max(_lockSize() / MemoryLayout.size, 1)) { buffer in - buffer.withUnsafeMutablePointerToElements { _lockInit(UnsafeRawPointer($0)) } - return initial - }) - } -} - @available(SwiftStdlib 5.9, *) extension _ManagedCriticalState: @unchecked Sendable where State: Sendable { } From e20be0edc6c1ef5183131c4406ad385752cdc9b8 Mon Sep 17 00:00:00 2001 From: David Smith Date: Thu, 22 Jun 2023 10:22:36 -0700 Subject: [PATCH 19/38] Revert [Runtime] Let CF provide us with state, avoiding runtime lookup. rdar://111104451 (#66606) --- .../swift/shims/CoreFoundationShims.h | 5 +- stdlib/public/runtime/ErrorObject.mm | 16 +- stdlib/public/runtime/SwiftObject.mm | 1 - stdlib/public/stubs/FoundationHelpers.mm | 146 ++++-------------- .../public/stubs/SwiftNativeNSXXXBase.mm.gyb | 16 ++ unittests/runtime/CMakeLists.txt | 15 +- unittests/runtime/LongTests/CMakeLists.txt | 14 +- 7 files changed, 65 insertions(+), 148 deletions(-) diff --git a/stdlib/public/SwiftShims/swift/shims/CoreFoundationShims.h b/stdlib/public/SwiftShims/swift/shims/CoreFoundationShims.h index 458ac082ccf79..ccf4146483ab9 100644 --- a/stdlib/public/SwiftShims/swift/shims/CoreFoundationShims.h +++ b/stdlib/public/SwiftShims/swift/shims/CoreFoundationShims.h @@ -74,10 +74,7 @@ _swift_stdlib_NSStringGetCStringTrampoline(id _Nonnull obj, SWIFT_RUNTIME_STDLIB_API __swift_uint8_t _swift_stdlib_dyld_is_objc_constant_string(const void * _Nonnull addr); - -/// Get the NSError Objective-C class. -_Nullable Class getNSErrorClass(); - + #endif // __OBJC2__ #ifdef __cplusplus diff --git a/stdlib/public/runtime/ErrorObject.mm b/stdlib/public/runtime/ErrorObject.mm index 0302c3d7d5b22..e3ca78cd834e7 100644 --- a/stdlib/public/runtime/ErrorObject.mm +++ b/stdlib/public/runtime/ErrorObject.mm @@ -185,6 +185,10 @@ - (BOOL)isEqual:(id)other { @end +Class swift::getNSErrorClass() { + return SWIFT_LAZY_CONSTANT(objc_lookUpClass("NSError")); +} + const Metadata *swift::getNSErrorMetadata() { return SWIFT_LAZY_CONSTANT( swift_getObjCClassMetadata((const ClassMetadata *)getNSErrorClass())); @@ -216,8 +220,16 @@ - (BOOL)isEqual:(id)other { } static Class getAndBridgeSwiftNativeNSErrorClass() { - (void)getNSErrorClass(); //make sure the bridge is set up - return [__SwiftNativeNSError class]; + Class nsErrorClass = swift::getNSErrorClass(); + Class ourClass = [__SwiftNativeNSError class]; + // We want "err as AnyObject" to do *something* even without Foundation + if (nsErrorClass) { + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" + class_setSuperclass(ourClass, nsErrorClass); + #pragma clang diagnostic pop + } + return ourClass; } static Class getSwiftNativeNSErrorClass() { diff --git a/stdlib/public/runtime/SwiftObject.mm b/stdlib/public/runtime/SwiftObject.mm index d4b159d6a5db0..eed2f185ea23e 100644 --- a/stdlib/public/runtime/SwiftObject.mm +++ b/stdlib/public/runtime/SwiftObject.mm @@ -1086,7 +1086,6 @@ static bool isObjCForUnownedReference(void *value) { /*****************************************************************************/ #if SWIFT_OBJC_INTEROP - static const void * swift_dynamicCastObjCClassImpl(const void *object, const ClassMetadata *targetType) { diff --git a/stdlib/public/stubs/FoundationHelpers.mm b/stdlib/public/stubs/FoundationHelpers.mm index ee39690ad8650..66382c677e004 100644 --- a/stdlib/public/stubs/FoundationHelpers.mm +++ b/stdlib/public/stubs/FoundationHelpers.mm @@ -24,7 +24,6 @@ #import #include "swift/Runtime/Once.h" #include -#include "swift/Runtime/Atomic.h" typedef enum { dyld_objc_string_kind @@ -32,142 +31,53 @@ using namespace swift; -typedef struct _CFBridgingState { - long version; - CFHashCode(*_CFStringHashCString)(const uint8_t *bytes, CFIndex len); - CFHashCode(*_CFStringHashNSString)(id str); - CFTypeID(*_CFGetTypeID)(CFTypeRef obj); - CFTypeID _CFStringTypeID = 0; - Class NSErrorClass; - Class NSStringClass; - Class NSArrayClass; - Class NSMutableArrayClass; - Class NSSetClass; - Class NSDictionaryClass; - Class NSEnumeratorClass; - //version 0 ends here -} CFBridgingState; - -static std::atomic bridgingState; -static swift_once_t initializeBridgingStateOnce; - -static CFBridgingState const *getBridgingState() { - return bridgingState.load(SWIFT_MEMORY_ORDER_CONSUME); -} +static CFHashCode(*_CFStringHashCString)(const uint8_t *bytes, CFIndex len); +static CFHashCode(*_CFStringHashNSString)(id str); +static CFTypeID(*_CFGetTypeID)(CFTypeRef obj); +static CFTypeID _CFStringTypeID = 0; +static swift_once_t initializeBridgingFuncsOnce; extern "C" bool _dyld_is_objc_constant(DyldObjCConstantKind kind, const void *addr) SWIFT_RUNTIME_WEAK_IMPORT; -@class __SwiftNativeNSStringBase, __SwiftNativeNSError, __SwiftNativeNSArrayBase, __SwiftNativeNSMutableArrayBase, __SwiftNativeNSDictionaryBase, __SwiftNativeNSSetBase, __SwiftNativeNSEnumeratorBase; - -static void _reparentClasses() { - auto state = getBridgingState(); -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (state->NSStringClass) { - [state->NSStringClass class]; //make sure the class is realized - class_setSuperclass([__SwiftNativeNSStringBase class], state->NSStringClass); - } - if (state->NSErrorClass) { - [state->NSErrorClass class]; //make sure the class is realized - class_setSuperclass([__SwiftNativeNSError class], state->NSErrorClass); - } - if (state->NSArrayClass) { - [state->NSArrayClass class]; //make sure the class is realized - class_setSuperclass([__SwiftNativeNSArrayBase class], state->NSArrayClass); - } - if (state->NSMutableArrayClass) { - [state->NSMutableArrayClass class]; //make sure the class is realized - class_setSuperclass([__SwiftNativeNSMutableArrayBase class], state->NSMutableArrayClass); - } - if (state->NSDictionaryClass) { - [state->NSDictionaryClass class]; //make sure the class is realized - class_setSuperclass([__SwiftNativeNSDictionaryBase class], state->NSDictionaryClass); - } - if (state->NSSetClass) { - [state->NSSetClass class]; //make sure the class is realized - class_setSuperclass([__SwiftNativeNSSetBase class], state->NSSetClass); - } - if (state->NSEnumeratorClass) { - [state->NSEnumeratorClass class]; //make sure the class is realized - class_setSuperclass([__SwiftNativeNSEnumeratorBase class], state->NSEnumeratorClass); - } -#pragma clang diagnostic pop -} - -static inline bool initializeBridgingFunctions() { - swift::once(initializeBridgingStateOnce, [](){ - assert(!getBridgingState()); - auto getStringTypeID = (CFTypeID(*)(void))dlsym(RTLD_DEFAULT, "CFStringGetTypeID"); - if (!getStringTypeID) { - return; //CF not loaded - } - auto state = (CFBridgingState *)calloc(1, sizeof(CFBridgingState)); - state->version = 0; - state->_CFStringTypeID = getStringTypeID(); - state->_CFGetTypeID = (CFTypeID(*)(CFTypeRef obj))dlsym(RTLD_DEFAULT, "CFGetTypeID"); - state->_CFStringHashNSString = (CFHashCode(*)(id))dlsym(RTLD_DEFAULT, "CFStringHashNSString"); - state->_CFStringHashCString = (CFHashCode(*)(const uint8_t *, CFIndex))dlsym(RTLD_DEFAULT, "CFStringHashCString"); - state->NSErrorClass = objc_lookUpClass("NSError"); - state->NSStringClass = objc_lookUpClass("NSString"); - state->NSArrayClass = objc_lookUpClass("NSArray"); - state->NSMutableArrayClass = objc_lookUpClass("NSMutableArray"); - state->NSSetClass = objc_lookUpClass("NSSet"); - state->NSDictionaryClass = objc_lookUpClass("NSDictionary"); - state->NSEnumeratorClass = objc_lookUpClass("NSEnumerator"); - bridgingState.store(state, std::memory_order_relaxed); - _reparentClasses(); - }); - auto state = getBridgingState(); - return state && state->NSStringClass != nullptr; -} - -SWIFT_RUNTIME_EXPORT void swift_initializeCoreFoundationState(CFBridgingState const * const state) { - //Consume the once token to make sure that the lazy version of this in initializeBridgingFunctions only runs if we didn't hit this - swift::once(initializeBridgingStateOnce, [state](){ - bridgingState.store(state, std::memory_order_relaxed); - }); - //It's fine if this runs more than once, it's a noop if it's been done before - //and we want to make sure it still happens if CF loads late after it failed initially - bridgingState.store(state, std::memory_order_release); - _reparentClasses(); -} - -namespace swift { -Class getNSErrorClass(); -} - -Class swift::getNSErrorClass() { - if (initializeBridgingFunctions()) { - return getBridgingState()->NSErrorClass; - } - return nullptr; +static void _initializeBridgingFunctionsImpl(void *ctxt) { + auto getStringTypeID = + (CFTypeID(*)(void)) + dlsym(RTLD_DEFAULT, "CFStringGetTypeID"); + assert(getStringTypeID); + _CFStringTypeID = getStringTypeID(); + + _CFGetTypeID = (CFTypeID(*)(CFTypeRef obj))dlsym(RTLD_DEFAULT, "CFGetTypeID"); + _CFStringHashNSString = (CFHashCode(*)(id))dlsym(RTLD_DEFAULT, + "CFStringHashNSString"); + _CFStringHashCString = (CFHashCode(*)(const uint8_t *, CFIndex))dlsym( + RTLD_DEFAULT, + "CFStringHashCString"); } -SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_SPI -bool -swift_stdlib_connectNSBaseClasses() { - return initializeBridgingFunctions(); +static inline void initializeBridgingFunctions() { + swift_once(&initializeBridgingFuncsOnce, + _initializeBridgingFunctionsImpl, + nullptr); } __swift_uint8_t _swift_stdlib_isNSString(id obj) { - assert(initializeBridgingFunctions()); - auto state = getBridgingState(); - return state->_CFGetTypeID((CFTypeRef)obj) == state->_CFStringTypeID ? 1 : 0; + initializeBridgingFunctions(); + return _CFGetTypeID((CFTypeRef)obj) == _CFStringTypeID ? 1 : 0; } _swift_shims_CFHashCode _swift_stdlib_CFStringHashNSString(id _Nonnull obj) { - assert(initializeBridgingFunctions()); - return getBridgingState()->_CFStringHashNSString(obj); + initializeBridgingFunctions(); + return _CFStringHashNSString(obj); } _swift_shims_CFHashCode _swift_stdlib_CFStringHashCString(const _swift_shims_UInt8 * _Nonnull bytes, _swift_shims_CFIndex length) { - assert(initializeBridgingFunctions()); - return getBridgingState()->_CFStringHashCString(bytes, length); + initializeBridgingFunctions(); + return _CFStringHashCString(bytes, length); } const __swift_uint8_t * diff --git a/stdlib/public/stubs/SwiftNativeNSXXXBase.mm.gyb b/stdlib/public/stubs/SwiftNativeNSXXXBase.mm.gyb index 46e87bffdda4e..89e389f8ba8bc 100644 --- a/stdlib/public/stubs/SwiftNativeNSXXXBase.mm.gyb +++ b/stdlib/public/stubs/SwiftNativeNSXXXBase.mm.gyb @@ -87,6 +87,22 @@ swift_stdlib_NSObject_isEqual(id lhs, return (lhs == rhs) || [lhs isEqual:rhs]; } +SWIFT_CC(swift) SWIFT_RUNTIME_STDLIB_SPI +bool +swift_stdlib_connectNSBaseClasses() { +% for Class in ('Array', 'MutableArray', 'Dictionary', 'Set', 'String', 'Enumerator'): + Class NS${Class}Super = objc_lookUpClass("NS${Class}"); + if (!NS${Class}Super) return false; + Class NS${Class}OurClass = objc_lookUpClass("__SwiftNativeNS${Class}Base"); + if (!NS${Class}OurClass) return false; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + class_setSuperclass(NS${Class}OurClass, NS${Class}Super); +#pragma clang diagnostic pop +% end + return true; +} + #endif // ${'Local Variables'}: diff --git a/unittests/runtime/CMakeLists.txt b/unittests/runtime/CMakeLists.txt index 8981b022a3acc..79df463c0edb0 100644 --- a/unittests/runtime/CMakeLists.txt +++ b/unittests/runtime/CMakeLists.txt @@ -40,14 +40,6 @@ if(("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SDK}") AND set(PLATFORM_SOURCES) set(PLATFORM_TARGET_LINK_LIBRARIES) - set(PLATFORM_TARGET_RUNTIME_ARCHIVES) - - list(APPEND PLATFORM_TARGET_RUNTIME_ARCHIVES - $ - $ - $ - ) - if(SWIFT_HOST_VARIANT MATCHES "${SWIFT_DARWIN_VARIANTS}") find_library(FOUNDATION_LIBRARY Foundation) list(APPEND PLATFORM_SOURCES @@ -61,9 +53,6 @@ if(("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SDK}") AND swift_Concurrency${SWIFT_PRIMARY_VARIANT_SUFFIX} swiftStdlibUnittest${SWIFT_PRIMARY_VARIANT_SUFFIX} ) - list(APPEND PLATFORM_TARGET_RUNTIME_ARCHIVES - $ - ) elseif(SWIFT_HOST_VARIANT STREQUAL "Linux") if(SWIFT_HOST_VARIANT_ARCH MATCHES "armv6|armv7|i686") list(APPEND PLATFORM_TARGET_LINK_LIBRARIES @@ -127,7 +116,9 @@ if(("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SDK}") AND # The runtime tests link to internal runtime symbols, which aren't exported # from the swiftCore dylib, so we need to link to both the runtime archive # and the stdlib. - ${PLATFORM_TARGET_RUNTIME_ARCHIVES} + $ + $ + $ ) # The local stdlib implementation provides definitions of the swiftCore diff --git a/unittests/runtime/LongTests/CMakeLists.txt b/unittests/runtime/LongTests/CMakeLists.txt index 2fa928b14fab2..592e532f8cf53 100644 --- a/unittests/runtime/LongTests/CMakeLists.txt +++ b/unittests/runtime/LongTests/CMakeLists.txt @@ -3,18 +3,8 @@ if(("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SDK}") AND set(PLATFORM_SOURCES) set(PLATFORM_TARGET_LINK_LIBRARIES) - set(PLATFORM_TARGET_RUNTIME_ARCHIVES) - - list(APPEND PLATFORM_TARGET_RUNTIME_ARCHIVES - $ - $ - $ - ) if(SWIFT_HOST_VARIANT MATCHES "${SWIFT_DARWIN_VARIANTS}") - list(APPEND PLATFORM_TARGET_RUNTIME_ARCHIVES - $ - ) # Placeholder for Darwin Foundation tests (currently none) # find_library(FOUNDATION_LIBRARY Foundation) # list(APPEND PLATFORM_SOURCES @@ -52,7 +42,9 @@ if(("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SDK}") AND # The runtime tests link to internal runtime symbols, which aren't exported # from the swiftCore dylib, so we need to link to both the runtime archive # and the stdlib. - ${PLATFORM_TARGET_RUNTIME_ARCHIVES} + $ + $ + $ ) # The local stdlib implementation provides definitions of the swiftCore From 806fd1b58b6c5b98157e201f29c92bd261769fef Mon Sep 17 00:00:00 2001 From: Dario Rexin Date: Thu, 22 Jun 2023 10:53:55 -0700 Subject: [PATCH 20/38] [Runtime] Handle generic single payload enums in resilient resolve (#66849) --- stdlib/public/runtime/BytecodeLayouts.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/stdlib/public/runtime/BytecodeLayouts.cpp b/stdlib/public/runtime/BytecodeLayouts.cpp index 4f113eac78d76..1f0881627805b 100644 --- a/stdlib/public/runtime/BytecodeLayouts.cpp +++ b/stdlib/public/runtime/BytecodeLayouts.cpp @@ -698,6 +698,18 @@ void swift::swift_resolve_resilientAccessors(uint8_t *layoutStr, reader.skip(3 * sizeof(size_t)); break; + case RefCountingKind::SinglePayloadEnumGeneric: { + reader.skip(sizeof(uint64_t) + // tag + offset + sizeof(uint64_t) + // extra tag bytes + XI offset + sizeof(size_t) + // payload size + sizeof(uintptr_t) + // XI metadata + sizeof(unsigned)); // num empty cases + auto refCountBytes = reader.readBytes(); + reader.skip(sizeof(size_t) + // bytes to skip if no payload case + refCountBytes); + break; + } + case RefCountingKind::MultiPayloadEnumFN: { auto getEnumTag = readRelativeFunctionPointer(reader); writer.offset = layoutStrOffset + currentOffset - layoutStringHeaderSize; From 024efd2a4ee4a2d1bcf1aafdeb864f175d0feb13 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Thu, 22 Jun 2023 11:10:32 -0700 Subject: [PATCH 21/38] SILGen: Don't emit key path property descriptors for properties in or of noncopyable types. Key paths don't support them yet, and the current component representation is inadequate to handle them without requiring internal copying in all cases, so let's avoid generating invalid property descriptors for them today. rdar://111171284 --- lib/SIL/IR/SIL.cpp | 15 ++++ ...no_property_descriptor_for_move_only.swift | 69 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 test/SILGen/no_property_descriptor_for_move_only.swift diff --git a/lib/SIL/IR/SIL.cpp b/lib/SIL/IR/SIL.cpp index 01090436aaba6..cc4578d542b5c 100644 --- a/lib/SIL/IR/SIL.cpp +++ b/lib/SIL/IR/SIL.cpp @@ -300,6 +300,21 @@ bool AbstractStorageDecl::exportsPropertyDescriptor() const { // The storage needs a descriptor if it sits at a module's ABI boundary, // meaning it has public linkage. + // Noncopyable types aren't supported by key paths in their current form. + // They would also need a new ABI that's yet to be implemented in order to + // be properly supported, so let's suppress the descriptor for now if either + // the container or storage type of the declaration is non-copyable. + if (getValueInterfaceType()->isPureMoveOnly()) { + return false; + } + if (!isStatic()) { + if (auto contextTy = getDeclContext()->getDeclaredTypeInContext()) { + if (contextTy->isPureMoveOnly()) { + return false; + } + } + } + // TODO: Global and static properties ought to eventually be referenceable // as key paths from () or T.Type too. if (!getDeclContext()->isTypeContext() || isStatic()) diff --git a/test/SILGen/no_property_descriptor_for_move_only.swift b/test/SILGen/no_property_descriptor_for_move_only.swift new file mode 100644 index 0000000000000..97e4af2d3dac7 --- /dev/null +++ b/test/SILGen/no_property_descriptor_for_move_only.swift @@ -0,0 +1,69 @@ +// RUN: %empty-directory(%t) +// RUN: %target-swift-emit-silgen %s > %t/fragile-out.sil +// %FileCheck --check-prefix=POS %s < %t/fragile-out.sil +// %FileCheck --check-prefix=NEG %s < %t/fragile-out.sil +// RUN: %target-swift-emit-silgen -enable-library-evolution %s > %t/resilient-out.sil +// %FileCheck --check-prefix=POS %s < %t/resilient-out.sil +// %FileCheck --check-prefix=NEG %s < %t/resilient-out.sil + +@frozen +public struct IsCopyable { + public init() {} + + // Shouldn't get a property descriptor since property type is noncopyable + // NEG-NOT: sil_property #IsCopyable.noncopyable + public var noncopyable: IsntCopyable { + get { IsntCopyable() } + set { } + } + + // Should get a property descriptor, copyable container and property + // POS: sil_property #IsCopyable.copyable + public var copyable: IsCopyable { + get { IsCopyable() } + set { } + } + + // Shouldn't get a property descriptor since it's static + // NEG-NOT: sil_property #IsCopyable.staticCopyable + public static var staticCopyable: IsCopyable = IsCopyable() + + // Shouldn't get a property descriptor since it's static + // NEG-NOT: sil_property #IsCopyable.staticNoncopyable + public static var staticNoncopyable: IsntCopyable = IsntCopyable() +} + +@frozen +public struct IsntCopyable: ~Copyable { + public init() {} + + // Shouldn't get a property descriptor since container and property type are both noncopyable + // NEG-NOT: sil_property #IsntCopyable.noncopyable + public var noncopyable: IsntCopyable { + get { IsntCopyable() } + set { } + } + + // Shouldn't get a property descriptor since container type is noncopyable + // NEG-NOT: sil_property #IsntCopyable.copyable + public var copyable: IsCopyable { + get { IsCopyable() } + set { } + } + + // Shouldn't get a property descriptor since it's static + // NEG-NOT: sil_property #IsntCopyable.staticCopyable + public static var staticCopyable: IsCopyable = IsCopyable() + + // Shouldn't get a property descriptor since it's static + // NEG-NOT: sil_property #IsntCopyable.staticNoncopyable + public static var staticNoncopyable: IsntCopyable = IsntCopyable() +} + +// Shouldn't get a property descriptor since it's global +// NEG-NOT: sil_property #{{.*}}globalCopyable +public var globalCopyable: IsCopyable = IsCopyable() + +// Shouldn't get a property descriptor since it's global +// NEG-NOT: sil_property #{{.*}}globalNoncopyable +public var globalNoncopyable: IsntCopyable = IsntCopyable() From 640a00623d4458d290baa5a223c0d440de0ea49e Mon Sep 17 00:00:00 2001 From: Felipe de Azevedo Piovezan Date: Thu, 22 Jun 2023 14:19:11 -0400 Subject: [PATCH 22/38] [DebugInfo][NFC] Update test to not check width of integer argument This is irrelevant for the test itself and may change depending on target. --- test/DebugInfo/variadic-generics.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/DebugInfo/variadic-generics.swift b/test/DebugInfo/variadic-generics.swift index 041537ae70d1e..9e44fded24f46 100644 --- a/test/DebugInfo/variadic-generics.swift +++ b/test/DebugInfo/variadic-generics.swift @@ -3,7 +3,7 @@ public func foo(args: repeat each T) { // CHECK: define {{.*}} @"$s1a3foo4argsyxxQp_tRvzlF" - // CHECK-SAME: ptr {{.*}} %[[ARG_0:.*]], i64 %{{.*}}, + // CHECK-SAME: ptr {{.*}} %[[ARG_0:.*]], i{{.*}} %{{.*}}, // CHECK-SAME: ptr %[[TYPE_PACK_ARG:.*]]) // CHECK: %[[TYPE_PACK_ALLOCA:.*]] = alloca ptr // CHECK: call void @llvm.dbg.declare(metadata ptr %[[TYPE_PACK_ALLOCA]], metadata ![[TYPE_PACK_VAR:[0-9]+]], metadata !DIExpression()) From c3ae41381dcafa368e435835873d451304af4b46 Mon Sep 17 00:00:00 2001 From: Dario Rexin Date: Thu, 22 Jun 2023 12:02:33 -0700 Subject: [PATCH 23/38] [Runtime] Use proper offset in generic multi payload enum layout strings (#66856) --- stdlib/public/runtime/Enum.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/public/runtime/Enum.cpp b/stdlib/public/runtime/Enum.cpp index 7bbd98b2423bb..9f3eaac2663cb 100644 --- a/stdlib/public/runtime/Enum.cpp +++ b/stdlib/public/runtime/Enum.cpp @@ -510,7 +510,6 @@ void swift::swift_initEnumMetadataMultiPayloadWithLayoutString( writer.writeBytes(payloadRefCountBytes); writer.writeBytes(size_t(totalSize)); - size_t fullOffset = 0; LayoutStringFlags flags = LayoutStringFlags::Empty; LayoutStringWriter offsetWriter{layoutStr, writer.offset}; @@ -525,6 +524,7 @@ void swift::swift_initEnumMetadataMultiPayloadWithLayoutString( size_t layoutStrOffsetBefore = writer.offset; size_t previousFieldOffset = 0; + size_t fullOffset = 0; _swift_addRefCountStringForMetatype(writer, flags, payloadType, fullOffset, previousFieldOffset); From 37220ed37ff8316b041f75eb6137f7209c2eea41 Mon Sep 17 00:00:00 2001 From: Dario Rexin Date: Thu, 22 Jun 2023 12:02:46 -0700 Subject: [PATCH 24/38] [Runtime] Handle generic multi payload enums in resilient resolve (#66848) * [Runtime] Handle generic multi payload enums in resilient resolve * Update BytecodeLayouts.cpp * Update BytecodeLayouts.cpp --- stdlib/public/runtime/BytecodeLayouts.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/stdlib/public/runtime/BytecodeLayouts.cpp b/stdlib/public/runtime/BytecodeLayouts.cpp index 1f0881627805b..a2bfa2d7466c4 100644 --- a/stdlib/public/runtime/BytecodeLayouts.cpp +++ b/stdlib/public/runtime/BytecodeLayouts.cpp @@ -748,6 +748,14 @@ void swift::swift_resolve_resilientAccessors(uint8_t *layoutStr, break; } + case RefCountingKind::MultiPayloadEnumGeneric: { + reader.skip(sizeof(size_t)); + auto numPayloads = reader.readBytes(); + auto refCountBytes = reader.readBytes(); + reader.skip(sizeof(size_t) * (numPayloads + 1) + refCountBytes); + break; + } + default: break; } From b66dfadea5d84bea7bc5a9b793bbce425842b9cc Mon Sep 17 00:00:00 2001 From: Alex Hoppen Date: Thu, 22 Jun 2023 21:29:08 +0200 Subject: [PATCH 25/38] =?UTF-8?q?[SourceKit]=20When=20AST-based=20cursor?= =?UTF-8?q?=20info=20is=20cancelled,=20don=E2=80=99t=20run=20solver-based?= =?UTF-8?q?=20cursor=20info?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Running solver-based cursor info in the callback that is informed about cancellation extends the window for a deadlock. --- tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp b/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp index 928377c556793..00e6595377f9b 100644 --- a/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp +++ b/tools/SourceKit/lib/SwiftLang/SwiftSourceDocInfo.cpp @@ -2041,8 +2041,14 @@ void SwiftLangSupport::getCursorInfo( fileSystem, Receiver, Offset, Actionables, SymbolGraph]( const RequestResult &Res) { + if (Res.isCancelled()) { + // If the AST-based result got cancelled, we don’t want to start + // solver-based cursor info anymore. + Receiver(Res); + return; + } // AST based completion *always* produces a result - bool NoResults = Res.isError() || Res.isCancelled(); + bool NoResults = Res.isError(); if (Res.isValue()) { NoResults = Res.value().Symbols.empty(); } From 35661f2ab6b88996780834295a3f8b737c6a6245 Mon Sep 17 00:00:00 2001 From: Alex Hoppen Date: Thu, 22 Jun 2023 21:30:44 +0200 Subject: [PATCH 26/38] [SourceKit] Inform consumers about cancellation from a background queue This fixes a deadlock that could occur when a cursor info request is cancelled while another one is inside the cancellation callback. The schematic deadlock backtrace is ``` sourcekitd::cancelRequest SourceKit::RequestTracker::cancel -> holds RequestTracker.RequestsMtx anonymous func in SourceKit::SwiftASTManager::processASTAsync SourceKit::SwiftASTConsumer::requestCancellation anonymous func in ASTBuildOperation::addConsumer -> tries to get ASTBuildOperation.ConsumersAndResultMtx resolveCursor SourceKit::SwiftASTManager::processASTAsync SourceKit::SwiftASTConsumer::requestCancellation anonymous func in ASTBuildOperation::addConsumer [probably inlined] ASTBuildOperation::requestConsumerCancellation -> holds ASTBuildOperation.ConsumersAndResultMtx resolveCursor::CursorInfoConsumer::cancelled anonymous func in SourceKit::SwiftLangSupport::getCursorInfo anonymous func in handleRequestCursorInfo reportCursorInfo anonymous func in sourcekitd::handleRequest -> tries to get RequestTracker.RequestsMtx ``` rdar://110357502 --- .../lib/SwiftLang/SwiftASTManager.cpp | 43 ++++++++++++++----- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp b/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp index a050676ed4bb4..a3ffca8f2898e 100644 --- a/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp +++ b/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp @@ -613,6 +613,13 @@ struct SwiftASTManager::Implementation { WorkQueue ASTBuildQueue{ WorkQueue::Dequeuing::Serial, "sourcekit.swift.ASTBuilding" }; + /// Queue on which consumers may be notified about results and cancellation. + /// This is essentially just a background queue to which we can jump to inform + /// consumers while making sure that no locks are currently claimed. + WorkQueue ConsumerNotificationQueue{ + WorkQueue::Dequeuing::Concurrent, + "SwiftASTManager::Implementation::ConsumerNotificationQueue"}; + /// Remove all scheduled consumers that don't exist anymore. This is just a /// garbage-collection operation to make sure the \c ScheduledConsumers vector /// doesn't explode. One should never make assumptions that all consumers in @@ -782,9 +789,11 @@ void SwiftASTManager::processASTAsync( // Cancel any consumers with the same OncePerASTToken. for (auto ScheduledConsumer : Impl.ScheduledConsumers) { if (ScheduledConsumer.OncePerASTToken == OncePerASTToken) { - if (auto Consumer = ScheduledConsumer.Consumer.lock()) { - Consumer->requestCancellation(); - } + Impl.ConsumerNotificationQueue.dispatch([ScheduledConsumer]() { + if (auto Consumer = ScheduledConsumer.Consumer.lock()) { + Consumer->requestCancellation(); + } + }); } } } @@ -794,11 +803,17 @@ void SwiftASTManager::processASTAsync( Producer->enqueueConsumer(ASTConsumer, fileSystem, shared_from_this()); auto WeakConsumer = SwiftASTConsumerWeakRef(ASTConsumer); - Impl.ReqTracker->setCancellationHandler(CancellationToken, [WeakConsumer] { - if (auto Consumer = WeakConsumer.lock()) { - Consumer->requestCancellation(); - } - }); + auto WeakThis = std::weak_ptr(shared_from_this()); + Impl.ReqTracker->setCancellationHandler( + CancellationToken, [WeakConsumer, WeakThis] { + if (auto This = WeakThis.lock()) { + This->Impl.ConsumerNotificationQueue.dispatch([WeakConsumer]() { + if (auto Consumer = WeakConsumer.lock()) { + Consumer->requestCancellation(); + } + }); + } + }); } void SwiftASTManager::removeCachedAST(SwiftInvocationRef Invok) { @@ -950,12 +965,14 @@ void ASTBuildOperation::requestConsumerCancellation( return; } Consumers.erase(ConsumerIndex); - Consumer->cancelled(); if (Consumers.empty()) { // If there are no more consumers waiting for this result, cancel the AST // build. CancellationFlag->store(true, std::memory_order_relaxed); } + ASTManager->Impl.ConsumerNotificationQueue.dispatch([Consumer] { + Consumer->cancelled(); + }); } static void collectModuleDependencies(ModuleDecl *TopMod, @@ -1027,11 +1044,15 @@ void ASTBuildOperation::informConsumer(SwiftASTConsumerRef Consumer) { "more consumers attached to it and should not accept any " "new consumers if the build operation was cancelled. Thus " "this case should never happen."); - Consumer->cancelled(); + ASTManager->Impl.ConsumerNotificationQueue.dispatch([Consumer] { + Consumer->cancelled(); + }); } else if (Result.AST) { Result.AST->Impl.consumeAsync(Consumer, Result.AST); } else { - Consumer->failed(Result.Error); + ASTManager->Impl.ConsumerNotificationQueue.dispatch([Consumer, Error = Result.Error] { + Consumer->failed(Error); + }); } } From 957b465120ad3af7de248c09f5974be9ba383ad6 Mon Sep 17 00:00:00 2001 From: Arnold Schwaighofer Date: Thu, 22 Jun 2023 11:49:49 -0700 Subject: [PATCH 27/38] Fix some IRGen tests on armv7k for opaque pointers --- test/IRGen/abi_v7k.swift | 4 ++-- .../IRGen/class_isa_pointers_armv7k_watchos.sil | 17 ++++++----------- test/IRGen/objc_object_getClass.swift | 4 ++-- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/test/IRGen/abi_v7k.swift b/test/IRGen/abi_v7k.swift index 3462650b29857..cec49c0801a88 100644 --- a/test/IRGen/abi_v7k.swift +++ b/test/IRGen/abi_v7k.swift @@ -296,7 +296,7 @@ func testRet3() -> MyRect2 { } // Returning tuple?: (Int x 6)? -// CHECK-LABEL: define hidden swiftcc void @"$s8test_v7k7minMax2{{.*}}"({{%TSi.*}} noalias nocapture sret({{.*}}) %0, i32 %1, i32 %2) +// CHECK-LABEL: define hidden swiftcc void @"$s8test_v7k7minMax2{{.*}}"(ptr noalias nocapture sret({{.*}}) %0, i32 %1, i32 %2) // V7K-LABEL: _$s8test_v7k7minMax2 // We will indirectly return an optional with the address in r0, input parameters will be in r1 and r2 // V7K: str r0, [sp, [[IDX:#[0-9]+]]] @@ -324,7 +324,7 @@ func minMax2(x : Int, y : Int) -> (min: Int, max: Int, min2: Int, max2: Int, min } // Returning struct?: {Int x 6}? -// CHECK-LABEL: define hidden swiftcc void @"$s8test_v7k7minMax3{{.*}}"({{%T.*}} noalias nocapture sret({{.*}}) %0, i32 %1, i32 %2) +// CHECK-LABEL: define hidden swiftcc void @"$s8test_v7k7minMax3{{.*}}"(ptr noalias nocapture sret({{.*}}) %0, i32 %1, i32 %2) // V7K-LABEL: _$s8test_v7k7minMax3 struct Ret { var min:Int diff --git a/test/IRGen/class_isa_pointers_armv7k_watchos.sil b/test/IRGen/class_isa_pointers_armv7k_watchos.sil index 6dd1b28f5bbe5..e6bd37c4b6218 100644 --- a/test/IRGen/class_isa_pointers_armv7k_watchos.sil +++ b/test/IRGen/class_isa_pointers_armv7k_watchos.sil @@ -17,11 +17,9 @@ class Purebred { } sil_vtable Purebred {} -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @purebred_method(%T33class_isa_pointers_armv7k_watchos8PurebredC* %0) {{.*}} { -// CHECK: [[ISA_PTR:%.*]] = bitcast %T33class_isa_pointers_armv7k_watchos8PurebredC* %0 to %swift.type** -// CHECK: [[ISA:%.*]] = load %swift.type*, %swift.type** [[ISA_PTR]] -// CHECK: [[VTABLE:%.*]] = bitcast %swift.type* [[ISA]] -// CHECK: getelementptr inbounds {{.*}} [[VTABLE]] +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @purebred_method(ptr %0) {{.*}} { +// CHECK: [[ISA:%.*]] = load ptr, ptr %0 +// CHECK: getelementptr inbounds {{.*}} [[ISA]] sil @purebred_method : $@convention(thin) (@owned Purebred) -> () { entry(%0 : $Purebred): %m = class_method %0 : $Purebred, #Purebred.method : (Purebred) -> () -> (), $@convention(method) (@guaranteed Purebred) -> () @@ -38,12 +36,9 @@ class Mongrel: Gizmo { } sil_vtable Mongrel {} -// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @mongrel_method(%T33class_isa_pointers_armv7k_watchos7MongrelC* %0) {{.*}} { -// CHECK: [[T0:%.*]] = bitcast {{.*}} %0 to %objc_object* -// CHECK: [[T1:%.*]] = call %objc_class* @object_getClass(%objc_object* [[T0]]) -// CHECK: [[ISA:%.*]] = bitcast %objc_class* [[T1]] to %swift.type* -// CHECK: [[VTABLE:%.*]] = bitcast %swift.type* [[ISA]] -// CHECK: getelementptr inbounds {{.*}} [[VTABLE]] +// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @mongrel_method(ptr %0) {{.*}} { +// CHECK: [[T1:%.*]] = call ptr @object_getClass(ptr %0) +// CHECK: getelementptr inbounds {{.*}} [[T1]] sil @mongrel_method : $@convention(thin) (@owned Mongrel) -> () { entry(%0 : $Mongrel): %m = class_method %0 : $Mongrel, #Mongrel.method : (Mongrel) -> () -> (), $@convention(method) (@guaranteed Mongrel) -> () diff --git a/test/IRGen/objc_object_getClass.swift b/test/IRGen/objc_object_getClass.swift index 2c62ea309e8cc..4166955692fc1 100644 --- a/test/IRGen/objc_object_getClass.swift +++ b/test/IRGen/objc_object_getClass.swift @@ -18,5 +18,5 @@ func test(_ o: ObjCSubclass) { o.field = 10 } -// CHECK-DAG: declare i8* @object_getClass(i8*{{.*}}) -// CHECK-DAG: call %objc_class* bitcast (i8* (i8*)* @object_getClass to %objc_class* (%objc_object*)*)(%objc_object* %{{.*}}) +// CHECK-DAG: declare ptr @object_getClass(ptr{{.*}}) +// CHECK-DAG: call ptr @object_getClass(ptr %{{.*}}) From 5eee766d5d9afa362e8887c37344403cda178d6d Mon Sep 17 00:00:00 2001 From: Arnold Schwaighofer Date: Thu, 22 Jun 2023 12:43:32 -0700 Subject: [PATCH 28/38] Fix test/IRGen/abitypes.swift --- test/IRGen/abitypes.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/IRGen/abitypes.swift b/test/IRGen/abitypes.swift index 0924943d8eb93..08bbef98bdc9e 100644 --- a/test/IRGen/abitypes.swift +++ b/test/IRGen/abitypes.swift @@ -175,8 +175,7 @@ class Foo { // armv7k-watchos: load ptr, ptr @"\01L_selector(newRect)", align 4 // armv7k-watchos: [[RESULT:%.*]] = call [[ARMV7K_MYRECT]] @objc_msgSend // armv7k-watchos: store [[ARMV7K_MYRECT]] [[RESULT]] - // armv7k-watchos: [[CAST:%.*]] = bitcast ptr - // armv7k-watchos: load { float, float, float, float }, ptr [[CAST]] + // armv7k-watchos: load { float, float, float, float }, ptr // armv7k-watchos: ret float func barc(_ p: StructReturns) -> Float { return p.newRect().y From 49831a9e93e3eb469642330b7e9c5dab2f1ca563 Mon Sep 17 00:00:00 2001 From: Becca Royal-Gordon Date: Thu, 22 Jun 2023 10:40:09 -0700 Subject: [PATCH 29/38] Fix @objcImpl crash with async/sync overloads The @objcImpl checker would accidentally dereference a null pointer when it tried to check if an async requirement could be satisfied by a non-async method. Fix that mistake. Fixes rdar://111064481. --- lib/Sema/TypeCheckDeclObjC.cpp | 2 +- test/decl/ext/Inputs/objc_implementation.h | 3 +++ test/decl/ext/objc_implementation.swift | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/Sema/TypeCheckDeclObjC.cpp b/lib/Sema/TypeCheckDeclObjC.cpp index 7651723deba61..812ca6d62bd46 100644 --- a/lib/Sema/TypeCheckDeclObjC.cpp +++ b/lib/Sema/TypeCheckDeclObjC.cpp @@ -2943,7 +2943,7 @@ class ObjCImplementationChecker { if (auto func = dyn_cast(req)) { auto asyncFunc = func->getAsyncAlternative(); - if (auto asyncAccessor = dyn_cast(asyncFunc)) + if (auto asyncAccessor = dyn_cast_or_null(asyncFunc)) return asyncAccessor->getStorage(); return asyncFunc; diff --git a/test/decl/ext/Inputs/objc_implementation.h b/test/decl/ext/Inputs/objc_implementation.h index a18fc12942d8f..0f7d24906cf5c 100644 --- a/test/decl/ext/Inputs/objc_implementation.h +++ b/test/decl/ext/Inputs/objc_implementation.h @@ -103,6 +103,9 @@ - (void)doSomethingAsynchronousWithCompletionHandler:(void (^ _Nonnull)(id _Nullable result, NSError * _Nullable error))completionHandler; - (void)doSomethingElseAsynchronousWithCompletionHandler:(void (^ _Nullable)(id _Nonnull result))completionHandler; - (void)doSomethingFunAndAsynchronousWithCompletionHandler:(void (^ _Nonnull)(id _Nullable result, NSError * _Nullable error))completionHandler; + +- (void)doSomethingOverloadedWithCompletionHandler:(void (^ _Nonnull)())completionHandler; +- (void)doSomethingOverloaded __attribute__((__swift_attr__("@_unavailableFromAsync(message: \"Use async doSomethingOverloaded instead.\")"))); @end @protocol PartiallyOptionalProtocol diff --git a/test/decl/ext/objc_implementation.swift b/test/decl/ext/objc_implementation.swift index 0193e520dd38c..433dfb450179b 100644 --- a/test/decl/ext/objc_implementation.swift +++ b/test/decl/ext/objc_implementation.swift @@ -327,6 +327,14 @@ protocol EmptySwiftProto {} public func doSomethingFunAndAsynchronous(completionHandler: @escaping (Any?, Error?) -> Void) { } + + @available(SwiftStdlib 5.1, *) + @objc(doSomethingOverloadedWithCompletionHandler:) + public func doSomethingOverloaded() async {} + + @available(*, noasync) + @objc(doSomethingOverloaded) + public func doSomethingOverloaded() {} } @_objcImplementation(Conformance) extension ObjCClass { From 096d8ea142d28690f677e4bed291474155e7cedd Mon Sep 17 00:00:00 2001 From: Rintaro Ishizaki Date: Wed, 21 Jun 2023 11:33:02 -0700 Subject: [PATCH 30/38] [CodeCompletion] Suggest synthesized declarations from macros * Don't invalidate the lookup cache in 'getOrCreateSynthesizedFile()' Adding a synthesized file itself doesn't introduce any decls. Instead, we should invalidate the right after the actual declrations are added in the file * Remove 'SourceLookupCache::invalidate()' method. It was just used right before the destruction. It was just not necessary * Include auxiliary decls in 'SourceLookupCache::lookupVisibleDecls()' Previously, global symbol completion didn't include decls synthesized by peer macros or freestanding decl macros * Include "auxiliary decls" in visible member lookup, and visible local decl lookup * Hide macro unique names rdar://110535113 --- lib/AST/Decl.cpp | 4 + lib/AST/Module.cpp | 49 ++++++---- lib/AST/NameLookup.cpp | 37 ++++++- .../Differentiation/LinearMapInfo.cpp | 1 + lib/Sema/LookupVisibleDecls.cpp | 27 +++--- test/IDE/complete_macros_expanded.swift | 96 +++++++++++++++++++ .../Inputs/syntax_macro_definitions.swift | 13 +++ 7 files changed, 188 insertions(+), 39 deletions(-) create mode 100644 test/IDE/complete_macros_expanded.swift diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index dd55ebe4529a1..61e4f39837c12 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -3827,6 +3827,10 @@ bool ValueDecl::shouldHideFromEditor() const { getBaseIdentifier().str().startswith("$__")) return true; + // Macro unique names are only intended to be used inside the expanded code. + if (MacroDecl::isUniqueMacroName(getBaseName())) + return true; + return false; } diff --git a/lib/AST/Module.cpp b/lib/AST/Module.cpp index 3071fb7ac6b20..ff8d0553361a8 100644 --- a/lib/AST/Module.cpp +++ b/lib/AST/Module.cpp @@ -188,9 +188,6 @@ class swift::SourceLookupCache { SourceLookupCache(const SourceFile &SF); SourceLookupCache(const ModuleDecl &Mod); - /// Throw away as much memory as possible. - void invalidate(); - void lookupValue(DeclName Name, NLKind LookupKind, OptionSet Flags, SmallVectorImpl &Result); @@ -552,6 +549,29 @@ void SourceLookupCache::lookupVisibleDecls(ImportPath::Access AccessPath, Consumer.foundDecl(vd, DeclVisibilityKind::VisibleAtTopLevel); } } + + populateAuxiliaryDeclCache(); + SmallVector unexpandedDecls; + for (auto &entry : TopLevelAuxiliaryDecls) { + for (auto &decl : entry.second) { + unexpandedDecls.append(entry.second.begin(), entry.second.end()); + } + } + + // Store macro expanded decls in a 'SmallSetVector' because different + // MissingDecls might be created by a single macro expansion. (e.g. multiple + // 'names' in macro role attributes). Since expansions are cached, it doesn't + // cause duplicated expansions, but different 'unexpandedDecl' may report the + // same 'ValueDecl'. + SmallSetVector macroExpandedDecls; + for (MissingDecl *unexpandedDecl : unexpandedDecls) { + unexpandedDecl->forEachMacroExpandedDecl([&](ValueDecl *vd) { + macroExpandedDecls.insert(vd); + }); + } + for (auto *vd : macroExpandedDecls) { + Consumer.foundDecl(vd, DeclVisibilityKind::VisibleAtTopLevel); + } } void SourceLookupCache::lookupClassMembers(ImportPath::Access accessPath, @@ -608,16 +628,6 @@ void SourceLookupCache::lookupClassMember(ImportPath::Access accessPath, results.append(iter->second.begin(), iter->second.end()); } -void SourceLookupCache::invalidate() { - TopLevelValues.clear(); - ClassMembers.clear(); - MemberCachePopulated = false; - - // std::move AllVisibleValues into a temporary to destroy its contents. - using SameSizeSmallVector = decltype(AllVisibleValues); - (void)SameSizeSmallVector{std::move(AllVisibleValues)}; -} - //===----------------------------------------------------------------------===// // Module Implementation //===----------------------------------------------------------------------===// @@ -1067,9 +1077,12 @@ void SourceFile::lookupValue(DeclName name, NLKind lookupKind, void ModuleDecl::lookupVisibleDecls(ImportPath::Access AccessPath, VisibleDeclConsumer &Consumer, NLKind LookupKind) const { - if (isParsedModule(this)) - return getSourceLookupCache().lookupVisibleDecls( - AccessPath, Consumer, LookupKind); + if (isParsedModule(this)) { + auto &cache = getSourceLookupCache(); + cache.lookupVisibleDecls(AccessPath, Consumer, LookupKind); + assert(Cache.get() == &cache && "cache invalidated during lookup"); + return; + } FORWARD(lookupVisibleDecls, (AccessPath, Consumer, LookupKind)); } @@ -3524,7 +3537,6 @@ void ModuleDecl::clearLookupCache() { return; // Abandon any current cache. We'll rebuild it on demand. - Cache->invalidate(); Cache.reset(); } @@ -3944,9 +3956,6 @@ SynthesizedFileUnit &FileUnit::getOrCreateSynthesizedFile() { return *thisSynth; SynthesizedFile = new (getASTContext()) SynthesizedFileUnit(*this); SynthesizedFileAndKind.setPointer(SynthesizedFile); - // Rebuild the source lookup caches now that we have a synthesized file - // full of declarations to look into. - getParentModule()->clearLookupCache(); } return *SynthesizedFile; } diff --git a/lib/AST/NameLookup.cpp b/lib/AST/NameLookup.cpp index ca2162d7e504e..ca486fcf0daf0 100644 --- a/lib/AST/NameLookup.cpp +++ b/lib/AST/NameLookup.cpp @@ -172,7 +172,8 @@ void UsableFilteringDeclConsumer::foundDecl(ValueDecl *D, if (auto *contextD = DC->getAsDecl()) tmpLoc = contextD->getStartLoc(); } - if (!SM.isBeforeInBuffer(D->getLoc(), Loc)) + auto declLoc = DC->getParentModule()->getOriginalLocation(D->getLoc()).second; + if (!SM.isBeforeInBuffer(declLoc, tmpLoc)) return; } @@ -3875,20 +3876,48 @@ void FindLocalVal::visitBraceStmt(BraceStmt *S, bool isTopLevelCode) { return; } + // Visit inner statements first before reporting local decls in the current + // scope. for (auto elem : S->getElements()) { // If we have a SingleValueStmtExpr, there may be local bindings in the // wrapped statement. if (auto *E = elem.dyn_cast()) { if (auto *SVE = dyn_cast(E)) visit(SVE->getStmt()); + continue; } - if (auto *S = elem.dyn_cast()) + + if (auto *S = elem.dyn_cast()) { visit(S); + continue; + } } - for (auto elem : S->getElements()) { - if (auto *D = elem.dyn_cast()) { + + auto visitDecl = [&](Decl *D) { + if (auto *VD = dyn_cast(D)) + checkValueDecl(VD, DeclVisibilityKind::LocalVariable); + D->visitAuxiliaryDecls([&](Decl *D) { if (auto *VD = dyn_cast(D)) checkValueDecl(VD, DeclVisibilityKind::LocalVariable); + // FIXME: Recursively call `visitDecl` to handle nested macros. + }); + }; + + for (auto elem : S->getElements()) { + if (auto *E = elem.dyn_cast()) { + // 'MacroExpansionExpr' at code-item position may introduce value decls. + // NOTE: the expression must be type checked. + // FIXME: In code-completion local expressions are _not_ type checked. + if (auto *mee = dyn_cast(E)) { + if (auto *med = mee->getSubstituteDecl()) { + visitDecl(med); + } + } + continue; + } + if (auto *D = elem.dyn_cast()) { + visitDecl(D); + continue; } } } diff --git a/lib/SILOptimizer/Differentiation/LinearMapInfo.cpp b/lib/SILOptimizer/Differentiation/LinearMapInfo.cpp index fe9eddbd50fff..f469607de2758 100644 --- a/lib/SILOptimizer/Differentiation/LinearMapInfo.cpp +++ b/lib/SILOptimizer/Differentiation/LinearMapInfo.cpp @@ -117,6 +117,7 @@ LinearMapInfo::createBranchingTraceDecl(SILBasicBlock *originalBB, branchingTraceDecl->setAccess(AccessLevel::Internal); } file.addTopLevelDecl(branchingTraceDecl); + file.getParentModule()->clearLookupCache(); return branchingTraceDecl; } diff --git a/lib/Sema/LookupVisibleDecls.cpp b/lib/Sema/LookupVisibleDecls.cpp index ad39282fdea44..13ce71323ee96 100644 --- a/lib/Sema/LookupVisibleDecls.cpp +++ b/lib/Sema/LookupVisibleDecls.cpp @@ -217,17 +217,24 @@ static void collectVisibleMemberDecls(const DeclContext *CurrDC, LookupState LS, Type BaseType, IterableDeclContext *Parent, SmallVectorImpl &FoundDecls) { - for (auto Member : Parent->getMembers()) { - auto *VD = dyn_cast(Member); + auto check = [&](Decl *decl) { + auto *VD = dyn_cast(decl); if (!VD) - continue; + return; if (!isDeclVisibleInLookupMode(VD, LS, CurrDC)) - continue; + return; if (!evaluateOrDefault(CurrDC->getASTContext().evaluator, IsDeclApplicableRequest(DeclApplicabilityOwner(CurrDC, BaseType, VD)), false)) - continue; + return; FoundDecls.push_back(VD); + }; + + for (auto Member : Parent->getMembers()) { + check(Member); + Member->visitAuxiliaryDecls([&](Decl *d) { + check(d); + }); } } @@ -634,16 +641,6 @@ static void synthesizeMemberDeclsForLookup(NominalTypeDecl *NTD, false); } - // Expand peer macros. - for (auto *member : NTD->getMembers()) { - if (!ctx.evaluator.hasActiveRequest(ExpandPeerMacroRequest{member})) { - (void)evaluateOrDefault( - ctx.evaluator, - ExpandPeerMacroRequest{member}, - {}); - } - } - synthesizePropertyWrapperVariables(NTD); } diff --git a/test/IDE/complete_macros_expanded.swift b/test/IDE/complete_macros_expanded.swift new file mode 100644 index 0000000000000..dac410b133f37 --- /dev/null +++ b/test/IDE/complete_macros_expanded.swift @@ -0,0 +1,96 @@ +// REQUIRES: swift_swift_parser + +// RUN: %empty-directory(%t) +// RUN: mkdir -p %t/plugins + +//##-- Prepare the macro plugin. +// RUN: %host-build-swift -swift-version 5 -emit-library -o %t/plugins/%target-library-name(MacroDefinition) -module-name=MacroDefinition %S/../Macros/Inputs/syntax_macro_definitions.swift -g -no-toolchain-stdlib-rpath + +// RUN: %target-swift-ide-test -batch-code-completion -source-filename %s -filecheck %raw-FileCheck -completion-output-dir %t -plugin-path %t/plugins -parse-as-library + +@freestanding(declaration, names: named(A), named(B), named(foo), named(addOne)) +macro defineDeclsWithKnownNames() = #externalMacro(module: "MacroDefinition", type: "DefineDeclsWithKnownNamesMacro") + +@attached(peer, names: suffixed(_peer)) +macro PeerWithSuffix() = #externalMacro(module: "MacroDefinition", type: "PeerValueWithSuffixNameMacro") + +@attached(peer, names: arbitrary) +macro PeerWithSuffixAsArbitrary() = #externalMacro(module: "MacroDefinition", type: "PeerValueWithSuffixNameMacro") + +@freestanding(declaration, names: arbitrary) +macro VarValueDecl() = #externalMacro(module: "MacroDefinition", type: "VarValueMacro") + + +#defineDeclsWithKnownNames + +@PeerWithSuffix +func globalFunc() {} + +func test() { + #^GLOBAL^# +// GLOBAL-DAG: Decl[Struct]/CurrModule: A[#A#]; name=A +// GLOBAL-DAG: Decl[Struct]/CurrModule: B[#B#]; name=B +// GLOBAL-DAG: Decl[GlobalVar]/CurrModule: foo[#Int#]; name=foo +// GLOBAL-DAG: Decl[GlobalVar]/CurrModule: addOne[#(Int) -> Int#]; name=addOne +// GLOBAL-DAG: Decl[FreeFunction]/CurrModule: globalFunc()[#Void#]; name=globalFunc() +// GLOBAL-DAG: Decl[GlobalVar]/CurrModule: globalFunc_peer[#Int#]; name=globalFunc_peer +} + +struct MyStruct { + @PeerWithSuffix + func instanceMethod() {} + + @PeerWithSuffix + static func staticMethod() {} + + @PeerWithSuffixAsArbitrary + func forArbitrary() {} + + #defineDeclsWithKnownNames + + #VarValueDecl +} + +func testMemberInstance(value: MyStruct) { + value.#^MEMBER_INSTANCE^# +// MEMBER_INSTANCE-DAG: Keyword[self]/CurrNominal: self[#MyStruct#]; name=self +// MEMBER_INSTANCE-DAG: Decl[InstanceMethod]/CurrNominal: instanceMethod()[#Void#]; name=instanceMethod() +// MEMBER_INSTANCE-DAG: Decl[InstanceVar]/CurrNominal: instanceMethod_peer[#Int#]; name=instanceMethod_peer +// MEMBER_INSTANCE-DAG: Decl[InstanceVar]/CurrNominal: staticMethod_peer[#Int#]; name=staticMethod_peer +// MEMBER_INSTANCE-DAG: Decl[InstanceMethod]/CurrNominal: forArbitrary()[#Void#]; name=forArbitrary() +// MEMBER_INSTANCE-DAG: Decl[InstanceVar]/CurrNominal: forArbitrary_peer[#Int#]; name=forArbitrary_peer +// MEMBER_INSTANCE-DAG: Decl[InstanceVar]/CurrNominal: foo[#Int#]; name=foo +// MEMBER_INSTANCE-DAG: Decl[InstanceVar]/CurrNominal: addOne[#(Int) -> Int#]; name=addOne +// MEMBER_INSTANCE-DAG: Decl[InstanceVar]/CurrNominal: value[#Int#]; name=value +// NOTE: 'staticMethod_peer' is a instance var because the macro emits the decl without 'static' +} + +func testMemberStatic() { + MyStruct.#^MEMBER_STATIC^# +// MEMBER_STATIC-NOT: _peer +// MEMBER_STATIC-DAG: Keyword[self]/CurrNominal: self[#MyStruct.Type#]; name=self +// MEMBER_STATIC-DAG: Keyword/CurrNominal: Type[#MyStruct.Type#]; name=Type +// MEMBER_STATIC-DAG: Decl[Struct]/CurrNominal: A[#MyStruct.A#]; name=A +// MEMBER_STATIC-DAG: Decl[Struct]/CurrNominal: B[#MyStruct.B#]; name=B +// MEMBER_STATIC-DAG: Decl[InstanceMethod]/CurrNominal: instanceMethod({#(self): MyStruct#})[#() -> Void#]; name=instanceMethod(:) +// MEMBER_STATIC-DAG: Decl[StaticMethod]/CurrNominal: staticMethod()[#Void#]; name=staticMethod() +// MEMBER_STATIC-NOT: _peer +} + +func testLocal() { + #defineDeclsWithKnownNames + + @PeerWithSuffix func localFunc() {} + + do { + #^LOCAL?skip=FIXME^# +// FIXME: macros in replace function bodies are not handled correclty. +// FIXME: decls instroduced by #defineDeclsWithKnownNames are missing. +// LOCAL-DAG: Decl[FreeFunction]/Local: localFunc()[#Void#]; name=localFunc() +// LOCAL-DAG: Decl[LocalVar]/Local: localFunc_peer[#Int#]; name=localFunc_peer +// LOCAL-DAG: Decl[Struct]/Local: A[#A#]; name=A +// LOCAL-DAG: Decl[Struct]/Local: B[#B#]; name=B +// LOCAL-DAG: Decl[LocalVar]/Local: foo[#Int#]; name=foo +// LOCAL-DAG: Decl[LocalVar]/Local: addOne[#(Int) -> Int#]; name=addOne + } +} diff --git a/test/Macros/Inputs/syntax_macro_definitions.swift b/test/Macros/Inputs/syntax_macro_definitions.swift index 510602e35fc82..928e417792f6a 100644 --- a/test/Macros/Inputs/syntax_macro_definitions.swift +++ b/test/Macros/Inputs/syntax_macro_definitions.swift @@ -1626,3 +1626,16 @@ public struct InitializableMacro: ConformanceMacro, MemberMacro { return [requirement] } } + +public struct PeerValueWithSuffixNameMacro: PeerMacro { + public static func expansion( + of node: AttributeSyntax, + providingPeersOf declaration: some DeclSyntaxProtocol, + in context: some MacroExpansionContext + ) throws -> [DeclSyntax] { + guard let identified = declaration.asProtocol(IdentifiedDeclSyntax.self) else { + throw CustomError.message("Macro can only be applied to an identified declarations.") + } + return ["var \(raw: identified.identifier.text)_peer: Int { 1 }"] + } +} From 3e28a7c525a9801259b4f14d8ef9e35969f2c4cb Mon Sep 17 00:00:00 2001 From: Egor Zhdan Date: Thu, 22 Jun 2023 15:23:09 +0100 Subject: [PATCH 31/38] [cxx-interop] Make libstdc++ header and modulemap arch-independent This moves `libstdcxx.modulemap` and `libstdcxx.h` from `*.xctoolchain/usr/lib/swift/macosx/arm64e` to `*.xctoolchain/usr/lib/swift/macosx` to simplify distribution. rdar://110788977 --- lib/ClangImporter/ClangIncludePaths.cpp | 2 +- stdlib/public/Cxx/libstdcxx/CMakeLists.txt | 185 +++++++++--------- .../ClangImporter/ClangImporterTests.cpp | 11 +- 3 files changed, 96 insertions(+), 102 deletions(-) diff --git a/lib/ClangImporter/ClangIncludePaths.cpp b/lib/ClangImporter/ClangIncludePaths.cpp index 7fe8c626f8b64..0dd1f44675791 100644 --- a/lib/ClangImporter/ClangIncludePaths.cpp +++ b/lib/ClangImporter/ClangIncludePaths.cpp @@ -105,7 +105,7 @@ static Optional getLibStdCxxModuleMapPath( SearchPathOptions &opts, const llvm::Triple &triple, const llvm::IntrusiveRefCntPtr &vfs) { return getActualModuleMapPath("libstdcxx.modulemap", opts, triple, - /*isArchSpecific*/ true, vfs); + /*isArchSpecific*/ false, vfs); } Optional> diff --git a/stdlib/public/Cxx/libstdcxx/CMakeLists.txt b/stdlib/public/Cxx/libstdcxx/CMakeLists.txt index 4235d8e614b8e..40df28533fb3b 100644 --- a/stdlib/public/Cxx/libstdcxx/CMakeLists.txt +++ b/stdlib/public/Cxx/libstdcxx/CMakeLists.txt @@ -4,120 +4,115 @@ foreach(sdk ${SWIFT_SDKS}) continue() endif() - foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES}) - set(arch_suffix "${SWIFT_SDK_${sdk}_LIB_SUBDIR}-${arch}") - set(arch_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}") + set(module_dir "${SWIFTLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}") + set(module_dir_static "${SWIFTSTATICLIB_DIR}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}") - set(module_dir "${SWIFTLIB_DIR}/${arch_subdir}") - set(module_dir_static "${SWIFTSTATICLIB_DIR}/${arch_subdir}") + set(libstdcxx_header "libstdcxx.h") + set(libstdcxx_header_out "${module_dir}/libstdcxx.h") + set(libstdcxx_header_out_static "${module_dir_static}/libstdcxx.h") + set(libstdcxx_modulemap "libstdcxx.modulemap") + set(libstdcxx_modulemap_out "${module_dir}/libstdcxx.modulemap") + set(libstdcxx_modulemap_out_static "${module_dir_static}/libstdcxx.modulemap") - set(libstdcxx_header "libstdcxx.h") - set(libstdcxx_header_out "${module_dir}/libstdcxx.h") - set(libstdcxx_header_out_static "${module_dir_static}/libstdcxx.h") - set(libstdcxx_modulemap "libstdcxx.modulemap") - set(libstdcxx_modulemap_out "${module_dir}/libstdcxx.modulemap") - set(libstdcxx_modulemap_out_static "${module_dir_static}/libstdcxx.modulemap") + add_custom_command_target( + copy_libstdcxx_modulemap + COMMAND + "${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir} + COMMAND + "${CMAKE_COMMAND}" "-E" "copy_if_different" "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_modulemap}" "${libstdcxx_modulemap_out}" + OUTPUT ${libstdcxx_modulemap_out} + DEPENDS ${libstdcxx_modulemap} + COMMENT "Copying libstdcxx modulemap to resources") + list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_modulemap}) + add_dependencies(swift-stdlib-${SWIFT_SDK_${sdk}_LIB_SUBDIR} ${copy_libstdcxx_modulemap}) + add_custom_command_target( + copy_libstdcxx_header + COMMAND + "${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir} + COMMAND + "${CMAKE_COMMAND}" "-E" "copy_if_different" "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_header}" "${libstdcxx_header_out}" + OUTPUT ${libstdcxx_header_out} + DEPENDS ${libstdcxx_header} + COMMENT "Copying libstdcxx header to resources") + list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_header}) + add_dependencies(swift-stdlib-${SWIFT_SDK_${sdk}_LIB_SUBDIR} ${copy_libstdcxx_header}) + + if(SWIFT_BUILD_STATIC_STDLIB) add_custom_command_target( - copy_libstdcxx_modulemap + copy_libstdcxx_modulemap_static COMMAND - "${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir} + "${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir_static} COMMAND - "${CMAKE_COMMAND}" "-E" "copy_if_different" "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_modulemap}" "${libstdcxx_modulemap_out}" - OUTPUT ${libstdcxx_modulemap_out} - DEPENDS ${libstdcxx_modulemap} - COMMENT "Copying libstdcxx modulemap to resources") - list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_modulemap}) - add_dependencies(swift-stdlib-${arch_suffix} ${copy_libstdcxx_modulemap}) + "${CMAKE_COMMAND}" "-E" "copy_if_different" + "${libstdcxx_modulemap_out}" "${libstdcxx_modulemap_out_static}" + OUTPUT ${libstdcxx_modulemap_out_static} + DEPENDS ${copy_libstdcxx_modulemap} + COMMENT "Copying libstdcxx modulemap to static resources") + list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_modulemap_static}) + add_dependencies(swift-stdlib-${SWIFT_SDK_${sdk}_LIB_SUBDIR} ${copy_libstdcxx_modulemap_static}) add_custom_command_target( - copy_libstdcxx_header + copy_libstdcxx_header_static COMMAND - "${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir} + "${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir_static} COMMAND - "${CMAKE_COMMAND}" "-E" "copy_if_different" "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_header}" "${libstdcxx_header_out}" - OUTPUT ${libstdcxx_header_out} - DEPENDS ${libstdcxx_header} - COMMENT "Copying libstdcxx header to resources") - list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_header}) - add_dependencies(swift-stdlib-${arch_suffix} ${copy_libstdcxx_header}) - - if(SWIFT_BUILD_STATIC_STDLIB) - add_custom_command_target( - copy_libstdcxx_modulemap_static - COMMAND - "${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir_static} - COMMAND - "${CMAKE_COMMAND}" "-E" "copy_if_different" - "${libstdcxx_modulemap_out}" "${libstdcxx_modulemap_out_static}" - OUTPUT ${libstdcxx_modulemap_out_static} - DEPENDS ${copy_libstdcxx_modulemap} - COMMENT "Copying libstdcxx modulemap to static resources") - list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_modulemap_static}) - add_dependencies(swift-stdlib-${arch_suffix} ${copy_libstdcxx_modulemap_static}) + "${CMAKE_COMMAND}" "-E" "copy_if_different" + "${libstdcxx_header_out}" "${libstdcxx_header_out_static}" + OUTPUT ${libstdcxx_header_out_static} + DEPENDS ${copy_libstdcxx_header} + COMMENT "Copying libstdcxx header to static resources") + list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_header_static}) + add_dependencies(swift-stdlib-${SWIFT_SDK_${sdk}_LIB_SUBDIR} ${copy_libstdcxx_header_static}) + endif() - add_custom_command_target( - copy_libstdcxx_header_static - COMMAND - "${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir_static} - COMMAND - "${CMAKE_COMMAND}" "-E" "copy_if_different" - "${libstdcxx_header_out}" "${libstdcxx_header_out_static}" - OUTPUT ${libstdcxx_header_out_static} - DEPENDS ${copy_libstdcxx_header} - COMMENT "Copying libstdcxx header to static resources") - list(APPEND libstdcxx_modulemap_target_list ${copy_libstdcxx_header_static}) - add_dependencies(swift-stdlib-${arch_suffix} ${copy_libstdcxx_header_static}) - endif() + swift_install_in_component(FILES "${libstdcxx_modulemap_out}" + DESTINATION "lib/swift/${SWIFT_SDK_${sdk}_LIB_SUBDIR}" + COMPONENT sdk-overlay) + swift_install_in_component(FILES "${libstdcxx_header_out}" + DESTINATION "lib/swift/${SWIFT_SDK_${sdk}_LIB_SUBDIR}" + COMPONENT sdk-overlay) - swift_install_in_component(FILES "${libstdcxx_modulemap_out}" - DESTINATION "lib/swift/${arch_subdir}" + if(SWIFT_BUILD_STATIC_STDLIB) + swift_install_in_component(FILES "${libstdcxx_modulemap_out_static}" + DESTINATION "lib/swift_static/${SWIFT_SDK_${sdk}_LIB_SUBDIR}" COMPONENT sdk-overlay) - swift_install_in_component(FILES "${libstdcxx_header_out}" - DESTINATION "lib/swift/${arch_subdir}" + swift_install_in_component(FILES "${libstdcxx_header_out_static}" + DESTINATION "lib/swift_static/${SWIFT_SDK_${sdk}_LIB_SUBDIR}" COMPONENT sdk-overlay) + endif() - if(SWIFT_BUILD_STATIC_STDLIB) - swift_install_in_component(FILES "${libstdcxx_modulemap_out_static}" - DESTINATION "lib/swift_static/${arch_subdir}" - COMPONENT sdk-overlay) - swift_install_in_component(FILES "${libstdcxx_header_out_static}" - DESTINATION "lib/swift_static/${arch_subdir}" - COMPONENT sdk-overlay) - endif() - - if(${BOOTSTRAPPING_MODE} MATCHES "BOOTSTRAPPING.*") - foreach(bootstrapping "0" "1") - get_bootstrapping_path(bootstrapping_dir ${module_dir} ${bootstrapping}) - set(libstdcxx_modulemap_out_bootstrapping "${bootstrapping_dir}/libstdcxx.modulemap") - set(libstdcxx_header_out_bootstrapping "${bootstrapping_dir}/libstdcxx.h") + if(${BOOTSTRAPPING_MODE} MATCHES "BOOTSTRAPPING.*") + foreach(bootstrapping "0" "1") + get_bootstrapping_path(bootstrapping_dir ${module_dir} ${bootstrapping}) + set(libstdcxx_modulemap_out_bootstrapping "${bootstrapping_dir}/libstdcxx.modulemap") + set(libstdcxx_header_out_bootstrapping "${bootstrapping_dir}/libstdcxx.h") - add_custom_command_target(unused_var - COMMAND - "${CMAKE_COMMAND}" "-E" "make_directory" "${bootstrapping_dir}" - COMMAND - "${CMAKE_COMMAND}" "-E" "copy_if_different" - "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_modulemap}" "${libstdcxx_modulemap_out_bootstrapping}" + add_custom_command_target(unused_var + COMMAND + "${CMAKE_COMMAND}" "-E" "make_directory" "${bootstrapping_dir}" + COMMAND + "${CMAKE_COMMAND}" "-E" "copy_if_different" + "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_modulemap}" "${libstdcxx_modulemap_out_bootstrapping}" - CUSTOM_TARGET_NAME "copy-libstdcxx-modulemap-bootstrapping${bootstrapping}" - OUTPUT "${libstdcxx_modulemap_out_bootstrapping}" - DEPENDS ${libstdcxx_modulemap} - COMMENT "Copying libstdcxx modulemap to resources for bootstrapping${bootstrapping}") + CUSTOM_TARGET_NAME "copy-libstdcxx-modulemap-bootstrapping${bootstrapping}" + OUTPUT "${libstdcxx_modulemap_out_bootstrapping}" + DEPENDS ${libstdcxx_modulemap} + COMMENT "Copying libstdcxx modulemap to resources for bootstrapping${bootstrapping}") - add_custom_command_target(unused_var - COMMAND - "${CMAKE_COMMAND}" "-E" "make_directory" "${bootstrapping_dir}" - COMMAND - "${CMAKE_COMMAND}" "-E" "copy_if_different" - "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_header}" "${libstdcxx_header_out_bootstrapping}" + add_custom_command_target(unused_var + COMMAND + "${CMAKE_COMMAND}" "-E" "make_directory" "${bootstrapping_dir}" + COMMAND + "${CMAKE_COMMAND}" "-E" "copy_if_different" + "${CMAKE_CURRENT_SOURCE_DIR}/${libstdcxx_header}" "${libstdcxx_header_out_bootstrapping}" - CUSTOM_TARGET_NAME "copy-libstdcxx-header-bootstrapping${bootstrapping}" - OUTPUT "${libstdcxx_header_out_bootstrapping}" - DEPENDS ${libstdcxx_header} - COMMENT "Copying libstdcxx header to resources for bootstrapping${bootstrapping}") - endforeach() - endif() - endforeach() + CUSTOM_TARGET_NAME "copy-libstdcxx-header-bootstrapping${bootstrapping}" + OUTPUT "${libstdcxx_header_out_bootstrapping}" + DEPENDS ${libstdcxx_header} + COMMENT "Copying libstdcxx header to resources for bootstrapping${bootstrapping}") + endforeach() + endif() endforeach() add_custom_target(libstdcxx-modulemap DEPENDS ${libstdcxx_modulemap_target_list}) set_property(TARGET libstdcxx-modulemap PROPERTY FOLDER "Miscellaneous") diff --git a/unittests/ClangImporter/ClangImporterTests.cpp b/unittests/ClangImporter/ClangImporterTests.cpp index eeca5587b3708..8bbcad21c8921 100644 --- a/unittests/ClangImporter/ClangImporterTests.cpp +++ b/unittests/ClangImporter/ClangImporterTests.cpp @@ -157,8 +157,7 @@ struct LibStdCxxInjectionVFS { // Add a libstdc++ modulemap that's part of Swift's distribution. LibStdCxxInjectionVFS &libstdCxxModulemap(StringRef contents = "") { - newFile("/usr/lib/swift/" + osString + "/" + archString + - "/libstdcxx.modulemap", + newFile("/usr/lib/swift/" + osString + "/libstdcxx.modulemap", contents.empty() ? getLibstdcxxModulemapContents() : contents); return *this; } @@ -210,11 +209,11 @@ TEST(ClangImporterTest, libStdCxxInjectionTest) { EXPECT_EQ(paths.redirectedFiles[0].first, "/opt/rh/devtoolset-9/root/usr/include/c++/9/libstdcxx.h"); EXPECT_EQ(paths.redirectedFiles[0].second, - "/usr/lib/swift/linux/x86_64/libstdcxx.h"); + "/usr/lib/swift/linux/libstdcxx.h"); EXPECT_EQ(paths.redirectedFiles[1].first, "/opt/rh/devtoolset-9/root/usr/include/c++/9/module.modulemap"); EXPECT_EQ(paths.redirectedFiles[1].second, - "/usr/lib/swift/linux/x86_64/libstdcxx.modulemap"); + "/usr/lib/swift/linux/libstdcxx.modulemap"); } { @@ -226,7 +225,7 @@ TEST(ClangImporterTest, libStdCxxInjectionTest) { EXPECT_EQ(paths.redirectedFiles[0].first, "/opt/rh/devtoolset-9/root/usr/include/c++/9/libstdcxx.h"); EXPECT_EQ(paths.redirectedFiles[0].second, - "/usr/lib/swift/linux/x86_64/libstdcxx.h"); + "/usr/lib/swift/linux/libstdcxx.h"); EXPECT_EQ(paths.overridenFiles[0].first, "/opt/rh/devtoolset-9/root/usr/include/c++/9/module.modulemap"); EXPECT_NE(paths.overridenFiles[0].second.find( @@ -252,7 +251,7 @@ TEST(ClangImporterTest, libStdCxxInjectionTest) { EXPECT_EQ(paths.redirectedFiles[0].first, "/opt/rh/devtoolset-9/root/usr/include/c++/9/libstdcxx.h"); EXPECT_EQ(paths.redirectedFiles[0].second, - "/usr/lib/swift/linux/x86_64/libstdcxx.h"); + "/usr/lib/swift/linux/libstdcxx.h"); EXPECT_EQ(paths.overridenFiles[0].first, "/opt/rh/devtoolset-9/root/usr/include/c++/9/module.modulemap"); EXPECT_NE( From 037ddc92ee16e825c2bdcec52047833cdee02090 Mon Sep 17 00:00:00 2001 From: Ben Barham Date: Wed, 21 Jun 2023 18:02:39 -0700 Subject: [PATCH 32/38] [CursorInfo] Re-use already built ASTs ahead of currently building ones Resolves rdar://110344363. --- .../CursorInfo/cursor_after_edit.swift | 4 +- .../lib/SwiftLang/SwiftASTManager.cpp | 47 +++++++++++++++---- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/test/SourceKit/CursorInfo/cursor_after_edit.swift b/test/SourceKit/CursorInfo/cursor_after_edit.swift index 0ceb0cec5efc1..518d01cc6c8a0 100644 --- a/test/SourceKit/CursorInfo/cursor_after_edit.swift +++ b/test/SourceKit/CursorInfo/cursor_after_edit.swift @@ -8,4 +8,6 @@ // RUN: %sourcekitd-test \ // RUN: -req=open -text-input %t/empty.swift %t/func.swift -- %t/func.swift == \ // RUN: -req=edit -offset=0 -length=0 -replace="func foo() {}" -req-opts=enablesyntaxmap=0,enablesubstructure=0,enablediagnostics=0 %t/func.swift -- %t/func.swift == \ -// RUN: -req=cursor -offset=5 %t/func.swift -- %t/func.swift +// RUN: -req=cursor -offset=5 %t/func.swift -- %t/func.swift == \ +// RUN: -req=edit -offset=0 -length=0 -replace="// some comment\n" -req-opts=enablesyntaxmap=0,enablesubstructure=0,enablediagnostics=0 %t/func.swift -- %t/func.swift == \ +// RUN: -req=cursor -offset=21 %t/func.swift -- %t/func.swift diff --git a/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp b/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp index a050676ed4bb4..b0218520ae5ce 100644 --- a/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp +++ b/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp @@ -1219,14 +1219,41 @@ bool ASTBuildOperation::addConsumer(SwiftASTConsumerRef Consumer) { return true; } +/// Returns a build operation that `Consumer` can use, in order of the +/// following: +/// 1. The latest finished build operation that either exactly matches, or +/// can be used with snapshots +/// 2. If none, the latest in-progress build operation with the same +/// conditions +/// 3. `nullptr` otherwise ASTBuildOperationRef ASTProducer::getBuildOperationForConsumer( SwiftASTConsumerRef Consumer, IntrusiveRefCntPtr FileSystem, SwiftASTManagerRef Mgr) { + ASTBuildOperationRef LatestUsableOp; + Statistic *StatCount = nullptr; for (auto &BuildOp : llvm::reverse(BuildOperations)) { - if (BuildOp->isCancelled()) { + if (BuildOp->isCancelled()) + continue; + + // No point checking for a match, we already have one - we're just looking + // for a finished operation that can be used with the file contents of + // `BuildOp` at this point (which we will prefer over an incomplete + // operation, whether that exactly matches or not). + if (LatestUsableOp && !BuildOp->isFinished()) + continue; + + // Check for an exact match + if (BuildOp->matchesSourceState(FileSystem)) { + LatestUsableOp = BuildOp; + StatCount = &Mgr->Impl.Stats->numASTCacheHits; + if (BuildOp->isFinished()) + break; continue; } + + // Check for whether the operation can be used taking into account + // snapshots std::vector Snapshots; Snapshots.reserve(BuildOp->getFileContents().size()); for (auto &FileContent : BuildOp->getFileContents()) { @@ -1234,15 +1261,19 @@ ASTBuildOperationRef ASTProducer::getBuildOperationForConsumer( Snapshots.push_back(FileContent.Snapshot); } } - if (BuildOp->matchesSourceState(FileSystem)) { - ++Mgr->Impl.Stats->numASTCacheHits; - return BuildOp; - } else if (Consumer->canUseASTWithSnapshots(Snapshots)) { - ++Mgr->Impl.Stats->numASTsUsedWithSnapshots; - return BuildOp; + + if (Consumer->canUseASTWithSnapshots(Snapshots)) { + LatestUsableOp = BuildOp; + StatCount = &Mgr->Impl.Stats->numASTsUsedWithSnapshots; + if (BuildOp->isFinished()) + break; } } - return nullptr; + + if (StatCount) { + ++(*StatCount); + } + return LatestUsableOp; } void ASTProducer::enqueueConsumer( From a92deb070d7c38cf351f017d760fa4a973efd945 Mon Sep 17 00:00:00 2001 From: Angela Laar Date: Wed, 21 Jun 2023 14:08:48 -0700 Subject: [PATCH 33/38] [GenericSignature] Exclude GenericParam Constraints Only preserve primary associated types during type erasure if the generic context does not contain outer generic prameters. i.e. Given `func foo { ... any P ... }` getNonDependentUpperBounds() should produce any P However, given `func foo { ... any P ... }` getNonDependentUpperBounds() should produce any P Fixes rdar://110262754 --- lib/AST/GenericSignature.cpp | 2 +- test/Constraints/opened_existentials.swift | 51 +++++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/lib/AST/GenericSignature.cpp b/lib/AST/GenericSignature.cpp index a2063b2334069..6fde0c9387f06 100644 --- a/lib/AST/GenericSignature.cpp +++ b/lib/AST/GenericSignature.cpp @@ -697,7 +697,7 @@ Type GenericSignatureImpl::getUpperBound(Type type, abort(); } - if (!hasInnerGenericParam) + if (!hasInnerGenericParam && (wantDependentBound || !hasOuterGenericParam)) argTypes.push_back(reducedType); } diff --git a/test/Constraints/opened_existentials.swift b/test/Constraints/opened_existentials.swift index d1942c9cc19f2..0513187da4f0b 100644 --- a/test/Constraints/opened_existentials.swift +++ b/test/Constraints/opened_existentials.swift @@ -1,4 +1,4 @@ -// RUN: %target-typecheck-verify-swift +// RUN: %target-typecheck-verify-swift -disable-availability-checking protocol Q { } @@ -369,3 +369,52 @@ func testPrimaryAssocReturn(p: any P4) { func testPrimaryAssocCollection(p: any P4) { let _: any Collection = p.returnAssocTypeCollection() } + +protocol P5 { + associatedtype X = Void +} + +struct K: P5 { + typealias X = T +} + +extension P5 { + @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) + func foo() -> some P5{ + K() + } + func bar(_ handler: @escaping (X) -> Void) -> some P5 { + K() + } +} + +@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) +func testFoo(_ p: any P5) -> any P5 { + p.foo() +} + +func testFooGeneric(_ p: any P5>) -> any P5 { + p.foo() +} + +@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) +func testBar(_ p: any P5>) -> any P5 { + p.bar { _ in } +} + +enum Node { + case e(any P5) + case f(any P5>) +} + +struct S { + @available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) + func foo(_ elt: Node) -> Node? { + switch elt { + case let .e(p): + return .e(p) + case let .f(p): + return .e(p.bar { _ in }) + } + } +} From a0fa946e10faed791a81fbcb13a36f89eb7b3b37 Mon Sep 17 00:00:00 2001 From: Ben Barham Date: Thu, 22 Jun 2023 16:31:03 -0700 Subject: [PATCH 34/38] [Completion] Add targetEnvironment(macCatalyst) platform condition Resolves rdar://110870396. --- lib/IDE/CodeCompletion.cpp | 3 +++ test/IDE/complete_pound_directive.swift | 1 + 2 files changed, 4 insertions(+) diff --git a/lib/IDE/CodeCompletion.cpp b/lib/IDE/CodeCompletion.cpp index 1123d0c2afc94..3c19c2a0f3ad2 100644 --- a/lib/IDE/CodeCompletion.cpp +++ b/lib/IDE/CodeCompletion.cpp @@ -1204,6 +1204,9 @@ static void addPlatformConditions(CodeCompletionResultSink &Sink) { addWithName("targetEnvironment", [](CodeCompletionResultBuilder &Builder) { Builder.addTextChunk("simulator"); }); + addWithName("targetEnvironment", [](CodeCompletionResultBuilder &Builder) { + Builder.addTextChunk("macCatalyst"); + }); addWithName("swift", [](CodeCompletionResultBuilder &Builder) { Builder.addTextChunk(">="); Builder.addSimpleNamedParameter("version"); diff --git a/test/IDE/complete_pound_directive.swift b/test/IDE/complete_pound_directive.swift index d823357e2ae15..a721d71f75d8f 100644 --- a/test/IDE/complete_pound_directive.swift +++ b/test/IDE/complete_pound_directive.swift @@ -51,6 +51,7 @@ class C { // CONDITION-DAG: Pattern/CurrModule/Flair[ExprSpecific]: arch({#(name)#}); name=arch(); sourcetext=arch(<#T##name#>) // CONDITION-DAG: Pattern/CurrModule/Flair[ExprSpecific]: canImport({#(module)#}); name=canImport(); sourcetext=canImport(<#T##module#>) // CONDITION-DAG: Pattern/CurrModule/Flair[ExprSpecific]: targetEnvironment(simulator); name=targetEnvironment(simulator); sourcetext=targetEnvironment(simulator) +// CONDITION-DAG: Pattern/CurrModule/Flair[ExprSpecific]: targetEnvironment(macCatalyst); name=targetEnvironment(macCatalyst); sourcetext=targetEnvironment(macCatalyst) // CONDITION-DAG: Pattern/CurrModule/Flair[ExprSpecific]: swift(>={#(version)#}); name=swift(>=); sourcetext=swift(>=<#T##version#>) // CONDITION-DAG: Pattern/CurrModule/Flair[ExprSpecific]: swift(<{#(version)#}); name=swift(<); sourcetext=swift(<<#T##version#>) // CONDITION-DAG: Pattern/CurrModule/Flair[ExprSpecific]: compiler(>={#(version)#}); name=compiler(>=); sourcetext=compiler(>=<#T##version#>) From 36ddb77fcdcc47b0d5166712d66a7be04fb6ff80 Mon Sep 17 00:00:00 2001 From: Dario Rexin Date: Thu, 22 Jun 2023 19:07:50 -0700 Subject: [PATCH 35/38] [IRGen+Runtime] Layout string getEnumTag for generic multi payload enums (#66872) We already store all necessary information to extract the tag in the layout string, so we should utilize it for the getEnumTag witness --- include/swift/Runtime/RuntimeFunctions.def | 10 ++++++ lib/IRGen/GenValueWitness.cpp | 24 +++++++++++++- stdlib/public/runtime/BytecodeLayouts.cpp | 32 ++++++++++++++++++- stdlib/public/runtime/BytecodeLayouts.h | 25 +++++++++++---- ...out_string_witnesses_types_resilient.swift | 13 +++++++- .../layout_string_witnesses_dynamic.swift | 14 ++++++++ 6 files changed, 109 insertions(+), 9 deletions(-) diff --git a/include/swift/Runtime/RuntimeFunctions.def b/include/swift/Runtime/RuntimeFunctions.def index 518ee17fb1f05..bb47fbacc7ee6 100644 --- a/include/swift/Runtime/RuntimeFunctions.def +++ b/include/swift/Runtime/RuntimeFunctions.def @@ -2315,6 +2315,16 @@ FUNCTION(GenericInitWithTake, ATTRS(NoUnwind), EFFECT(Refcounting)) +// unsigned swift_multiPayloadEnumGeneric_getEnumTag(opaque* address, +// const Metadata *type); +FUNCTION(MultiPayloadEnumGenericGetEnumTag, + swift_multiPayloadEnumGeneric_getEnumTag, + C_CC, AlwaysAvailable, + RETURNS(Int32Ty), + ARGS(Int8PtrTy, TypeMetadataPtrTy), + ATTRS(NoUnwind), + EFFECT(NoEffect)) + // void swift_generic_instantiateLayoutString(const uint8_t* layoutStr, Metadata* type); FUNCTION(GenericInstantiateLayoutString, swift_generic_instantiateLayoutString, diff --git a/lib/IRGen/GenValueWitness.cpp b/lib/IRGen/GenValueWitness.cpp index b43fed1df5626..c5b823daf0ab3 100644 --- a/lib/IRGen/GenValueWitness.cpp +++ b/lib/IRGen/GenValueWitness.cpp @@ -1113,7 +1113,29 @@ static void addValueWitness(IRGenModule &IGM, ConstantStructBuilder &B, goto standard; } - case ValueWitness::GetEnumTag: + case ValueWitness::GetEnumTag: { + assert(concreteType.getEnumOrBoundGenericEnum()); + + if (IGM.Context.LangOpts.hasFeature(Feature::LayoutStringValueWitnesses) && + IGM.getOptions().EnableLayoutStringValueWitnesses) { + auto ty = boundGenericCharacteristics + ? boundGenericCharacteristics->concreteType + : concreteType; + auto &typeInfo = boundGenericCharacteristics + ? *boundGenericCharacteristics->TI + : concreteTI; + if (auto *typeLayoutEntry = typeInfo.buildTypeLayoutEntry( + IGM, ty, /*useStructLayouts*/ true)) { + if (auto *enumLayoutEntry = typeLayoutEntry->getAsEnum()) { + if (enumLayoutEntry->isMultiPayloadEnum() && + !typeLayoutEntry->isFixedSize(IGM)) { + return addFunction(IGM.getMultiPayloadEnumGenericGetEnumTagFn()); + } + } + } + } + goto standard; + } case ValueWitness::DestructiveProjectEnumData: case ValueWitness::DestructiveInjectEnumTag: assert(concreteType.getEnumOrBoundGenericEnum()); diff --git a/stdlib/public/runtime/BytecodeLayouts.cpp b/stdlib/public/runtime/BytecodeLayouts.cpp index a2bfa2d7466c4..ad3cb4123c35f 100644 --- a/stdlib/public/runtime/BytecodeLayouts.cpp +++ b/stdlib/public/runtime/BytecodeLayouts.cpp @@ -18,6 +18,7 @@ #include "BytecodeLayouts.h" #include "../SwiftShims/swift/shims/HeapObject.h" +#include "EnumImpl.h" #include "WeakReference.h" #include "swift/ABI/MetadataValues.h" #include "swift/ABI/System.h" @@ -160,7 +161,7 @@ inline static void handleRefCounts(const Metadata *metadata, Params... params) { std::forward(params)...); } -static uint64_t readTagBytes(uint8_t *addr, uint8_t byteCount) { +static uint64_t readTagBytes(const uint8_t *addr, uint8_t byteCount) { switch (byteCount) { case 1: return addr[0]; @@ -651,6 +652,35 @@ swift_generic_assignWithTake(swift::OpaqueValue *dest, swift::OpaqueValue *src, return swift_generic_initWithTake(dest, src, metadata); } +extern "C" unsigned +swift_multiPayloadEnumGeneric_getEnumTag(swift::OpaqueValue *address, + const Metadata *metadata) { + auto addr = reinterpret_cast(address); + LayoutStringReader reader{metadata->getLayoutString(), + layoutStringHeaderSize + sizeof(uint64_t)}; + + auto tagBytes = reader.readBytes(); + auto numPayloads = reader.readBytes(); + reader.skip(sizeof(size_t)); + auto enumSize = reader.readBytes(); + auto payloadSize = enumSize - tagBytes; + + auto enumTag = (unsigned)readTagBytes(addr + payloadSize, tagBytes); + if (enumTag < numPayloads) { + return enumTag; + } + + auto payloadValue = loadEnumElement(addr, payloadSize); + + if (payloadSize >= 4) { + return numPayloads + payloadValue; + } else { + unsigned numPayloadBits = payloadSize * CHAR_BIT; + return (payloadValue | (enumTag - numPayloads) << numPayloadBits) + + numPayloads; + } +} + void swift::swift_resolve_resilientAccessors(uint8_t *layoutStr, size_t layoutStrOffset, const uint8_t *fieldLayoutStr, diff --git a/stdlib/public/runtime/BytecodeLayouts.h b/stdlib/public/runtime/BytecodeLayouts.h index 3e76fe7a9cae9..6a1b83f01f50c 100644 --- a/stdlib/public/runtime/BytecodeLayouts.h +++ b/stdlib/public/runtime/BytecodeLayouts.h @@ -94,17 +94,30 @@ struct LayoutStringWriter { }; SWIFT_RUNTIME_EXPORT -void swift_generic_destroy(swift::OpaqueValue *address, const Metadata *metadata); +void swift_generic_destroy(swift::OpaqueValue *address, + const Metadata *metadata); SWIFT_RUNTIME_EXPORT -swift::OpaqueValue *swift_generic_assignWithCopy(swift::OpaqueValue *dest, swift::OpaqueValue *src, const Metadata *metadata); +swift::OpaqueValue *swift_generic_assignWithCopy(swift::OpaqueValue *dest, + swift::OpaqueValue *src, + const Metadata *metadata); SWIFT_RUNTIME_EXPORT -swift::OpaqueValue *swift_generic_assignWithTake(swift::OpaqueValue *dest, swift::OpaqueValue *src, const Metadata *metadata); +swift::OpaqueValue *swift_generic_assignWithTake(swift::OpaqueValue *dest, + swift::OpaqueValue *src, + const Metadata *metadata); SWIFT_RUNTIME_EXPORT -swift::OpaqueValue *swift_generic_initWithCopy(swift::OpaqueValue *dest, swift::OpaqueValue *src, const Metadata *metadata); +swift::OpaqueValue *swift_generic_initWithCopy(swift::OpaqueValue *dest, + swift::OpaqueValue *src, + const Metadata *metadata); SWIFT_RUNTIME_EXPORT -swift::OpaqueValue *swift_generic_initWithTake(swift::OpaqueValue *dest, swift::OpaqueValue *src, const Metadata *metadata); +swift::OpaqueValue *swift_generic_initWithTake(swift::OpaqueValue *dest, + swift::OpaqueValue *src, + const Metadata *metadata); SWIFT_RUNTIME_EXPORT -void swift_generic_instantiateLayoutString(const uint8_t *layoutStr, Metadata *type); +unsigned swift_multiPayloadEnumGeneric_getEnumTag(swift::OpaqueValue *address, + const Metadata *metadata); +SWIFT_RUNTIME_EXPORT +void swift_generic_instantiateLayoutString(const uint8_t *layoutStr, + Metadata *type); void swift_resolve_resilientAccessors(uint8_t *layoutStr, size_t layoutStrOffset, diff --git a/test/Interpreter/Inputs/layout_string_witnesses_types_resilient.swift b/test/Interpreter/Inputs/layout_string_witnesses_types_resilient.swift index 7dccdbe6c1630..581c6058d87b2 100644 --- a/test/Interpreter/Inputs/layout_string_witnesses_types_resilient.swift +++ b/test/Interpreter/Inputs/layout_string_witnesses_types_resilient.swift @@ -17,4 +17,15 @@ public struct GenericResilient { self.x = x self.y = y } -} \ No newline at end of file +} + +public enum ResilientMultiPayloadEnum { + case empty0 + case empty1 + case nonEmpty0(AnyObject) + case nonEmpty1(T) +} + +public func getResilientMultiPayloadEnumEmpty0(_ t: T.Type) -> ResilientMultiPayloadEnum { + return .empty0 +} diff --git a/test/Interpreter/layout_string_witnesses_dynamic.swift b/test/Interpreter/layout_string_witnesses_dynamic.swift index 49b98a2abd48d..43e528be75bd0 100644 --- a/test/Interpreter/layout_string_witnesses_dynamic.swift +++ b/test/Interpreter/layout_string_witnesses_dynamic.swift @@ -516,6 +516,20 @@ func testGenericSinglePayloadEnumManyXI() { testGenericSinglePayloadEnumManyXI() +func testResilientMultiPayloadEnumTag() { + let x = switch getResilientMultiPayloadEnumEmpty0(AnyObject.self) { + case .nonEmpty0: 0 + case .nonEmpty1: 1 + case .empty0: 2 + case .empty1: 3 + } + + // CHECK: Enum case: 2 + print("Enum case: \(x)") +} + +testResilientMultiPayloadEnumTag() + #if os(macOS) import Foundation From dc60c07b5646894586224104c6d20e88f949d023 Mon Sep 17 00:00:00 2001 From: Felipe de Azevedo Piovezan Date: Fri, 23 Jun 2023 07:17:48 -0400 Subject: [PATCH 36/38] [DebugInfo] Disable failing tests on watchOS Two new tests were added in #66448, and they both fail for watchOS: 1. debug_fragment_merge.sil fails on 32 bit architectures because the offset calculation is different for those (fragments of 32 bits, instead of 64). 2. debug_fragment_merge.swift is failing for unknown reasons at this point, there is simply no SIL debug information generated for the variable "data". Since the original patch didn't change SILGen, this is not a regression. --- test/IRGen/debug_fragment_merge.sil | 5 +++++ test/IRGen/debug_fragment_merge.swift | 2 ++ 2 files changed, 7 insertions(+) diff --git a/test/IRGen/debug_fragment_merge.sil b/test/IRGen/debug_fragment_merge.sil index e794007d99bb8..b27338916d439 100644 --- a/test/IRGen/debug_fragment_merge.sil +++ b/test/IRGen/debug_fragment_merge.sil @@ -1,5 +1,10 @@ // RUN: %target-swift-frontend -disable-availability-checking -primary-file %s -emit-ir -disable-llvm-optzns -O -g | %FileCheck %s +// Checking the below on 32 bit architectures would be cumbersome: each +// fragment is 32 bits long, which changes the number of checks as well as the +// arithmethic on the bounds of each fragment. +// UNSUPPORTED: OS=watchos + // CHECK-DAG: llvm.dbg.value{{.*}} metadata ![[VAR:[0-9]+]], metadata !DIExpression(DW_OP_LLVM_fragment, 192, 64){{.*}} !dbg ![[LOC1:[0-9]+]] // CHECK-DAG: llvm.dbg.value{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 128, 64){{.*}} !dbg ![[LOC1]] // CHECK-DAG: llvm.dbg.value{{.*}} metadata ![[VAR]], metadata !DIExpression(DW_OP_LLVM_fragment, 64, 64){{.*}} !dbg ![[LOC1]] diff --git a/test/IRGen/debug_fragment_merge.swift b/test/IRGen/debug_fragment_merge.swift index ae373691ac62f..b7663b5c2915e 100644 --- a/test/IRGen/debug_fragment_merge.swift +++ b/test/IRGen/debug_fragment_merge.swift @@ -1,6 +1,8 @@ // RUN: %target-swift-frontend -disable-availability-checking -primary-file %s -emit-sil -O -g | %FileCheck %s --check-prefix CHECK-SIL // RUN: %target-swift-frontend -disable-availability-checking -primary-file %s -emit-ir -disable-llvm-optzns -O -g | %FileCheck %s +// UNSUPPORTED: OS=watchos + protocol External { func use(str: String); func decode(_: T.Type) -> T From 511c3445777dbfe1e34b3f19eb0f141989826bb0 Mon Sep 17 00:00:00 2001 From: Michael Buch Date: Fri, 23 Jun 2023 12:32:32 +0100 Subject: [PATCH 37/38] [Build] Introduce --lldb-configure-tests option We recently changed the build-script to stop configuring LLDB tests if `SKIP_TESTS_LLDB` is set (see rdar://109774179 and https://github.com/apple/swift/pull/66171). A common use-case is to build lldb without `-t` (to avoid running the tests) and then run the tests separately later. However, if we don't specify the `-t` flag to the build-script, `SKIP_TESTS_LLDB` is implicitly set. Meaning this multi-step way of running lldb tests regressed. This patch addresses this by creating a new `--lldb-configure-tests` option which when set makes sure we set the CMake variable `LLDB_INCLUDE_TESTS` (which will be the default behaviour). The preset for which we originally introduced the `SKIP_TESTS_LLDB` check now sets this new option to `0` to avoid configuring LLDB tests. The preset skips running the tests anyway, we're not losing test coverage. --- utils/build-presets.ini | 4 ++++ utils/build-script-impl | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/utils/build-presets.ini b/utils/build-presets.ini index a41f554a172d2..2e3d5a4d97a43 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -1416,6 +1416,10 @@ mixin-preset= skip-test-lldb skip-test-playgroundsupport +# Don't configure LLDB tests either since that +# would require us to build libcxx (rdar://109774179) +lldb-configure-tests=0 + [preset: buildbot_osx_package,use_os_runtime] mixin-preset= buildbot_osx_package diff --git a/utils/build-script-impl b/utils/build-script-impl index 7569f806b1af1..b7907324ac03c 100755 --- a/utils/build-script-impl +++ b/utils/build-script-impl @@ -174,6 +174,7 @@ KNOWN_SETTINGS=( lldb-test-swift-compatibility "" "specify additional Swift compilers to test lldb with" lldb-test-swift-only "0" "when running lldb tests, only include Swift-specific tests" lldb-use-system-debugserver "" "don't try to codesign debugserver, and use the system's debugserver instead" + lldb-configure-tests "1" "if set, will make sure we configure LLDB's test target without running the tests" ## LLVM Options llvm-enable-lto "" "Must be set to one of 'thin' or 'full'" @@ -2197,7 +2198,7 @@ for host in "${ALL_HOSTS[@]}"; do DOTEST_ARGS="${DOTEST_ARGS};-E;${DOTEST_EXTRA}" fi - if [[ "${SKIP_TEST_LLDB}" ]]; then + if [[ $(true_false "${LLDB_CONFIGURE_TESTS}") == "FALSE" ]]; then should_configure_tests="FALSE" else should_configure_tests=$(false_true ${BUILD_TOOLCHAIN_ONLY}) From e9ff3347782a87350be1a5b7f92795a26abc0871 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Fri, 23 Jun 2023 09:58:17 -0700 Subject: [PATCH 38/38] Fix missing indexing data with overloaded type (#65729) When you have a type that's ambiguous because it's defined in 2 imported modules, but you don't have to disambiguate by using the module name, previously no index references were produced. Now most are for the common case, but notably nested type constructors and generics still aren't emitted, partially because of https://github.com/apple/swift/issues/65726 Fixes: https://github.com/apple/swift/issues/64598 --- include/swift/AST/TypeRepr.h | 28 ++++++++++++ include/swift/AST/TypeReprNodes.def | 3 +- lib/AST/ASTDumper.cpp | 16 +++++++ lib/AST/ASTWalker.cpp | 4 ++ lib/AST/NameLookup.cpp | 2 + lib/AST/TypeRepr.cpp | 5 +++ lib/IDE/SourceEntityWalker.cpp | 16 +++++-- lib/Migrator/APIDiffMigratorPass.cpp | 4 ++ lib/Sema/CSApply.cpp | 18 +++++--- lib/Sema/PreCheckExpr.cpp | 2 +- lib/Sema/TypeCheckType.cpp | 4 ++ test/Index/index_ambiguous_type.swift | 62 +++++++++++++++++++++++++++ 12 files changed, 153 insertions(+), 11 deletions(-) create mode 100644 test/Index/index_ambiguous_type.swift diff --git a/include/swift/AST/TypeRepr.h b/include/swift/AST/TypeRepr.h index 0a0985cd5347e..151cafa8c1c3f 100644 --- a/include/swift/AST/TypeRepr.h +++ b/include/swift/AST/TypeRepr.h @@ -1176,6 +1176,33 @@ class FixedTypeRepr : public TypeRepr { friend class TypeRepr; }; +/// A TypeRepr for uses of 'Self' in the type of a declaration. +class SelfTypeRepr : public TypeRepr { + Type Ty; + SourceLoc Loc; + +public: + SelfTypeRepr(Type Ty, SourceLoc Loc) + : TypeRepr(TypeReprKind::Self), Ty(Ty), Loc(Loc) {} + + /// Retrieve the location. + SourceLoc getLoc() const { return Loc; } + + /// Retrieve the fixed type. + Type getType() const { return Ty; } + + static bool classof(const TypeRepr *T) { + return T->getKind() == TypeReprKind::Self; + } + static bool classof(const SelfTypeRepr *T) { return true; } + +private: + SourceLoc getStartLocImpl() const { return Loc; } + SourceLoc getEndLocImpl() const { return Loc; } + void printImpl(ASTPrinter &Printer, const PrintOptions &Opts) const; + friend class TypeRepr; +}; + class SILBoxTypeReprField { SourceLoc VarOrLetLoc; llvm::PointerIntPair FieldTypeAndMutable; @@ -1436,6 +1463,7 @@ inline bool TypeRepr::isSimple() const { case TypeReprKind::Pack: case TypeReprKind::Tuple: case TypeReprKind::Fixed: + case TypeReprKind::Self: case TypeReprKind::Array: case TypeReprKind::SILBox: case TypeReprKind::Isolated: diff --git a/include/swift/AST/TypeReprNodes.def b/include/swift/AST/TypeReprNodes.def index 750b89431a4cf..1a1ebdd7379ad 100644 --- a/include/swift/AST/TypeReprNodes.def +++ b/include/swift/AST/TypeReprNodes.def @@ -74,7 +74,8 @@ ABSTRACT_TYPEREPR(Specifier, TypeRepr) SPECIFIER_TYPEREPR(CompileTimeConst, SpecifierTypeRepr) TYPEREPR(Fixed, TypeRepr) TYPEREPR(SILBox, TypeRepr) -LAST_TYPEREPR(SILBox) +TYPEREPR(Self, TypeRepr) +LAST_TYPEREPR(Self) #undef SPECIFIER_TYPEREPR #undef ABSTRACT_TYPEREPR diff --git a/lib/AST/ASTDumper.cpp b/lib/AST/ASTDumper.cpp index 58089b8353f00..2916334410958 100644 --- a/lib/AST/ASTDumper.cpp +++ b/lib/AST/ASTDumper.cpp @@ -3352,6 +3352,22 @@ class PrintTypeRepr : public TypeReprVisitor { PrintWithColorRAII(OS, ParenthesisColor) << ')'; } + void visitSelfTypeRepr(SelfTypeRepr *T) { + printCommon("type_self"); + auto Ty = T->getType(); + if (Ty) { + auto &srcMgr = Ty->getASTContext().SourceMgr; + if (T->getLoc().isValid()) { + OS << " location=@"; + T->getLoc().print(OS, srcMgr); + } else { + OS << " location=<>"; + } + } + OS << " type="; Ty.dump(OS); + PrintWithColorRAII(OS, ParenthesisColor) << ')'; + } + void visitSILBoxTypeRepr(SILBoxTypeRepr *T) { printCommon("sil_box"); Indent += 2; diff --git a/lib/AST/ASTWalker.cpp b/lib/AST/ASTWalker.cpp index 096a34484f7a1..3f25ab87903fb 100644 --- a/lib/AST/ASTWalker.cpp +++ b/lib/AST/ASTWalker.cpp @@ -2182,6 +2182,10 @@ bool Traversal::visitFixedTypeRepr(FixedTypeRepr *T) { return false; } +bool Traversal::visitSelfTypeRepr(SelfTypeRepr *T) { + return false; +} + bool Traversal::visitSILBoxTypeRepr(SILBoxTypeRepr *T) { for (auto &field : T->getFields()) { if (doIt(field.getFieldType())) diff --git a/lib/AST/NameLookup.cpp b/lib/AST/NameLookup.cpp index ca486fcf0daf0..4393877fa97e1 100644 --- a/lib/AST/NameLookup.cpp +++ b/lib/AST/NameLookup.cpp @@ -2931,6 +2931,8 @@ directReferencesForTypeRepr(Evaluator &evaluator, case TypeReprKind::Fixed: llvm_unreachable("Cannot get fixed TypeReprs in name lookup"); + case TypeReprKind::Self: + llvm_unreachable("Cannot get fixed SelfTypeRepr in name lookup"); case TypeReprKind::Optional: case TypeReprKind::ImplicitlyUnwrappedOptional: diff --git a/lib/AST/TypeRepr.cpp b/lib/AST/TypeRepr.cpp index 72d08932e293e..1195522417984 100644 --- a/lib/AST/TypeRepr.cpp +++ b/lib/AST/TypeRepr.cpp @@ -629,6 +629,11 @@ void FixedTypeRepr::printImpl(ASTPrinter &Printer, getType().print(Printer, Opts); } +void SelfTypeRepr::printImpl(ASTPrinter &Printer, + const PrintOptions &Opts) const { + getType().print(Printer, Opts); +} + void SILBoxTypeRepr::printImpl(ASTPrinter &Printer, const PrintOptions &Opts) const { // TODO diff --git a/lib/IDE/SourceEntityWalker.cpp b/lib/IDE/SourceEntityWalker.cpp index ba1135fc3d2c7..81776e577daa2 100644 --- a/lib/IDE/SourceEntityWalker.cpp +++ b/lib/IDE/SourceEntityWalker.cpp @@ -650,15 +650,23 @@ ASTWalker::PreWalkAction SemaAnnotator::walkToTypeReprPre(TypeRepr *T) { return Action::StopIf(!Continue); } } else if (auto FT = dyn_cast(T)) { - ValueDecl *VD = FT->getType()->getAnyGeneric(); - if (auto DT = FT->getType()->getAs()) + if (ValueDecl *VD = FT->getType()->getAnyGeneric()) { + auto Data = ReferenceMetaData(SemaReferenceKind::TypeRef, None); + Data.isImplicitCtorType = true; + auto Continue = passReference(VD, FT->getType(), FT->getLoc(), + FT->getSourceRange(), Data); + return Action::StopIf(!Continue); + } + } else if (auto ST = dyn_cast(T)) { + ValueDecl *VD = ST->getType()->getAnyGeneric(); + if (auto DT = ST->getType()->getAs()) VD = DT->getSelfType()->getAnyGeneric(); if (VD) { auto Data = ReferenceMetaData(SemaReferenceKind::TypeRef, None); Data.isImplicitCtorType = true; - auto Continue = passReference(VD, FT->getType(), FT->getLoc(), - FT->getSourceRange(), Data); + auto Continue = passReference(VD, ST->getType(), ST->getLoc(), + ST->getSourceRange(), Data); return Action::StopIf(!Continue); } } diff --git a/lib/Migrator/APIDiffMigratorPass.cpp b/lib/Migrator/APIDiffMigratorPass.cpp index fa8f3ee0c0749..232fd4fce4fb1 100644 --- a/lib/Migrator/APIDiffMigratorPass.cpp +++ b/lib/Migrator/APIDiffMigratorPass.cpp @@ -220,6 +220,10 @@ class ChildIndexFinder : public TypeReprVisitor { FoundResult visitFixedTypeRepr(FixedTypeRepr *T) { return handleParent(T, ArrayRef()); } + + FoundResult visitSelfTypeRepr(SelfTypeRepr *T) { + return handleParent(T, ArrayRef()); + } }; struct ConversionFunctionInfo { diff --git a/lib/Sema/CSApply.cpp b/lib/Sema/CSApply.cpp index 0958196cdfcad..44e9e9aeda00f 100644 --- a/lib/Sema/CSApply.cpp +++ b/lib/Sema/CSApply.cpp @@ -624,11 +624,19 @@ namespace { locator, implicit, semantics); } - if (isa(decl) && !isa(decl)) { - auto typeExpr = TypeExpr::createImplicitHack( - loc.getBaseNameLoc(), adjustedFullType->getMetatypeInstanceType(), ctx); - cs.cacheType(typeExpr); - return typeExpr; + if (auto *typeDecl = dyn_cast(decl)) { + if (!isa(decl)) { + TypeExpr *typeExpr = nullptr; + if (implicit) { + typeExpr = TypeExpr::createImplicitHack( + loc.getBaseNameLoc(), adjustedFullType->getMetatypeInstanceType(), ctx); + } else { + typeExpr = TypeExpr::createForDecl(loc, typeDecl, dc); + typeExpr->setType(adjustedFullType); + } + cs.cacheType(typeExpr); + return typeExpr; + } } auto ref = resolveConcreteDeclRef(decl, locator); diff --git a/lib/Sema/PreCheckExpr.cpp b/lib/Sema/PreCheckExpr.cpp index 2b195b22c430e..3fcc913ea9066 100644 --- a/lib/Sema/PreCheckExpr.cpp +++ b/lib/Sema/PreCheckExpr.cpp @@ -597,7 +597,7 @@ Expr *TypeChecker::resolveDeclRefExpr(UnresolvedDeclRefExpr *UDRE, if (typeContext->getSelfClassDecl()) SelfType = DynamicSelfType::get(SelfType, Context); return new (Context) - TypeExpr(new (Context) FixedTypeRepr(SelfType, Loc)); + TypeExpr(new (Context) SelfTypeRepr(SelfType, Loc)); } } diff --git a/lib/Sema/TypeCheckType.cpp b/lib/Sema/TypeCheckType.cpp index dec4881f9a800..b7e82e9e91193 100644 --- a/lib/Sema/TypeCheckType.cpp +++ b/lib/Sema/TypeCheckType.cpp @@ -2564,6 +2564,9 @@ NeverNullType TypeResolver::resolveType(TypeRepr *repr, case TypeReprKind::Fixed: return cast(repr)->getType(); + + case TypeReprKind::Self: + return cast(repr)->getType(); } llvm_unreachable("all cases should be handled"); } @@ -5200,6 +5203,7 @@ class ExistentialTypeVisitor case TypeReprKind::ImplicitlyUnwrappedOptional: case TypeReprKind::Tuple: case TypeReprKind::Fixed: + case TypeReprKind::Self: case TypeReprKind::Array: case TypeReprKind::SILBox: case TypeReprKind::Isolated: diff --git a/test/Index/index_ambiguous_type.swift b/test/Index/index_ambiguous_type.swift new file mode 100644 index 0000000000000..241d816bbde71 --- /dev/null +++ b/test/Index/index_ambiguous_type.swift @@ -0,0 +1,62 @@ +// RUN: %empty-directory(%t) +// RUN: split-file %s %t + +// Validate that we get index references for almost ambiguous types + +// RUN: %target-swift-frontend -emit-module -o %t %t/file1.swift +// RUN: %target-swift-frontend -emit-module -o %t %t/file2.swift + +// RUN: %target-swift-ide-test -print-indexed-symbols -source-filename %t/file3.swift -I %t > %t/output.txt +// RUN: %FileCheck %s < %t/output.txt + +//--- file1.swift +public struct Thing { + public init(string: String) {} + + public struct Nested { + public init(string: String) {} + } + + public struct Nested2 { + public init(value: T) {} + } +} +//--- file2.swift +public struct Thing {} + +//--- file3.swift +import file1 +import file2 + +func foo() { + // CHECK: 7:7 | struct/Swift | Thing | s:5file15ThingV | Ref,RelCont | rel: 1 + // CHECK: 7:7 | constructor/Swift | init(string:) | s:5file15ThingV6stringACSS_tcfc | Ref,Call,RelCall,RelCont | rel: 1 + _ = Thing(string: "lol") + // CHECK: 10:7 | struct/Swift | Thing | s:5file15ThingV | Ref,RelCont | rel: 1 + // CHECK: 10:13 | constructor/Swift | init(string:) | s:5file15ThingV6stringACSS_tcfc | Ref,Call,RelCall,RelCont | rel: 1 + _ = Thing.init(string: "lol") + // CHECK: 14:7 | struct/Swift | Thing | s:5file15ThingV | Ref,RelCont | rel: 1 + // CHECK: 14:13 | struct/Swift | Nested | s:5file15ThingV6NestedV | Ref,RelCont | rel: 1 + // TODO: 14:13 | constructor/Swift | init(string:) + _ = Thing.Nested(string: "lol") + // CHECK: 18:7 | struct/Swift | Thing | s:5file15ThingV | Ref,RelCont | rel: 1 + // CHECK: 18:13 | struct/Swift | Nested | s:5file15ThingV6NestedV | Ref,RelCont | rel: 1 + // CHECK: 18:20 | constructor/Swift | init(string:) | s:5file15ThingV6NestedV6stringAESS_tcfc | Ref,Call,RelCall,RelCont | rel: 1 + _ = Thing.Nested.init(string: "lol") + // CHECK: 23:7 | struct/Swift | Thing | s:5file15ThingV | Ref,RelCont | rel: 1 + // CHECK: 23:13 | struct/Swift | Nested2 | s:5file15ThingV7Nested2V | Ref,RelCont | rel: 1 + // TODO: 23:13 | constructor/Swift | init(value:) + // TODO: 23:21 | struct/Swift | Int | s:Si | Ref,RelCont | rel: 1 + _ = Thing.Nested2(value: 0) + // CHECK: 28:7 | struct/Swift | Thing | s:5file15ThingV | Ref,RelCont | rel: 1 + // CHECK: 28:13 | struct/Swift | Nested2 | s:5file15ThingV7Nested2V | Ref,RelCont | rel: 1 + // TODO: 28:21 | struct/Swift | Int | s:Si | Ref,RelCont | rel: 1 + // CHECK: 28:26 | constructor/Swift | init(value:) | s:5file15ThingV7Nested2V5valueAEy_xGx_tcfc | Ref,Call,RelCall,RelCont | rel: 1 + _ = Thing.Nested2.init(value: 0) + // CHECK: 34:7 | module/Swift | file1 | c:@M@file1 | Ref,RelCont | rel: 1 + // CHECK: 34:13 | struct/Swift | Thing | s:5file15ThingV | Ref,RelCont | rel: 1 + // CHECK: 34:19 | struct/Swift | Nested2 | s:5file15ThingV7Nested2V | Ref,RelCont | rel: 1 + // CHECK: 34:19 | constructor/Swift | init(value:) | s:5file15ThingV7Nested2V5valueAEy_xGx_tcfc | Ref,Call,RelCall,RelCont | rel: 1 + // CHECK: 34:27 | struct/Swift | Int | s:Si | Ref,RelCont | rel: 1 + _ = file1.Thing.Nested2(value: 0) +}