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,
|
Dead = 1 << 6,
|
||||||
OwnedToGuaranteed = 1 << 7,
|
OwnedToGuaranteed = 1 << 7,
|
||||||
SROA = 1 << 8,
|
SROA = 1 << 8,
|
||||||
|
GuaranteedToOwned = 1 << 9,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// The pass that caused the specialization to occur. We use this to make sure
|
/// The pass that caused the specialization to occur. We use this to make sure
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ class FunctionSignatureSpecializationMangler : public SpecializationMangler {
|
|||||||
Dead=32,
|
Dead=32,
|
||||||
OwnedToGuaranteed=64,
|
OwnedToGuaranteed=64,
|
||||||
SROA=128,
|
SROA=128,
|
||||||
|
GuaranteedToOwned=256,
|
||||||
First_OptionSetEntry=32, LastOptionSetEntry=32768,
|
First_OptionSetEntry=32, LastOptionSetEntry=32768,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -149,6 +150,7 @@ public:
|
|||||||
ThinToThickFunctionInst *TTTFI);
|
ThinToThickFunctionInst *TTTFI);
|
||||||
void setArgumentDead(unsigned OrigArgIdx);
|
void setArgumentDead(unsigned OrigArgIdx);
|
||||||
void setArgumentOwnedToGuaranteed(unsigned OrigArgIdx);
|
void setArgumentOwnedToGuaranteed(unsigned OrigArgIdx);
|
||||||
|
void setArgumentGuaranteedToOwned(unsigned OrigArgIdx);
|
||||||
void setArgumentSROA(unsigned OrigArgIdx);
|
void setArgumentSROA(unsigned OrigArgIdx);
|
||||||
void setArgumentBoxToValue(unsigned OrigArgIdx);
|
void setArgumentBoxToValue(unsigned OrigArgIdx);
|
||||||
void setArgumentBoxToStack(unsigned OrigArgIdx);
|
void setArgumentBoxToStack(unsigned OrigArgIdx);
|
||||||
|
|||||||
@@ -1980,6 +1980,9 @@ NodePointer Demangler::demangleFuncSpecParam(Node::IndexType ParamIdx) {
|
|||||||
unsigned Value = unsigned(FunctionSigSpecializationParamKind::Dead);
|
unsigned Value = unsigned(FunctionSigSpecializationParamKind::Dead);
|
||||||
if (nextIf('G'))
|
if (nextIf('G'))
|
||||||
Value |= unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed);
|
Value |= unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed);
|
||||||
|
if (nextIf('O'))
|
||||||
|
Value |=
|
||||||
|
unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned);
|
||||||
if (nextIf('X'))
|
if (nextIf('X'))
|
||||||
Value |= unsigned(FunctionSigSpecializationParamKind::SROA);
|
Value |= unsigned(FunctionSigSpecializationParamKind::SROA);
|
||||||
return addChild(Param, createNode(
|
return addChild(Param, createNode(
|
||||||
@@ -1993,6 +1996,16 @@ NodePointer Demangler::demangleFuncSpecParam(Node::IndexType ParamIdx) {
|
|||||||
return addChild(Param, createNode(
|
return addChild(Param, createNode(
|
||||||
Node::Kind::FunctionSignatureSpecializationParamKind, Value));
|
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':
|
case 'x':
|
||||||
return addChild(Param, createNode(
|
return addChild(Param, createNode(
|
||||||
Node::Kind::FunctionSignatureSpecializationParamKind,
|
Node::Kind::FunctionSignatureSpecializationParamKind,
|
||||||
|
|||||||
@@ -813,6 +813,7 @@ unsigned NodePrinter::printFunctionSigSpecializationParam(NodePointer Node,
|
|||||||
|
|
||||||
assert(
|
assert(
|
||||||
((V & unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed)) ||
|
((V & unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed)) ||
|
||||||
|
(V & unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned)) ||
|
||||||
(V & unsigned(FunctionSigSpecializationParamKind::SROA)) ||
|
(V & unsigned(FunctionSigSpecializationParamKind::SROA)) ||
|
||||||
(V & unsigned(FunctionSigSpecializationParamKind::Dead))) &&
|
(V & unsigned(FunctionSigSpecializationParamKind::Dead))) &&
|
||||||
"Invalid OptionSet");
|
"Invalid OptionSet");
|
||||||
@@ -1225,6 +1226,13 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) {
|
|||||||
Printer << "Owned To Guaranteed";
|
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 (raw & uint64_t(FunctionSigSpecializationParamKind::SROA)) {
|
||||||
if (printedOptionSet)
|
if (printedOptionSet)
|
||||||
Printer << " and ";
|
Printer << " and ";
|
||||||
@@ -1262,6 +1270,7 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
case FunctionSigSpecializationParamKind::Dead:
|
case FunctionSigSpecializationParamKind::Dead:
|
||||||
case FunctionSigSpecializationParamKind::OwnedToGuaranteed:
|
case FunctionSigSpecializationParamKind::OwnedToGuaranteed:
|
||||||
|
case FunctionSigSpecializationParamKind::GuaranteedToOwned:
|
||||||
case FunctionSigSpecializationParamKind::SROA:
|
case FunctionSigSpecializationParamKind::SROA:
|
||||||
printer_unreachable("option sets should have been handled earlier");
|
printer_unreachable("option sets should have been handled earlier");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -641,6 +641,11 @@ private:
|
|||||||
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed);
|
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Mangled.nextIf('o')) {
|
||||||
|
Value |=
|
||||||
|
unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned);
|
||||||
|
}
|
||||||
|
|
||||||
if (Mangled.nextIf('s')) {
|
if (Mangled.nextIf('s')) {
|
||||||
Value |= unsigned(FunctionSigSpecializationParamKind::SROA);
|
Value |= unsigned(FunctionSigSpecializationParamKind::SROA);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -641,6 +641,9 @@ void Remangler::mangleFunctionSignatureSpecializationParam(Node *node) {
|
|||||||
if (kindValue &
|
if (kindValue &
|
||||||
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed))
|
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed))
|
||||||
Out << 'g';
|
Out << 'g';
|
||||||
|
if (kindValue &
|
||||||
|
unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned))
|
||||||
|
Out << 'o';
|
||||||
if (kindValue & unsigned(FunctionSigSpecializationParamKind::SROA))
|
if (kindValue & unsigned(FunctionSigSpecializationParamKind::SROA))
|
||||||
Out << 's';
|
Out << 's';
|
||||||
Out << '_';
|
Out << '_';
|
||||||
|
|||||||
@@ -1018,9 +1018,16 @@ void Remangler::mangleFunctionSignatureSpecializationParam(Node *node) {
|
|||||||
if (kindValue &
|
if (kindValue &
|
||||||
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed))
|
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed))
|
||||||
Buffer << 'G';
|
Buffer << 'G';
|
||||||
|
if (kindValue &
|
||||||
|
unsigned(FunctionSigSpecializationParamKind::GuaranteedToOwned))
|
||||||
|
Buffer << 'O';
|
||||||
} else if (kindValue &
|
} else if (kindValue &
|
||||||
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed)) {
|
unsigned(FunctionSigSpecializationParamKind::OwnedToGuaranteed)) {
|
||||||
Buffer << 'g';
|
Buffer << 'g';
|
||||||
|
} else if (kindValue &
|
||||||
|
unsigned(
|
||||||
|
FunctionSigSpecializationParamKind::GuaranteedToOwned)) {
|
||||||
|
Buffer << 'o';
|
||||||
}
|
}
|
||||||
if (kindValue & unsigned(FunctionSigSpecializationParamKind::SROA))
|
if (kindValue & unsigned(FunctionSigSpecializationParamKind::SROA))
|
||||||
Buffer << 'X';
|
Buffer << 'X';
|
||||||
|
|||||||
@@ -157,6 +157,12 @@ void FunctionSignatureSpecializationMangler::setArgumentSROA(
|
|||||||
OrigArgs[OrigArgIdx].first |= ArgumentModifierIntBase(ArgumentModifier::SROA);
|
OrigArgs[OrigArgIdx].first |= ArgumentModifierIntBase(ArgumentModifier::SROA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FunctionSignatureSpecializationMangler::setArgumentGuaranteedToOwned(
|
||||||
|
unsigned OrigArgIdx) {
|
||||||
|
OrigArgs[OrigArgIdx].first |=
|
||||||
|
ArgumentModifierIntBase(ArgumentModifier::GuaranteedToOwned);
|
||||||
|
}
|
||||||
|
|
||||||
void FunctionSignatureSpecializationMangler::setArgumentBoxToValue(
|
void FunctionSignatureSpecializationMangler::setArgumentBoxToValue(
|
||||||
unsigned OrigArgIdx) {
|
unsigned OrigArgIdx) {
|
||||||
OrigArgs[OrigArgIdx].first =
|
OrigArgs[OrigArgIdx].first =
|
||||||
@@ -291,6 +297,12 @@ void FunctionSignatureSpecializationMangler::mangleArgument(
|
|||||||
ArgOpBuffer << (hasSomeMod ? 'G' : 'g');
|
ArgOpBuffer << (hasSomeMod ? 'G' : 'g');
|
||||||
hasSomeMod = true;
|
hasSomeMod = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ArgMod & ArgumentModifierIntBase(ArgumentModifier::GuaranteedToOwned)) {
|
||||||
|
ArgOpBuffer << (hasSomeMod ? 'O' : 'o');
|
||||||
|
hasSomeMod = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (ArgMod & ArgumentModifierIntBase(ArgumentModifier::SROA)) {
|
if (ArgMod & ArgumentModifierIntBase(ArgumentModifier::SROA)) {
|
||||||
ArgOpBuffer << (hasSomeMod ? 'X' : 'x');
|
ArgOpBuffer << (hasSomeMod ? 'X' : 'x');
|
||||||
hasSomeMod = true;
|
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>) -> ()
|
$S20mangling_retroactive5test0yyAA1ZVy12RetroactiveB1XVSiAE1YVAG0D1A1PAAg_AiJ1QAAg1_GF -> mangling_retroactive.test0(mangling_retroactive.Z<RetroactiveB.X, Swift.Int, RetroactiveB.Y>) -> ()
|
||||||
_T0LiteralAByxGxd_tcfC ---> _T0LiteralAByxGxd_tcfC
|
_T0LiteralAByxGxd_tcfC ---> _T0LiteralAByxGxd_tcfC
|
||||||
_T0XZ ---> _T0XZ
|
_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:)
|
_T04main4TestCACSi1x_tc6_PRIV_Llfc ---> Test.init(x:)
|
||||||
_$S3abc6testityySiFTm ---> testit(_:)
|
_$S3abc6testityySiFTm ---> testit(_:)
|
||||||
_$S4main4TestC1xACSi_tc6_PRIV_Llfc ---> Test.init(x:)
|
_$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