From c82d6a237d128aeb3d1765f4ee22c9f9dffb2fdd Mon Sep 17 00:00:00 2001 From: Rochas Date: Wed, 30 Apr 2025 19:12:28 +0200 Subject: [PATCH] clean PrettyPrinterLLVM --- .../TP2/llvm/PrettyprinterLLVM_Visitor.java | 154 ++++++++++-------- 1 file changed, 88 insertions(+), 66 deletions(-) diff --git a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java index ac8e989..4bc0ac2 100644 --- a/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java +++ b/src/main/java/TP2/llvm/PrettyprinterLLVM_Visitor.java @@ -14,6 +14,8 @@ TypeLLVMVisitor { static String INDENT = " "; + //PROGRAMME --------------------------------------------- + @Override public String visitProgramLLVM(ProgramLLVMImp prog, String indent) { StringBuilder str = new StringBuilder(); @@ -40,6 +42,8 @@ TypeLLVMVisitor return str.toString(); } + //DEFINE --------------------------------------------- + @Override public String visitDefineLLVM(DefineLLVMImp define, String indent) { StringBuilder str = new StringBuilder("define "); @@ -60,6 +64,9 @@ TypeLLVMVisitor return str.toString(); } + + //INSTRUCTION --------------------------------------------- + @Override public String visitReturnLLVM(ReturnLLVMImp instr, String h) { if (instr.e() == null) { @@ -69,11 +76,51 @@ TypeLLVMVisitor } } + @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 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 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 , , - 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 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 , , + 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";