Skip to content

Commit d2eab13

Browse files
authored
Merge pull request rust-lang#140 from vext01/cast
Serialise sign extend instructions.
2 parents 8212ae1 + 100eaf8 commit d2eab13

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

llvm/lib/YkIR/YkIRWriter.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
7378
enum 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

Comments
 (0)