@@ -51,7 +51,6 @@ enum OpCode {
51
51
OpCodePtrAdd,
52
52
OpCodeBinOp,
53
53
OpCodeCast,
54
- OpCodeDeoptSafepoint,
55
54
OpCodeSwitch,
56
55
OpCodeUnimplemented = 255 , // YKFIXME: Will eventually be deleted.
57
56
};
@@ -397,6 +396,9 @@ class YkIRWriter {
397
396
}
398
397
399
398
void serialiseStackmapCall (CallInst *I, ValueLoweringMap &VLMap) {
399
+ assert (I);
400
+ assert (I->getCalledFunction ()->isIntrinsic ());
401
+ assert (I->getIntrinsicID () == Intrinsic::experimental_stackmap);
400
402
// stackmap ID:
401
403
serialiseOperand (I, VLMap, I->getOperand (0 ));
402
404
@@ -461,12 +463,9 @@ class YkIRWriter {
461
463
}
462
464
if (!I->getCalledFunction ()->isDeclaration ()) {
463
465
// The next instruction will be the stackmap entry
464
- CallInst *SMI = dyn_cast<CallInst>(I->getNextNonDebugInstruction ());
465
- assert (SMI);
466
- assert (SMI->getCalledFunction ()->isIntrinsic ());
467
- assert (SMI->getIntrinsicID () == Intrinsic::experimental_stackmap);
468
466
// has_safepoint = 1:
469
467
OutStreamer.emitInt8 (1 );
468
+ CallInst *SMI = dyn_cast<CallInst>(I->getNextNonDebugInstruction ());
470
469
serialiseStackmapCall (SMI, VLMap);
471
470
} else {
472
471
// has_safepoint = 0:
@@ -506,9 +505,6 @@ class YkIRWriter {
506
505
serialiseBlockLabel (I->getSuccessor (1 ));
507
506
508
507
CallInst *SMI = dyn_cast<CallInst>(I->getPrevNonDebugInstruction ());
509
- assert (SMI);
510
- assert (SMI->getCalledFunction ()->isIntrinsic ());
511
- assert (SMI->getIntrinsicID () == Intrinsic::experimental_stackmap);
512
508
serialiseStackmapCall (SMI, VLMap);
513
509
}
514
510
InstIdx++;
@@ -688,7 +684,9 @@ class YkIRWriter {
688
684
for (auto &Case : I->cases ()) {
689
685
serialiseBlockLabel (Case.getCaseSuccessor ());
690
686
}
691
-
687
+ // safepoint:
688
+ CallInst *SMI = dyn_cast<CallInst>(I->getPrevNonDebugInstruction ());
689
+ serialiseStackmapCall (SMI, VLMap);
692
690
InstIdx++;
693
691
}
694
692
0 commit comments