Skip to content

Commit c24768e

Browse files
authored
Merge pull request rust-lang#117 from ptersilie/newcg_binops
Serialise binary operations.
2 parents a136c83 + 1d1d7cd commit c24768e

File tree

1 file changed

+93
-1
lines changed

1 file changed

+93
-1
lines changed

llvm/lib/YkIR/YkIRWriter.cpp

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,24 @@ enum OpCode {
4747
Ret,
4848
InsertValue,
4949
PtrAdd,
50+
Add,
51+
Sub,
52+
Mul,
53+
Or,
54+
And,
55+
Xor,
56+
Shl,
57+
AShr,
58+
FAdd,
59+
FDiv,
60+
FMul,
61+
FRem,
62+
FSub,
63+
LShr,
64+
SDiv,
65+
SRem,
66+
UDiv,
67+
URem,
5068
UnimplementedInstruction = 255, // YKFIXME: Will eventually be deleted.
5169
};
5270

@@ -278,6 +296,80 @@ class YkIRWriter {
278296
InstIdx++;
279297
}
280298

299+
void serialiseBinaryOperation(llvm::BinaryOperator *I,
300+
ValueLoweringMap &VLMap, unsigned BBIdx,
301+
unsigned &InstIdx) {
302+
OutStreamer.emitSizeT(typeIndex(I->getType()));
303+
serialiseBinOpcode(I->getOpcode());
304+
OutStreamer.emitInt32(I->getNumOperands());
305+
for (Value *O : I->operands()) {
306+
serialiseOperand(I, VLMap, O);
307+
}
308+
VLMap[I] = {BBIdx, InstIdx};
309+
InstIdx++;
310+
}
311+
312+
void serialiseBinOpcode(Instruction::BinaryOps BO) {
313+
switch (BO) {
314+
case Instruction::BinaryOps::Add:
315+
OutStreamer.emitInt8(OpCode::Add);
316+
break;
317+
case Instruction::BinaryOps::Sub:
318+
OutStreamer.emitInt8(OpCode::Sub);
319+
break;
320+
case Instruction::BinaryOps::Mul:
321+
OutStreamer.emitInt8(OpCode::Mul);
322+
break;
323+
case Instruction::BinaryOps::Or:
324+
OutStreamer.emitInt8(OpCode::Or);
325+
break;
326+
case Instruction::BinaryOps::And:
327+
OutStreamer.emitInt8(OpCode::And);
328+
break;
329+
case Instruction::BinaryOps::Xor:
330+
OutStreamer.emitInt8(OpCode::Xor);
331+
break;
332+
case Instruction::BinaryOps::Shl:
333+
OutStreamer.emitInt8(OpCode::Shl);
334+
break;
335+
case Instruction::BinaryOps::AShr:
336+
OutStreamer.emitInt8(OpCode::AShr);
337+
break;
338+
case Instruction::BinaryOps::FAdd:
339+
OutStreamer.emitInt8(OpCode::FAdd);
340+
break;
341+
case Instruction::BinaryOps::FDiv:
342+
OutStreamer.emitInt8(OpCode::FDiv);
343+
break;
344+
case Instruction::BinaryOps::FMul:
345+
OutStreamer.emitInt8(OpCode::FMul);
346+
break;
347+
case Instruction::BinaryOps::FRem:
348+
OutStreamer.emitInt8(OpCode::FRem);
349+
break;
350+
case Instruction::BinaryOps::FSub:
351+
OutStreamer.emitInt8(OpCode::FSub);
352+
break;
353+
case Instruction::BinaryOps::LShr:
354+
OutStreamer.emitInt8(OpCode::LShr);
355+
break;
356+
case Instruction::BinaryOps::SDiv:
357+
OutStreamer.emitInt8(OpCode::SDiv);
358+
break;
359+
case Instruction::BinaryOps::SRem:
360+
OutStreamer.emitInt8(OpCode::SRem);
361+
break;
362+
case Instruction::BinaryOps::UDiv:
363+
OutStreamer.emitInt8(OpCode::UDiv);
364+
break;
365+
case Instruction::BinaryOps::URem:
366+
OutStreamer.emitInt8(OpCode::URem);
367+
break;
368+
case Instruction::BinaryOps::BinaryOpsEnd:
369+
break;
370+
}
371+
}
372+
281373
void serialiseAllocaInst(AllocaInst *I, ValueLoweringMap &VLMap,
282374
unsigned BBIdx, unsigned &InstIdx) {
283375
// type_index:
@@ -393,7 +485,6 @@ class YkIRWriter {
393485
GENERIC_INST_SERIALISE(I, LoadInst, Load)
394486
GENERIC_INST_SERIALISE(I, StoreInst, Store)
395487
GENERIC_INST_SERIALISE(I, ICmpInst, ICmp)
396-
GENERIC_INST_SERIALISE(I, llvm::BinaryOperator, BinaryOperator)
397488
GENERIC_INST_SERIALISE(I, ReturnInst, Ret)
398489
GENERIC_INST_SERIALISE(I, llvm::InsertValueInst, InsertValue)
399490
GENERIC_INST_SERIALISE(I, StoreInst, Store)
@@ -402,6 +493,7 @@ class YkIRWriter {
402493
CUSTOM_INST_SERIALISE(I, CallInst, serialiseCallInst)
403494
CUSTOM_INST_SERIALISE(I, BranchInst, serialiseBranchInst)
404495
CUSTOM_INST_SERIALISE(I, GetElementPtrInst, serialiseGetElementPtr)
496+
CUSTOM_INST_SERIALISE(I, llvm::BinaryOperator, serialiseBinaryOperation)
405497

406498
// GENERIC_INST_SERIALISE and CUSTOM_INST_SERIALISE do an early return upon
407499
// a match, so if we get here then the instruction wasn't handled.

0 commit comments

Comments
 (0)