@@ -488,16 +488,35 @@ bool SILPassManager::continueTransforming() {
488
488
return NumPassesRun < maxNumPassesToRun;
489
489
}
490
490
491
- bool SILPassManager::continueWithNextSubpassRun (SILInstruction *forInst,
492
- SILFunction *function,
493
- SILTransform *trans) {
491
+ bool SILPassManager::continueWithNextSubpassRun (
492
+ std::optional<Transformee> origTransformee, SILFunction *function,
493
+ SILTransform *trans) {
494
+ // Rewrite .some(nullptr) as .none.
495
+ std::optional<llvm::PointerUnion<SILValue, SILInstruction *>> forTransformee;
496
+ if (origTransformee) {
497
+ auto forValue = dyn_cast<SILValue>(*origTransformee);
498
+ if (forValue) {
499
+ forTransformee = forValue;
500
+ } else if (auto *forInst = cast<SILInstruction *>(*origTransformee)) {
501
+ forTransformee = forInst;
502
+ }
503
+ }
504
+
494
505
unsigned subPass = numSubpassesRun++;
495
506
496
- if (forInst && isFunctionSelectedForPrinting (function) &&
497
- SILPrintEverySubpass) {
507
+ if (isFunctionSelectedForPrinting (function) && SILPrintEverySubpass) {
498
508
dumpPassInfo (" *** SIL function before " , trans, function);
499
- if (forInst) {
500
- llvm::dbgs () << " *** sub-pass " << subPass << " for " << *forInst;
509
+ llvm::dbgs () << " *** sub-pass " << subPass << " for " ;
510
+ if (forTransformee) {
511
+ auto forValue = dyn_cast<SILValue>(*forTransformee);
512
+ if (forValue) {
513
+ llvm::dbgs () << forValue;
514
+ } else {
515
+ auto *forInst = cast<SILInstruction *>(*forTransformee);
516
+ llvm::dbgs () << *forInst;
517
+ }
518
+ } else {
519
+ llvm::dbgs () << " ???\n " ;
501
520
}
502
521
function->dump (getOptions ().EmitVerboseSIL );
503
522
}
@@ -509,8 +528,16 @@ bool SILPassManager::continueWithNextSubpassRun(SILInstruction *forInst,
509
528
510
529
if (subPass == maxNumSubpassesToRun - 1 && SILPrintLast) {
511
530
dumpPassInfo (" *** SIL function before " , trans, function);
512
- if (forInst) {
513
- llvm::dbgs () << " *** sub-pass " << subPass << " for " << *forInst;
531
+ if (forTransformee) {
532
+ auto forValue = dyn_cast<SILValue>(*forTransformee);
533
+ if (forValue) {
534
+ llvm::dbgs () << forValue;
535
+ } else {
536
+ auto *forInst = cast<SILInstruction *>(*forTransformee);
537
+ llvm::dbgs () << *forInst;
538
+ }
539
+ } else {
540
+ llvm::dbgs () << " ???\n " ;
514
541
}
515
542
function->dump (getOptions ().EmitVerboseSIL );
516
543
}
0 commit comments