[sil-generic-specializer] Provide a possibility to disable the indirect-to-direct conversions of parameters and results

This is required by the capture propagation pass. Indirect-to-direct conversions are still performed by default.
This commit is contained in:
Roman Levenstein
2017-03-10 13:19:14 -08:00
parent c618f19c0f
commit c336dafb04
2 changed files with 15 additions and 4 deletions

View File

@@ -290,10 +290,13 @@ bool ReabstractionInfo::canBeSpecialized(ApplySite Apply, SILFunction *Callee,
}
ReabstractionInfo::ReabstractionInfo(ApplySite Apply, SILFunction *Callee,
ArrayRef<Substitution> ParamSubs) {
ArrayRef<Substitution> ParamSubs,
bool ConvertIndirectToDirect) {
if (!prepareAndCheck(Apply, Callee, ParamSubs))
return;
this->ConvertIndirectToDirect = ConvertIndirectToDirect;
if (SpecializeGenericSubstitutions) {
specializeConcreteAndGenericSubstitutions(Apply, Callee, ParamSubs);
} else {
@@ -639,6 +642,8 @@ ReabstractionInfo::ReabstractionInfo(SILFunction *OrigF,
checkSpecializationRequirements(Requirements);
OriginalF = OrigF;
ConvertIndirectToDirect = true;
SILModule &M = OrigF->getModule();
auto &Ctx = M.getASTContext();