Skip to content

Commit 47e32d1

Browse files
committed
SILGen: Peephole Conversion::OrigToSubst / Conversion::SubstToOrig
1 parent 5d9e704 commit 47e32d1

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

lib/SILGen/SILGenConvert.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1354,7 +1354,25 @@ Lowering::canPeepholeConversions(SILGenFunction &SGF,
13541354
switch (outerConversion.getKind()) {
13551355
case Conversion::OrigToSubst:
13561356
case Conversion::SubstToOrig:
1357-
// TODO: peephole these when the abstraction patterns are the same!
1357+
switch (innerConversion.getKind()) {
1358+
case Conversion::OrigToSubst:
1359+
case Conversion::SubstToOrig:
1360+
if (innerConversion.getKind() == outerConversion.getKind())
1361+
break;
1362+
1363+
if (innerConversion.getReabstractionOrigType().getCachingKey() !=
1364+
outerConversion.getReabstractionOrigType().getCachingKey() ||
1365+
innerConversion.getReabstractionSubstType() !=
1366+
outerConversion.getReabstractionSubstType()) {
1367+
break;
1368+
}
1369+
1370+
return ConversionPeepholeHint(ConversionPeepholeHint::Identity, false);
1371+
1372+
default:
1373+
break;
1374+
}
1375+
13581376
return None;
13591377

13601378
case Conversion::AnyErasure:

lib/SILGen/SILGenDecl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1255,7 +1255,7 @@ void SILGenFunction::emitStmtCondition(StmtCondition Cond, JumpDest FalseDest,
12551255
switch (elt.getKind()) {
12561256
case StmtConditionElement::CK_PatternBinding: {
12571257
InitializationPtr initialization =
1258-
InitializationForPattern(*this, FalseDest).visit(elt.getPattern());
1258+
emitPatternBindingInitialization(elt.getPattern(), FalseDest);
12591259

12601260
// Emit the initial value into the initialization.
12611261
FullExpr Scope(Cleanups, CleanupLocation(elt.getInitializer()));

0 commit comments

Comments
 (0)