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 } } 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/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/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/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; diff --git a/include/swift/Threading/Impl/Linux/ulock.h b/include/swift/Threading/Impl/Linux/ulock.h index a9020965ec5d4..af04e74aa08ef 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/ThreadSanitizer.h" + namespace swift { namespace threading_impl { namespace linux { @@ -59,31 +61,38 @@ 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) { + tsan::release(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); } diff --git a/include/swift/Threading/ThreadSanitizer.h b/include/swift/Threading/ThreadSanitizer.h new file mode 100644 index 0000000000000..0a6a8028ea183 --- /dev/null +++ b/include/swift/Threading/ThreadSanitizer.h @@ -0,0 +1,120 @@ +//===--- ThreadSanitizer.h - Thread Sanitizer support --------- -*- 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_THREAD_SANITIZER_H +#define SWIFT_THREADING_THREAD_SANITIZER_H + +#include "swift/shims/Visibility.h" + +namespace swift { + +#if defined(_WIN32) || defined(__wasi__) || !__has_include() + +#define SWIFT_THREADING_TSAN_SUPPORT 0 + +namespace tsan { + +inline bool enabled() { return false; } +template T *acquire(T *ptr) { return ptr; } +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. +#if SWIFT_THREADING_STATIC +#define SWIFT_THREADING_EXPORT extern "C" +#else +#define SWIFT_THREADING_EXPORT SWIFT_RUNTIME_EXPORT +#endif + +namespace threading_impl { + +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 + +namespace tsan { + +/// Returns true if TSan is enabled +inline bool enabled() { + return threading_impl::_swift_tsan_enabled; +} + +/// 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) { + threading_impl::_swift_tsan_acquire(ptr); + } + return ptr; +} + +/// Inform TSan about a synchronization operation. +/// +/// This is the counterpart to tsan::acquire. +template +T *release(T *ptr) { + if (threading_impl::_swift_tsan_release) { + threading_impl::_swift_tsan_release(ptr); + } + return ptr; +} + +} // namespace tsan + +#endif + +} // namespace swift + +#endif 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/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/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/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..4393877fa97e1 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; } @@ -2930,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: @@ -3875,20 +3878,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/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/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/lib/ConstExtract/ConstExtract.cpp b/lib/ConstExtract/ConstExtract.cpp index 86d6295cc7831..8c1a93451b85c 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_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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/lib/Threading/Linux.cpp b/lib/Threading/Linux.cpp index 811f470ba0832..93963a7c30ad2 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/ThreadSanitizer.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/ThreadSanitizer.cpp b/lib/Threading/ThreadSanitizer.cpp new file mode 100644 index 0000000000000..a103c161dce91 --- /dev/null +++ b/lib/Threading/ThreadSanitizer.cpp @@ -0,0 +1,61 @@ +//===--- ThreadSanitizer.cpp - Thread Sanitizer support -------------------===// +// +// 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/ThreadSanitizer.h" + +#if SWIFT_THREADING_TSAN_SUPPORT + +#include "swift/shims/Visibility.h" + +#include + +namespace swift { +namespace threading_impl { + +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 + +// The TSan library code will call this function when it starts up +extern "C" SWIFT_ATTRIBUTE_FOR_EXPORTS +void __tsan_on_initialize() { + _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; 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) { + next_init(); + } +} +#endif // __has_include() + +} // namespace threading_impl +} // namespace swift + +#endif // SWIFT_THREADING_TSAN_SUPPORT 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..414bf3dc75c11 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/ThreadSanitizer.h" #include #include @@ -99,15 +100,23 @@ 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) { + // 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 /// 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/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/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 { } 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/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/BytecodeLayouts.cpp b/stdlib/public/runtime/BytecodeLayouts.cpp index 4f113eac78d76..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, @@ -698,6 +728,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; @@ -736,6 +778,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; } 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/stdlib/public/runtime/CMakeLists.txt b/stdlib/public/runtime/CMakeLists.txt index 853956e8edf04..e921ea2043f3d 100644 --- a/stdlib/public/runtime/CMakeLists.txt +++ b/stdlib/public/runtime/CMakeLists.txt @@ -80,6 +80,12 @@ set(swift_runtime_sources 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 @@ -132,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} 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); 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/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 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", 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 }) + } + } +} 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]+]] 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()) 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/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#>) 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/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/abitypes.swift b/test/IRGen/abitypes.swift index 10dd3ecc144bc..08bbef98bdc9e 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,193 +131,185 @@ 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> } @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: load { float, float, float, float }, ptr // 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]] @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: load { float, float, float, float }, ptr // 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: 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: bitcast + // 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: 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: bitcast + // x86_64-macosx: [[T0:%.*]] = getelementptr inbounds { i64 }, ptr + // x86_64-macosx: load i64, ptr [[T0]], align 8 // x86_64-macosx: call void @llvm.lifetime.end // x86_64-macosx: ret i64 func getnested(_ p: StructReturns) -> NestedInts { 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: [[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: 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 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 i8* @"$s8abitypes3FooC13copyProtoComp{{[_0-9a-zA-Z]*}}FTo"(i8* %0, i8* %1, i8* %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: 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 ptr @"$s8abitypes3FooC13copyProtoComp{{[_0-9a-zA-Z]*}}F" + // x86_64-macosx: ret ptr [[VALUE]] @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 +318,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 +454,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 +477,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 +514,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 +525,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 +537,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 +567,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 +578,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 +591,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..669944dbf785a 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: 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_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/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_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_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/class_update_callback_without_fixed_layout.sil b/test/IRGen/class_update_callback_without_fixed_layout.sil index 6138b38895b7d..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 @@ -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/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-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_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/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/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/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/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 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/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/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_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.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_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_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/dynamic_self_metadata.swift b/test/IRGen/dynamic_self_metadata.swift index acd18fd325e34..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 @@ -28,31 +27,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/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_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 %{{.*}}) 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..8d1e4d21af5e4 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,109 @@ 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-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 - // 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-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 - // 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..2de06b6898523 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,109 @@ 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-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 - // 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-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 - // 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() 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) +} 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: } 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 diff --git a/test/Macros/Inputs/syntax_macro_definitions.swift b/test/Macros/Inputs/syntax_macro_definitions.swift index 6246c5c2c2409..253c1bdf8a13e 100644 --- a/test/Macros/Inputs/syntax_macro_definitions.swift +++ b/test/Macros/Inputs/syntax_macro_definitions.swift @@ -1641,3 +1641,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 }"] + } +} 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() diff --git a/test/Sanitizers/tsan/once.swift b/test/Sanitizers/tsan/once.swift new file mode 100644 index 0000000000000..f3bcc562403f5 --- /dev/null +++ b/test/Sanitizers/tsan/once.swift @@ -0,0 +1,55 @@ +// 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 + +// 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 +}() + +@main +struct Main { + static func main() { + let q = DispatchQueue(label: "q", attributes: .concurrent) + let finished = DispatchSemaphore(value: 0) + let count = 100 + + for _ in 0.. Void) { } + + @available(SwiftStdlib 5.1, *) + @objc(doSomethingOverloadedWithCompletionHandler:) + public func doSomethingOverloaded() async {} + + @available(*, noasync) + @objc(doSomethingOverloaded) + public func doSomethingOverloaded() {} } @_objcImplementation(Conformance) extension ObjCClass { 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() +} diff --git a/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp b/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp index a050676ed4bb4..23f2aef32e8d9 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); + }); } } @@ -1219,14 +1240,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 +1282,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( 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(); } 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( 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 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})