llvmir some opt

This commit is contained in:
邓智航
2025-12-10 17:58:17 +08:00
commit 84827838e2
103 changed files with 5838 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
package midend.llvm.constant;
import midend.llvm.value.IrValue;
import midend.llvm.type.IrType;
public class IrConstant extends IrValue {
public IrConstant(IrType type, String name) {
super(type, name);
}
public String toString() {
return "";
}
}

View File

@@ -0,0 +1,47 @@
package midend.llvm.constant;
import java.util.ArrayList;
import midend.llvm.type.IrInterType;
import midend.llvm.type.IrArrayType;
public class IrConstantArray extends IrConstant {
private ArrayList<IrConstant> elements;
private int size;
public IrConstantArray(String name, ArrayList<IrConstant> elements, int size) {
super(new IrArrayType(IrInterType.INT32, size), name);
this.elements = elements == null ? new ArrayList<>() : new ArrayList<>(elements);
this.size = size;
}
public ArrayList<IrConstant> getElements() {
return elements;
}
public int getSize() {
return size;
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getType().toString() + " ");
if (elements.size() == 0) {
sb.append("zeroinitializer");
} else {
sb.append("[");
for (IrConstant element : elements) {
sb.append(element.toString());
if (element != elements.get(elements.size() - 1)) {
sb.append(", ");
}
}
int left = size - elements.size();
for (int i = 0; i < left; i++) {
sb.append(", i32 0");
}
sb.append("]");
}
return sb.toString();
}
}

View File

@@ -0,0 +1,20 @@
package midend.llvm.constant;
import midend.llvm.type.IrInterType;
public class IrConstantInt extends IrConstant {
private int value;
public IrConstantInt(int value) {
super(IrInterType.INT32, value + "");
this.value = value;
}
public int getValue() {
return value;
}
public String toString() {
return "i32 " + value;
}
}

View File

@@ -0,0 +1,53 @@
package midend.llvm.constant;
import midend.llvm.type.IrArrayType;
import midend.llvm.type.IrPointerType;
import midend.llvm.type.IrInterType;
public class IrConstantStr extends IrConstant {
private String value;
public IrConstantStr(String value, String name) {
super(new IrPointerType(
new IrArrayType(IrInterType.INT8, getLen(value) + 1)), name);
this.value = value;
}
public String getValue() {
return value;
}
public static int getLen(String value) {
int len = 0;
for (int i = 0; i < value.length(); i++) {
if (value.charAt(i) == '\\') {
i++;
} else if (value.charAt(i) == '"') {
continue;
}
len++;
}
return len;
}
public static String getRealStr(String str) {
boolean start = str.charAt(0) == '"';
boolean end = str.charAt(str.length() - 1) == '"';
if (start && end) {
return str.substring(1, str.length() - 1);
} else if (start) {
return str.substring(1);
} else if (end) {
return str.substring(0, str.length() - 1);
}
return str;
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getName() + " = constant " + ((IrPointerType) getType()).getPointeeType());
sb.append(" c\"" + getRealStr(value).replace("\\n", "\\0A"));
sb.append("\\00\"");
return sb.toString();
}
}