Skip to content

Commit 30d34e9

Browse files
Merge pull request #371 from kateinoigakukun/katei/swiftcc-lowering-rebase
Lower Swiftcc by LLVM
2 parents f3de468 + 942e0f1 commit 30d34e9

24 files changed

+77
-216
lines changed

include/swift/Demangling/Demangle.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,7 @@ llvm::StringRef makeSymbolicMangledNameStringRef(const char *base);
637637
//// define what these will be.
638638
/// \returns the demangled name. Returns nullptr if the input String is not a
639639
/// Swift mangled name.
640+
SWIFT_CC(swift)
640641
SWIFT_RUNTIME_EXPORT
641642
char *swift_demangle(const char *mangledName,
642643
size_t mangledNameLength,

include/swift/Demangling/DemangleNodes.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,6 @@ CONTEXT_NODE(Structure)
201201
CONTEXT_NODE(Subscript)
202202
NODE(Suffix)
203203
NODE(ThinFunctionType)
204-
NODE(ThinToThickForwarder)
205204
NODE(Tuple)
206205
NODE(TupleElement)
207206
NODE(TupleElementName)

include/swift/Runtime/HeapObject.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,10 +205,13 @@ void swift_nonatomic_release_n(HeapObject *object, uint32_t n);
205205

206206
// Refcounting observation hooks for memory tools. Don't use these.
207207
SWIFT_RUNTIME_EXPORT
208+
SWIFT_CC(swift)
208209
size_t swift_retainCount(HeapObject *object);
209210
SWIFT_RUNTIME_EXPORT
211+
SWIFT_CC(swift)
210212
size_t swift_unownedRetainCount(HeapObject *object);
211213
SWIFT_RUNTIME_EXPORT
214+
SWIFT_CC(swift)
212215
size_t swift_weakRetainCount(HeapObject *object);
213216

214217
/// Is this pointer a non-null unique reference to an object

lib/Demangling/Context.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ bool Context::isThunkSymbol(llvm::StringRef MangledName) {
8888
MangledName = stripSuffix(MangledName);
8989
// First do a quick check
9090
if (MangledName.endswith("TA") || // partial application forwarder
91-
MangledName.endswith("Tu")|| // thin-to-thick forwarder
9291
MangledName.endswith("Ta") || // ObjC partial application forwarder
9392
MangledName.endswith("To") || // swift-as-ObjC thunk
9493
MangledName.endswith("TO") || // ObjC-as-swift thunk
@@ -108,7 +107,6 @@ bool Context::isThunkSymbol(llvm::StringRef MangledName) {
108107
case Node::Kind::NonObjCAttribute:
109108
case Node::Kind::PartialApplyObjCForwarder:
110109
case Node::Kind::PartialApplyForwarder:
111-
case Node::Kind::ThinToThickForwarder:
112110
case Node::Kind::ReabstractionThunkHelper:
113111
case Node::Kind::ReabstractionThunk:
114112
case Node::Kind::ProtocolWitness:

lib/Demangling/Demangler.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ bool swift::Demangle::isFunctionAttr(Node::Kind kind) {
113113
case Node::Kind::DirectMethodReferenceAttribute:
114114
case Node::Kind::VTableAttribute:
115115
case Node::Kind::PartialApplyForwarder:
116-
case Node::Kind::ThinToThickForwarder:
117116
case Node::Kind::PartialApplyObjCForwarder:
118117
case Node::Kind::OutlinedVariable:
119118
case Node::Kind::OutlinedBridgedMethod:
@@ -550,8 +549,7 @@ NodePointer Demangler::demangleSymbol(StringRef MangledName,
550549
while (NodePointer FuncAttr = popNode(isFunctionAttr)) {
551550
Parent->addChild(FuncAttr, *this);
552551
if (FuncAttr->getKind() == Node::Kind::PartialApplyForwarder ||
553-
FuncAttr->getKind() == Node::Kind::PartialApplyObjCForwarder ||
554-
FuncAttr->getKind() == Node::Kind::ThinToThickForwarder)
552+
FuncAttr->getKind() == Node::Kind::PartialApplyObjCForwarder)
555553
Parent = FuncAttr;
556554
}
557555
for (Node *Nd : NodeStack) {
@@ -2180,7 +2178,6 @@ NodePointer Demangler::demangleThunkOrSpecialization() {
21802178
case 'd': return createNode(Node::Kind::DirectMethodReferenceAttribute);
21812179
case 'a': return createNode(Node::Kind::PartialApplyObjCForwarder);
21822180
case 'A': return createNode(Node::Kind::PartialApplyForwarder);
2183-
case 'u': return createNode(Node::Kind::ThinToThickForwarder);
21842181
case 'm': return createNode(Node::Kind::MergedFunction);
21852182
case 'X': return createNode(Node::Kind::DynamicallyReplaceableFunctionVar);
21862183
case 'x': return createNode(Node::Kind::DynamicallyReplaceableFunctionKey);

lib/Demangling/NodePrinter.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,6 @@ class NodePrinter {
467467
case Node::Kind::Subscript:
468468
case Node::Kind::Suffix:
469469
case Node::Kind::ThinFunctionType:
470-
case Node::Kind::ThinToThickForwarder:
471470
case Node::Kind::TupleElement:
472471
case Node::Kind::TypeMangling:
473472
case Node::Kind::TypeMetadata:
@@ -1234,14 +1233,6 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) {
12341233
Printer << "@convention(thin) ";
12351234
printFunctionType(nullptr, Node);
12361235
return nullptr;
1237-
case Node::Kind::ThinToThickForwarder:
1238-
Printer << "thin-to-thick forwarder";
1239-
1240-
if (Node->hasChildren()) {
1241-
Printer << " for ";
1242-
printChildren(Node);
1243-
}
1244-
return nullptr;
12451236
case Node::Kind::FunctionType:
12461237
case Node::Kind::UncurriedFunctionType:
12471238
printFunctionType(nullptr, Node);

lib/Demangling/OldDemangler.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -364,15 +364,6 @@ class OldDemangler {
364364
DEMANGLE_CHILD_OR_RETURN(forwarder, Global);
365365
return forwarder;
366366
}
367-
368-
// thin-to-thick thunks.
369-
if (Mangled.nextIf("Pu")) {
370-
Node::Kind kind = Node::Kind::ThinToThickForwarder;
371-
auto forwarder = Factory.createNode(kind);
372-
if (Mangled.nextIf("__T"))
373-
DEMANGLE_CHILD_OR_RETURN(forwarder, Global);
374-
return forwarder;
375-
}
376367

377368
// Top-level types, for various consumers.
378369
if (Mangled.nextIf('t')) {

lib/Demangling/OldRemangler.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -574,11 +574,6 @@ void Remangler::mangleProtocolSelfConformanceDescriptor(Node *node) {
574574
mangleProtocol(node->begin()[0]);
575575
}
576576

577-
void Remangler::mangleThinToThickForwarder(Node *node) {
578-
Buffer << "Pu__T";
579-
mangleSingleChildNode(node); // global
580-
}
581-
582577
void Remangler::manglePartialApplyForwarder(Node *node) {
583578
Buffer << "PA__T";
584579
mangleSingleChildNode(node); // global

lib/Demangling/Remangler.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1738,11 +1738,6 @@ void Remangler::mangleOwningMutableAddressor(Node *node) {
17381738
mangleAbstractStorage(node->getFirstChild(), "aO");
17391739
}
17401740

1741-
void Remangler::mangleThinToThickForwarder(Node *node) {
1742-
mangleChildNodesReversed(node);
1743-
Buffer << "Tu";
1744-
}
1745-
17461741
void Remangler::manglePartialApplyForwarder(Node *node) {
17471742
mangleChildNodesReversed(node);
17481743
Buffer << "TA";

lib/IRGen/GenBuiltin.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -398,10 +398,17 @@ if (Builtin.ID == BuiltinValueKind::id) { \
398398
call->addAttribute(llvm::AttributeList::FirstArgIndex + 1,
399399
llvm::Attribute::ReadOnly);
400400

401-
auto attrs = call->getAttributes();
402-
IGF.IGM.addSwiftSelfAttributes(attrs, 0);
403-
IGF.IGM.addSwiftErrorAttributes(attrs, 1);
404-
call->setAttributes(attrs);
401+
// Remove swiftself and swifterror attribute to match signature generated from
402+
// RuntimeFunctions.def. These two parameters are passed using swifterror and swiftself,
403+
// but the definition of swift_willThrow generated from the def file doesn't have those
404+
// attributes due to the def file limitation. In WebAssembly context, these attributes are
405+
// lowered as usual parameters, so this doesn't have any side effects.
406+
if (IGF.IGM.TargetInfo.OutputObjectFormat != llvm::Triple::Wasm) {
407+
auto attrs = call->getAttributes();
408+
IGF.IGM.addSwiftSelfAttributes(attrs, 0);
409+
IGF.IGM.addSwiftErrorAttributes(attrs, 1);
410+
call->setAttributes(attrs);
411+
}
405412

406413
IGF.Builder.CreateStore(llvm::ConstantPointerNull::get(IGF.IGM.ErrorPtrTy),
407414
errorBuffer);

0 commit comments

Comments
 (0)