Skip to content

Commit 515169b

Browse files
author
Romaric JODIN
committed
dpu: llvm: use physical register for mul16 to avoid register spilling
1 parent 1dddc96 commit 515169b

File tree

1 file changed

+22
-27
lines changed

1 file changed

+22
-27
lines changed

llvm/lib/Target/DPU/DPUTargetLowering.cpp

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1927,47 +1927,42 @@ EmitMul16WithCustomInserter(MachineInstr &MI, MachineBasicBlock *BB,
19271927
unsigned int Op1 = MI.getOperand(1).getReg();
19281928
unsigned int Op2 = MI.getOperand(2).getReg();
19291929

1930-
MachineRegisterInfo &RI = F->getRegInfo();
1931-
unsigned RegMulLLOp1Op2 = RI.createVirtualRegister(&DPU::GP_REGRegClass);
1932-
unsigned RegMulHHOp1Op2 = RI.createVirtualRegister(&DPU::GP_REGRegClass);
1933-
unsigned RegMulHLOp1Op2 = RI.createVirtualRegister(&DPU::GP_REGRegClass);
1934-
unsigned RegMulHLOp2Op1 = RI.createVirtualRegister(&DPU::GP_REGRegClass);
1935-
unsigned RegLSL1 = RI.createVirtualRegister(&DPU::GP_REGRegClass);
1936-
unsigned RegLSL2 = RI.createVirtualRegister(&DPU::GP_REGRegClass);
1937-
unsigned RegLSL3 = RI.createVirtualRegister(&DPU::GP_REGRegClass);
1938-
1939-
BuildMI(BB, dl, TII.get(MulLL), RegMulLLOp1Op2)
1930+
unsigned int RegDest = DPU::R12;
1931+
unsigned int RegAcc = DPU::R13;
1932+
1933+
BB->addLiveIn(RegDest);
1934+
BuildMI(BB, dl, TII.get(MulLL), RegDest)
19401935
.addReg(Op1)
19411936
.addReg(Op2)
19421937
.addImm(DPUAsmCondition::Small)
19431938
.addMBB(fastMBB);
19441939

1945-
BuildMI(slowMBB, dl, TII.get(MulHL), RegMulHLOp1Op2).addReg(Op1).addReg(Op2);
1940+
slowMBB->addLiveIn(RegDest);
1941+
slowMBB->addLiveIn(RegAcc);
1942+
BuildMI(slowMBB, dl, TII.get(MulHL), RegAcc).addReg(Op1).addReg(Op2);
19461943

1947-
BuildMI(slowMBB, dl, TII.get(DPU::LSL_ADDrrri), RegLSL1)
1948-
.addReg(RegMulLLOp1Op2)
1949-
.addReg(RegMulHLOp1Op2)
1944+
BuildMI(slowMBB, dl, TII.get(DPU::LSL_ADDrrri), RegDest)
1945+
.addReg(RegDest)
1946+
.addReg(RegAcc)
19501947
.addImm(8);
19511948

1952-
BuildMI(slowMBB, dl, TII.get(MulHL), RegMulHLOp2Op1).addReg(Op2).addReg(Op1);
1949+
BuildMI(slowMBB, dl, TII.get(MulHL), RegAcc).addReg(Op2).addReg(Op1);
19531950

1954-
BuildMI(slowMBB, dl, TII.get(DPU::LSL_ADDrrri), RegLSL2)
1955-
.addReg(RegLSL1)
1956-
.addReg(RegMulHLOp2Op1)
1951+
BuildMI(slowMBB, dl, TII.get(DPU::LSL_ADDrrri), RegDest)
1952+
.addReg(RegDest)
1953+
.addReg(RegAcc)
19571954
.addImm(8);
19581955

1959-
BuildMI(slowMBB, dl, TII.get(MulHH), RegMulHHOp1Op2).addReg(Op1).addReg(Op2);
1956+
BuildMI(slowMBB, dl, TII.get(MulHH), RegAcc).addReg(Op1).addReg(Op2);
19601957

1961-
BuildMI(slowMBB, dl, TII.get(DPU::LSL_ADDrrri), RegLSL3)
1962-
.addReg(RegLSL2)
1963-
.addReg(RegMulHHOp1Op2)
1958+
BuildMI(slowMBB, dl, TII.get(DPU::LSL_ADDrrri), RegDest)
1959+
.addReg(RegDest)
1960+
.addReg(RegAcc)
19641961
.addImm(16);
19651962

1966-
BuildMI(*fastMBB, fastMBB->begin(), dl, TII.get(DPU::PHI), Dest)
1967-
.addReg(RegMulLLOp1Op2)
1968-
.addMBB(BB)
1969-
.addReg(RegLSL3)
1970-
.addMBB(slowMBB);
1963+
fastMBB->addLiveIn(RegDest);
1964+
BuildMI(*fastMBB, fastMBB->begin(), dl, TII.get(TargetOpcode::COPY), Dest)
1965+
.addReg(RegDest);
19711966

19721967
MI.eraseFromParent(); // The pseudo instruction is gone now.
19731968
return fastMBB;

0 commit comments

Comments
 (0)