Skip to content

Commit

Permalink
Correct JuliaInstVisitor::visit(::CastInst* inst) and JuliaInstVisito…
Browse files Browse the repository at this point in the history
…r::visit(FunCallInst* inst).
  • Loading branch information
sletz committed Jul 23, 2021
1 parent 306341b commit a147671
Showing 1 changed file with 21 additions and 6 deletions.
27 changes: 21 additions & 6 deletions compiler/generator/julia/julia_instructions.hh
Original file line number Diff line number Diff line change
Expand Up @@ -490,7 +490,12 @@ class JuliaInstVisitor : public TextInstVisitor {

virtual void visit(::CastInst* inst)
{
*fOut << fTypeManager->generateType(inst->fType) << "(";
if (isIntType(inst->fType->getType())) {
*fOut << "floor(";
*fOut << fTypeManager->generateType(inst->fType) << ", ";
} else {
*fOut << fTypeManager->generateType(inst->fType) << "(";
}
inst->fInst->accept(this);
*fOut << ")";
}
Expand All @@ -503,11 +508,21 @@ class JuliaInstVisitor : public TextInstVisitor {
virtual void visit(FunCallInst* inst)
{
string name = (gPolyMathLibTable.find(inst->fName) != gPolyMathLibTable.end()) ? gPolyMathLibTable[inst->fName] : inst->fName;
*fOut << gGlobal->getMathFunction(name) << "(";

// Compile parameters
generateFunCallArgs(inst->fArgs.begin(), inst->fArgs.end(), inst->fArgs.size());
*fOut << ")";
// Special syntax for pow(x, y) => x ^ y;
if (name == "pow") {
auto arg = inst->fArgs.begin();
*fOut << "(";
(*arg)->accept(this);
*fOut << " ^ ";
++arg;
(*arg)->accept(this);
*fOut << ")";
} else {
*fOut << name << "(";
// Compile parameters
generateFunCallArgs(inst->fArgs.begin(), inst->fArgs.end(), inst->fArgs.size());
*fOut << ")";
}
}

virtual void visit(IfInst* inst)
Expand Down

0 comments on commit a147671

Please sign in to comment.