clean PrettyPrinterLLVM
This commit is contained in:
@@ -14,6 +14,8 @@ TypeLLVMVisitor<String,String>
|
||||
{
|
||||
static String INDENT = " ";
|
||||
|
||||
//PROGRAMME ---------------------------------------------
|
||||
|
||||
@Override
|
||||
public String visitProgramLLVM(ProgramLLVMImp prog, String indent) {
|
||||
StringBuilder str = new StringBuilder();
|
||||
@@ -40,6 +42,8 @@ TypeLLVMVisitor<String,String>
|
||||
return str.toString();
|
||||
}
|
||||
|
||||
//DEFINE ---------------------------------------------
|
||||
|
||||
@Override
|
||||
public String visitDefineLLVM(DefineLLVMImp define, String indent) {
|
||||
StringBuilder str = new StringBuilder("define ");
|
||||
@@ -60,6 +64,9 @@ TypeLLVMVisitor<String,String>
|
||||
return str.toString();
|
||||
}
|
||||
|
||||
|
||||
//INSTRUCTION ---------------------------------------------
|
||||
|
||||
@Override
|
||||
public String visitReturnLLVM(ReturnLLVMImp instr, String h) {
|
||||
if (instr.e() == null) {
|
||||
@@ -69,11 +76,51 @@ TypeLLVMVisitor<String,String>
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String visitAssignLLVM(AssignLLVMImp instr, String h) {
|
||||
return INDENT+instr.var().accept(this, h) + " = " + instr.e().accept(this, h);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String visitStoreLLVM(StoreLLVMImp instr, String h) {
|
||||
return INDENT+"store " + instr.type().accept(this, "") + " " + instr.e().accept(this, "") + ", " + new PointerLLVMImp(instr.type()).accept(this, "") + " " + instr.var().accept(this,"");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitPrintLLVM(PrintLLVMImp instr, String h) { //TODO
|
||||
DefineLLVMImp printLLVM = new DefineLLVMImp("printf", new IntLLVMImp(), new ArrayList<>(), new ArrayList<>());
|
||||
CallVoidLLVMImp callPrint = new CallVoidLLVMImp(printLLVM, instr.l(),"(i8*, ...)");
|
||||
return callPrint.accept(this, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitScanLLVM(ScanLLVMImp instr, String h) { //TODO
|
||||
DefineLLVMImp readLLVM = new DefineLLVMImp("scanf", new IntLLVMImp(), new ArrayList<>(), new ArrayList<>());
|
||||
CallVoidLLVMImp callRead = new CallVoidLLVMImp(readLLVM, instr.l(),"(i8*, ...)");
|
||||
return callRead.accept(this, h);
|
||||
}
|
||||
|
||||
//label
|
||||
@Override
|
||||
public String visitLabelLLVM(LabelLLVMImp instr, String h) {
|
||||
return instr.name()+":";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String visitBrLLVM(BrLLVMImp instr, String h) {
|
||||
return INDENT+"br label %" + instr.label();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String visitBrCondLLVM(BrCondLLVMImp instr, String h) {
|
||||
return INDENT+"br " + instr.var().type().accept(this, h) +" "+ instr.var().accept(this, h) + ", label %" + instr.label() + ", label %" + instr.labelElse() ;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String visitCallVoidLLVM(CallVoidLLVMImp instr, String h) {
|
||||
String str = INDENT+ "call " + instr.f().type().accept(this, h) + " " + instr.str() + " @"+instr.f().name() + "(";
|
||||
@@ -84,17 +131,19 @@ TypeLLVMVisitor<String,String>
|
||||
return str + ")";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitCallLLVM(CallLLVMImp instr, String h) {
|
||||
String str = "call " + instr.f().type().accept(this, h) + " " + instr.str() + " @" + instr.f().name() + "(";
|
||||
|
||||
for (int i = 0; i < instr.params().size(); i++) {
|
||||
str += instr.params().get(i).getType().accept(this, h) + " " + instr.params().get(i).accept(this, h);
|
||||
if (i < instr.params().size() - 1) str += ", ";
|
||||
}
|
||||
return str + ")";
|
||||
@Override
|
||||
public String visitDeclarGlobalLLVM(DeclarGlobalLLVMImp instr, String h) {
|
||||
String str = "@"+instr.var().nom() + " = global";
|
||||
str += " [" + instr.size() + " x "+ instr.type().accept(this, h) + "] ";
|
||||
str+= "c\""+ instr.str()+"\"\n";
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
//EXPRESSION ---------------------------------------------
|
||||
|
||||
@Override
|
||||
public String visitBinOpLLVM(BinOpLLVMImp e, String h) {
|
||||
String str = "";
|
||||
@@ -120,81 +169,25 @@ TypeLLVMVisitor<String,String>
|
||||
return str + e.type().accept(this,h) + " " + e.val1().accept(this,h) + ", " + e.val2().accept(this,h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitGetElementPtrLLVM(GetElementPtr exp, String h) {
|
||||
PointerLLVMImp type = (PointerLLVMImp)exp.getType();
|
||||
//getelementptr <type de sortie>, <type d'entrée> <Var d'entrée>, <type de l'indice> <indice>
|
||||
return "getelementptr " + type.type().accept(this, h)+ ", " + exp.ptrVar().type().accept(this, h) + " " + exp.ptrVar().accept(this, h) + ", " + exp.i().getType().accept(this, h) + exp.i().accept(this, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitIcmpLLVM(IcmpLLVMImp e, String h) {
|
||||
return "icmp ne " + e.val1().getType().accept(this, h) +" "+ e.val1().accept(this, h) + ", " + e.val2().accept(this, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitAllocaLLVM(allocaLLVMImp e, String h) {
|
||||
return "alloca " + e.type().accept(this, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitStoreLLVM(StoreLLVMImp instr, String h) {
|
||||
return INDENT+"store " + instr.type().accept(this, "") + " " + instr.e().accept(this, "") + ", " + new PointerLLVMImp(instr.type()).accept(this, "") + " " + instr.var().accept(this,"");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String visitLoadLLVM(LoadLLVMImp e, String h) {
|
||||
return "load" + " " + e.getType().accept(this, h) + ", "+ new PointerLLVMImp(e.getType()).accept(this, h) + " " + e.val().accept(this, h);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String visitPrintLLVM(PrintLLVMImp instr, String h) { //TODO
|
||||
DefineLLVMImp printLLVM = new DefineLLVMImp("printf", new IntLLVMImp(), new ArrayList<>(), new ArrayList<>());
|
||||
CallVoidLLVMImp callPrint = new CallVoidLLVMImp(printLLVM, instr.l(),"(i8*, ...)");
|
||||
return callPrint.accept(this, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitScanLLVM(ScanLLVMImp instr, String h) { //TODO
|
||||
DefineLLVMImp readLLVM = new DefineLLVMImp("scanf", new IntLLVMImp(), new ArrayList<>(), new ArrayList<>());
|
||||
CallVoidLLVMImp callRead = new CallVoidLLVMImp(readLLVM, instr.l(),"(i8*, ...)");
|
||||
return callRead.accept(this, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitDeclarGlobalLLVM(DeclarGlobalLLVMImp instr, String h) {
|
||||
String str = "@"+instr.var().nom() + " = global";
|
||||
str += " [" + instr.size() + " x "+ instr.type().accept(this, h) + "] ";
|
||||
str+= "c\""+ instr.str()+"\"\n";
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
//label
|
||||
@Override
|
||||
public String visitLabelLLVM(LabelLLVMImp instr, String h) {
|
||||
return instr.name()+":";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitBrLLVM(BrLLVMImp instr, String h) {
|
||||
return INDENT+"br label %" + instr.label();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String visitBrCondLLVM(BrCondLLVMImp instr, String h) {
|
||||
return INDENT+"br " + instr.var().type().accept(this, h) +" "+ instr.var().accept(this, h) + ", label %" + instr.label() + ", label %" + instr.labelElse() ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//var et val
|
||||
@Override
|
||||
public String visitValLLVM(ValLLVMImp e, String h) {
|
||||
return e.val() + "";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String visitVarLLVM(VarLLVMImp e, String h) {
|
||||
String prefix = "%";
|
||||
@@ -202,6 +195,35 @@ TypeLLVMVisitor<String,String>
|
||||
return prefix+e.nom();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String visitIcmpLLVM(IcmpLLVMImp e, String h) {
|
||||
return "icmp ne " + e.val1().getType().accept(this, h) +" "+ e.val1().accept(this, h) + ", " + e.val2().accept(this, h);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String visitCallLLVM(CallLLVMImp instr, String h) {
|
||||
String str = "call " + instr.f().type().accept(this, h) + " " + instr.str() + " @" + instr.f().name() + "(";
|
||||
|
||||
for (int i = 0; i < instr.params().size(); i++) {
|
||||
str += instr.params().get(i).getType().accept(this, h) + " " + instr.params().get(i).accept(this, h);
|
||||
if (i < instr.params().size() - 1) str += ", ";
|
||||
}
|
||||
return str + ")";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String visitGetElementPtrLLVM(GetElementPtr exp, String h) {
|
||||
PointerLLVMImp type = (PointerLLVMImp)exp.getType();
|
||||
//getelementptr <type de sortie>, <type d'entrée> <Var d'entrée>, <type de l'indice> <indice>
|
||||
return "getelementptr " + type.type().accept(this, h)+ ", " + exp.ptrVar().type().accept(this, h) + " " + exp.ptrVar().accept(this, h) + ", " + exp.i().getType().accept(this, h) + exp.i().accept(this, h);
|
||||
}
|
||||
|
||||
|
||||
//TYPE ---------------------------------------------
|
||||
|
||||
@Override
|
||||
public String visitIntLLVM(IntLLVMImp e, String h) {
|
||||
return "i32";
|
||||
|
||||
Reference in New Issue
Block a user