@@ -49,6 +49,7 @@ enum OpCode {
4949 OpCodeInsertValue,
5050 OpCodePtrAdd,
5151 OpCodeBinOp,
52+ OpCodeCast,
5253 OpCodeUnimplemented = 255 , // YKFIXME: Will eventually be deleted.
5354};
5455
@@ -69,6 +70,10 @@ enum TypeKind {
6970 TypeKindUnimplemented = 255 , // YKFIXME: Will eventually be deleted.
7071};
7172
73+ enum CastKind {
74+ CastKindSignExt = 0 ,
75+ };
76+
7277// A predicate used in a numeric comparison.
7378enum CmpPredicate {
7479 PredEqual = 0 ,
@@ -603,6 +608,23 @@ class YkIRWriter {
603608 InstIdx++;
604609 }
605610
611+ void serialiseCastKind (enum CastKind Cast) { OutStreamer.emitInt8 (Cast); }
612+
613+ // / Serialise a cast-like insruction.
614+ void serialiseSExtInst (SExtInst *I, ValueLoweringMap &VLMap, unsigned BBIdx,
615+ unsigned &InstIdx) {
616+ // opcode:
617+ serialiseOpcode (OpCodeCast);
618+ // cast_kind:
619+ serialiseCastKind (CastKindSignExt);
620+ // val:
621+ serialiseOperand (I, VLMap, I->getOperand (0 ));
622+ // dest_type_idx:
623+ OutStreamer.emitSizeT (typeIndex (I->getDestTy ()));
624+
625+ VLMap[I] = {BBIdx, InstIdx};
626+ InstIdx++;
627+ }
606628 void serialiseInst (Instruction *I, ValueLoweringMap &VLMap, unsigned BBIdx,
607629 unsigned &InstIdx) {
608630 // Macro to make the dispatch below easier to read/sort.
@@ -621,6 +643,7 @@ class YkIRWriter {
621643 INST_SERIALISE (I, InsertValueInst, serialiseInsertValueInst);
622644 INST_SERIALISE (I, LoadInst, serialiseLoadInst);
623645 INST_SERIALISE (I, ReturnInst, serialiseReturnInst);
646+ INST_SERIALISE (I, SExtInst, serialiseSExtInst);
624647 INST_SERIALISE (I, StoreInst, serialiseStoreInst);
625648
626649 // INST_SERIALISE does an early return upon a match, so if we get here then
0 commit comments