clean PrettyPrinterLLVM
This commit is contained in:
@@ -14,6 +14,8 @@ TypeLLVMVisitor<String,String>
|
|||||||
{
|
{
|
||||||
static String INDENT = " ";
|
static String INDENT = " ";
|
||||||
|
|
||||||
|
//PROGRAMME ---------------------------------------------
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String visitProgramLLVM(ProgramLLVMImp prog, String indent) {
|
public String visitProgramLLVM(ProgramLLVMImp prog, String indent) {
|
||||||
StringBuilder str = new StringBuilder();
|
StringBuilder str = new StringBuilder();
|
||||||
@@ -40,6 +42,8 @@ TypeLLVMVisitor<String,String>
|
|||||||
return str.toString();
|
return str.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//DEFINE ---------------------------------------------
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String visitDefineLLVM(DefineLLVMImp define, String indent) {
|
public String visitDefineLLVM(DefineLLVMImp define, String indent) {
|
||||||
StringBuilder str = new StringBuilder("define ");
|
StringBuilder str = new StringBuilder("define ");
|
||||||
@@ -60,6 +64,9 @@ TypeLLVMVisitor<String,String>
|
|||||||
return str.toString();
|
return str.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//INSTRUCTION ---------------------------------------------
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String visitReturnLLVM(ReturnLLVMImp instr, String h) {
|
public String visitReturnLLVM(ReturnLLVMImp instr, String h) {
|
||||||
if (instr.e() == null) {
|
if (instr.e() == null) {
|
||||||
@@ -69,11 +76,51 @@ TypeLLVMVisitor<String,String>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String visitAssignLLVM(AssignLLVMImp instr, String h) {
|
public String visitAssignLLVM(AssignLLVMImp instr, String h) {
|
||||||
return INDENT+instr.var().accept(this, h) + " = " + instr.e().accept(this, 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
|
@Override
|
||||||
public String visitCallVoidLLVM(CallVoidLLVMImp instr, String h) {
|
public String visitCallVoidLLVM(CallVoidLLVMImp instr, String h) {
|
||||||
String str = INDENT+ "call " + instr.f().type().accept(this, h) + " " + instr.str() + " @"+instr.f().name() + "(";
|
String str = INDENT+ "call " + instr.f().type().accept(this, h) + " " + instr.str() + " @"+instr.f().name() + "(";
|
||||||
@@ -84,17 +131,19 @@ TypeLLVMVisitor<String,String>
|
|||||||
return str + ")";
|
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++) {
|
@Override
|
||||||
str += instr.params().get(i).getType().accept(this, h) + " " + instr.params().get(i).accept(this, h);
|
public String visitDeclarGlobalLLVM(DeclarGlobalLLVMImp instr, String h) {
|
||||||
if (i < instr.params().size() - 1) str += ", ";
|
String str = "@"+instr.var().nom() + " = global";
|
||||||
}
|
str += " [" + instr.size() + " x "+ instr.type().accept(this, h) + "] ";
|
||||||
return str + ")";
|
str+= "c\""+ instr.str()+"\"\n";
|
||||||
|
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//EXPRESSION ---------------------------------------------
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String visitBinOpLLVM(BinOpLLVMImp e, String h) {
|
public String visitBinOpLLVM(BinOpLLVMImp e, String h) {
|
||||||
String str = "";
|
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);
|
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
|
@Override
|
||||||
public String visitAllocaLLVM(allocaLLVMImp e, String h) {
|
public String visitAllocaLLVM(allocaLLVMImp e, String h) {
|
||||||
return "alloca " + e.type().accept(this, 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
|
@Override
|
||||||
public String visitLoadLLVM(LoadLLVMImp e, String h) {
|
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);
|
return "load" + " " + e.getType().accept(this, h) + ", "+ new PointerLLVMImp(e.getType()).accept(this, h) + " " + e.val().accept(this, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//var et val
|
||||||
@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() ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String visitValLLVM(ValLLVMImp e, String h) {
|
public String visitValLLVM(ValLLVMImp e, String h) {
|
||||||
return e.val() + "";
|
return e.val() + "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String visitVarLLVM(VarLLVMImp e, String h) {
|
public String visitVarLLVM(VarLLVMImp e, String h) {
|
||||||
String prefix = "%";
|
String prefix = "%";
|
||||||
@@ -202,6 +195,35 @@ TypeLLVMVisitor<String,String>
|
|||||||
return prefix+e.nom();
|
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
|
@Override
|
||||||
public String visitIntLLVM(IntLLVMImp e, String h) {
|
public String visitIntLLVM(IntLLVMImp e, String h) {
|
||||||
return "i32";
|
return "i32";
|
||||||
|
|||||||
Reference in New Issue
Block a user