@@ -49,6 +49,7 @@ enum OpCode {
49
49
OpCodeInsertValue,
50
50
OpCodePtrAdd,
51
51
OpCodeBinOp,
52
+ OpCodeCast,
52
53
OpCodeUnimplemented = 255 , // YKFIXME: Will eventually be deleted.
53
54
};
54
55
@@ -69,6 +70,10 @@ enum TypeKind {
69
70
TypeKindUnimplemented = 255 , // YKFIXME: Will eventually be deleted.
70
71
};
71
72
73
+ enum CastKind {
74
+ CastKindSignExt = 0 ,
75
+ };
76
+
72
77
// A predicate used in a numeric comparison.
73
78
enum CmpPredicate {
74
79
PredEqual = 0 ,
@@ -603,6 +608,23 @@ class YkIRWriter {
603
608
InstIdx++;
604
609
}
605
610
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
+ }
606
628
void serialiseInst (Instruction *I, ValueLoweringMap &VLMap, unsigned BBIdx,
607
629
unsigned &InstIdx) {
608
630
// Macro to make the dispatch below easier to read/sort.
@@ -621,6 +643,7 @@ class YkIRWriter {
621
643
INST_SERIALISE (I, InsertValueInst, serialiseInsertValueInst);
622
644
INST_SERIALISE (I, LoadInst, serialiseLoadInst);
623
645
INST_SERIALISE (I, ReturnInst, serialiseReturnInst);
646
+ INST_SERIALISE (I, SExtInst, serialiseSExtInst);
624
647
INST_SERIALISE (I, StoreInst, serialiseStoreInst);
625
648
626
649
// INST_SERIALISE does an early return upon a match, so if we get here then
0 commit comments