CodegenVisitor.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "CodegenVisitor.h"
  2. #include <llvm/IR/Constants.h>
  3. #include <llvm/IR/IRBuilder.h>
  4. using namespace qlow;
  5. llvm::Value* CodegenVisitor::visit(sem::BinaryOperation& binop, llvm::IRBuilder<>& builder)
  6. {
  7. using llvm::Value;
  8. Value* left = binop.left->accept(*this, builder);
  9. Value* right = binop.right->accept(*this, builder);
  10. switch (binop.op) {
  11. case ast::Operation::Operator::PLUS:
  12. return builder.CreateAdd(left, right, "add");
  13. case ast::Operation::Operator::MINUS:
  14. return builder.CreateSub(left, right, "sub");
  15. case ast::Operation::Operator::ASTERISK:
  16. return builder.CreateMul(left, right, "mul");
  17. case ast::Operation::Operator::SLASH:
  18. return builder.CreateSDiv(left, right, "add");
  19. }
  20. }
  21. llvm::Value* CodegenVisitor::visit(sem::UnaryOperation& unop, llvm::IRBuilder<>& builder)
  22. {
  23. using llvm::Value;
  24. }
  25. llvm::Value* CodegenVisitor::visit(sem::FeatureCallExpression& binop, llvm::IRBuilder<>& builder)
  26. {
  27. using llvm::Value;
  28. }
  29. llvm::Value* CodegenVisitor::visit(sem::IntConst& node, llvm::IRBuilder<>& builder)
  30. {
  31. return llvm::ConstantInt::get(builder.getContext(), llvm::APInt(32, std::to_string(node.value), 10));
  32. }