mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[func-sig-opts] Add a new mangling for the guaranteed->owned transformation.
I followed the example of the owned->guaranteed transformation. rdar://38196046
This commit is contained in:
@@ -94,6 +94,7 @@ enum class FunctionSigSpecializationParamKind : unsigned {
|
||||
Dead = 1 << 6,
|
||||
OwnedToGuaranteed = 1 << 7,
|
||||
SROA = 1 << 8,
|
||||
GuaranteedToOwned = 1 << 9,
|
||||
};
|
||||
|
||||
/// The pass that caused the specialization to occur. We use this to make sure
|
||||
|
||||
@@ -127,6 +127,7 @@ class FunctionSignatureSpecializationMangler : public SpecializationMangler {
|
||||
Dead=32,
|
||||
OwnedToGuaranteed=64,
|
||||
SROA=128,
|
||||
GuaranteedToOwned=256,
|
||||
First_OptionSetEntry=32, LastOptionSetEntry=32768,
|
||||
};
|
||||
|
||||
@@ -149,6 +150,7 @@ public:
|
||||
ThinToThickFunctionInst *TTTFI);
|
||||
void setArgumentDead(unsigned OrigArgIdx);
|
||||
void setArgumentOwnedToGuaranteed(unsigned OrigArgIdx);
|
||||
void setArgumentGuaranteedToOwned(unsigned OrigArgIdx);
|
||||
void setArgumentSROA(unsigned OrigArgIdx);
|
||||
void setArgumentBoxToValue(unsigned OrigArgIdx);
|
||||
void setArgumentBoxToStack(unsigned OrigArgIdx);
|
||||
|
||||
@@ -1980,6 +1980,9 @@ NodePointer Demangler::demangleFuncSpecParam(Node::IndexType ParamIdx) {
|
||||
unsigned Value = unsigned(FunctionSigSpecializationParamKind::Dead);
|
||||
if (nextIf('G'))
|
||||
Value |= unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed);
|
||||
if (nextIf('O'))
|
||||
Value |=
|
||||
unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned);
|
||||
if (nextIf('X'))
|
||||
Value |= unsigned(FunctionSigSpecializationParamKind::SROA);
|
||||
return addChild(Param, createNode(
|
||||
@@ -1993,6 +1996,16 @@ NodePointer Demangler::demangleFuncSpecParam(Node::IndexType ParamIdx) {
|
||||
return addChild(Param, createNode(
|
||||
Node::Kind::FunctionSignatureSpecializationParamKind, Value));
|
||||
}
|
||||
case 'o': {
|
||||
unsigned Value =
|
||||
unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned);
|
||||
if (nextIf('X'))
|
||||
Value |= unsigned(FunctionSigSpecializationParamKind::SROA);
|
||||
return addChild(
|
||||
Param,
|
||||
createNode(Node::Kind::FunctionSignatureSpecializationParamKind,
|
||||
Value));
|
||||
}
|
||||
case 'x':
|
||||
return addChild(Param, createNode(
|
||||
Node::Kind::FunctionSignatureSpecializationParamKind,
|
||||
|
||||
@@ -813,6 +813,7 @@ unsigned NodePrinter::printFunctionSigSpecializationParam(NodePointer Node,
|
||||
|
||||
assert(
|
||||
((V & unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed)) ||
|
||||
(V & unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned)) ||
|
||||
(V & unsigned(FunctionSigSpecializationParamKind::SROA)) ||
|
||||
(V & unsigned(FunctionSigSpecializationParamKind::Dead))) &&
|
||||
"Invalid OptionSet");
|
||||
@@ -1225,6 +1226,13 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) {
|
||||
Printer << "Owned To Guaranteed";
|
||||
}
|
||||
|
||||
if (raw & uint64_t(FunctionSigSpecializationParamKind::GuaranteedToOwned)) {
|
||||
if (printedOptionSet)
|
||||
Printer << " and ";
|
||||
printedOptionSet = true;
|
||||
Printer << "Guaranteed To Owned";
|
||||
}
|
||||
|
||||
if (raw & uint64_t(FunctionSigSpecializationParamKind::SROA)) {
|
||||
if (printedOptionSet)
|
||||
Printer << " and ";
|
||||
@@ -1262,6 +1270,7 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) {
|
||||
return nullptr;
|
||||
case FunctionSigSpecializationParamKind::Dead:
|
||||
case FunctionSigSpecializationParamKind::OwnedToGuaranteed:
|
||||
case FunctionSigSpecializationParamKind::GuaranteedToOwned:
|
||||
case FunctionSigSpecializationParamKind::SROA:
|
||||
printer_unreachable("option sets should have been handled earlier");
|
||||
}
|
||||
|
||||
@@ -641,6 +641,11 @@ private:
|
||||
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed);
|
||||
}
|
||||
|
||||
if (Mangled.nextIf('o')) {
|
||||
Value |=
|
||||
unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned);
|
||||
}
|
||||
|
||||
if (Mangled.nextIf('s')) {
|
||||
Value |= unsigned(FunctionSigSpecializationParamKind::SROA);
|
||||
}
|
||||
|
||||
@@ -641,6 +641,9 @@ void Remangler::mangleFunctionSignatureSpecializationParam(Node *node) {
|
||||
if (kindValue &
|
||||
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed))
|
||||
Out << 'g';
|
||||
if (kindValue &
|
||||
unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned))
|
||||
Out << 'o';
|
||||
if (kindValue & unsigned(FunctionSigSpecializationParamKind::SROA))
|
||||
Out << 's';
|
||||
Out << '_';
|
||||
|
||||
@@ -1018,9 +1018,16 @@ void Remangler::mangleFunctionSignatureSpecializationParam(Node *node) {
|
||||
if (kindValue &
|
||||
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed))
|
||||
Buffer << 'G';
|
||||
if (kindValue &
|
||||
unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned))
|
||||
Buffer << 'O';
|
||||
} else if (kindValue &
|
||||
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed)) {
|
||||
Buffer << 'g';
|
||||
} else if (kindValue &
|
||||
unsigned(
|
||||
FunctionSigSpecializationParamKind::GuaranteedToOwned)) {
|
||||
Buffer << 'o';
|
||||
}
|
||||
if (kindValue & unsigned(FunctionSigSpecializationParamKind::SROA))
|
||||
Buffer << 'X';
|
||||
|
||||
@@ -157,6 +157,12 @@ void FunctionSignatureSpecializationMangler::setArgumentSROA(
|
||||
OrigArgs[OrigArgIdx].first |= ArgumentModifierIntBase(ArgumentModifier::SROA);
|
||||
}
|
||||
|
||||
void FunctionSignatureSpecializationMangler::setArgumentGuaranteedToOwned(
|
||||
unsigned OrigArgIdx) {
|
||||
OrigArgs[OrigArgIdx].first |=
|
||||
ArgumentModifierIntBase(ArgumentModifier::GuaranteedToOwned);
|
||||
}
|
||||
|
||||
void FunctionSignatureSpecializationMangler::setArgumentBoxToValue(
|
||||
unsigned OrigArgIdx) {
|
||||
OrigArgs[OrigArgIdx].first =
|
||||
@@ -291,6 +297,12 @@ void FunctionSignatureSpecializationMangler::mangleArgument(
|
||||
ArgOpBuffer << (hasSomeMod ? 'G' : 'g');
|
||||
hasSomeMod = true;
|
||||
}
|
||||
|
||||
if (ArgMod & ArgumentModifierIntBase(ArgumentModifier::GuaranteedToOwned)) {
|
||||
ArgOpBuffer << (hasSomeMod ? 'O' : 'o');
|
||||
hasSomeMod = true;
|
||||
}
|
||||
|
||||
if (ArgMod & ArgumentModifierIntBase(ArgumentModifier::SROA)) {
|
||||
ArgOpBuffer << (hasSomeMod ? 'X' : 'x');
|
||||
hasSomeMod = true;
|
||||
|
||||
@@ -310,3 +310,7 @@ $SSC9SomeErrorLeVD ---> __C_Synthesized.related decl 'e' for SomeError
|
||||
$S20mangling_retroactive5test0yyAA1ZVy12RetroactiveB1XVSiAE1YVAG0D1A1PAAg_AiJ1QAAg1_GF -> mangling_retroactive.test0(mangling_retroactive.Z<RetroactiveB.X, Swift.Int, RetroactiveB.Y>) -> ()
|
||||
_T0LiteralAByxGxd_tcfC ---> _T0LiteralAByxGxd_tcfC
|
||||
_T0XZ ---> _T0XZ
|
||||
_TTSf0os___TFVs17_LegacyStringCore15_invariantCheckfT_T_ ---> function signature specialization <Arg[0] = Guaranteed To Owned and Exploded> of Swift._LegacyStringCore._invariantCheck() -> ()
|
||||
_TTSf2o___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_ ---> function signature specialization <Arg[0] = Guaranteed To Owned> of function signature specialization <Arg[0] = Exploded, Arg[1] = Dead> of Swift._LegacyStringCore.init(Swift._StringBuffer) -> Swift._LegacyStringCore
|
||||
_TTSf2do___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_ ---> function signature specialization <Arg[0] = Dead and Guaranteed To Owned> of function signature specialization <Arg[0] = Exploded, Arg[1] = Dead> of Swift._LegacyStringCore.init(Swift._StringBuffer) -> Swift._LegacyStringCore
|
||||
_TTSf2dos___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_ ---> function signature specialization <Arg[0] = Dead and Guaranteed To Owned and Exploded> of function signature specialization <Arg[0] = Exploded, Arg[1] = Dead> of Swift._LegacyStringCore.init(Swift._StringBuffer) -> Swift._LegacyStringCore
|
||||
|
||||
@@ -207,3 +207,7 @@ _T03abc6testitySiFTm ---> testit(_:)
|
||||
_T04main4TestCACSi1x_tc6_PRIV_Llfc ---> Test.init(x:)
|
||||
_$S3abc6testityySiFTm ---> testit(_:)
|
||||
_$S4main4TestC1xACSi_tc6_PRIV_Llfc ---> Test.init(x:)
|
||||
_TTSf0os___TFVs17_LegacyStringCore15_invariantCheckfT_T_ ---> specialized _LegacyStringCore._invariantCheck()
|
||||
_TTSf2o___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_ ---> specialized _LegacyStringCore.init(_:)
|
||||
_TTSf2do___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_ ---> specialized _LegacyStringCore.init(_:)
|
||||
_TTSf2dos___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_ ---> specialized _LegacyStringCore.init(_:)
|
||||
|
||||
Reference in New Issue
Block a user