Files
MY_COMPILER/midend/llvm/instr/LoadInstr.java
2025-12-12 20:14:00 +08:00

40 lines
1.2 KiB
Java
Executable File

package midend.llvm.instr;
import backend.mips.MipsBuilder;
import backend.mips.Register;
import backend.mips.instr.MipsLs;
import backend.mips.instr.type.MipsLsType;
import midend.llvm.type.IrPointerType;
import midend.llvm.value.IrValue;
public class LoadInstr extends IrInstr {
public LoadInstr(IrValue pointer, String name) {
super(((IrPointerType) pointer.getType()).getPointeeType(), name, IrInstrType.LOAD);
addUse(pointer);
}
public IrValue getPointer() {
return getUse(0);
}
public String toString() {
return getName() + " = load " + getType() + ", "
+ getPointer().getType() + " " + getPointer().getName();
}
public void toMips() {
IrValue pointer = getPointer();
Register reg = MipsBuilder.getRegister(pointer);
if (reg == null) { // 未分配寄存器情况
reg = Register.K0;
}
loadValueToReg(pointer, reg);
Register resultReg = MipsBuilder.getRegister(this);
if (resultReg == null) {
resultReg = Register.K1;
}
new MipsLs(MipsLsType.LW, resultReg, reg, 0);
saveResult(this, resultReg);
}
}