mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-03 14:31:10 +00:00
Make sure that for C++ emitting LwConstant32 pseudos, that it corresponds
to what is needed for constant islands. The prescan method for Mips16 constant islands will eventually go away. It is only temporary and should be done earlier when the instructions are first created or from the DAG. If we keep it here we need to handle better the situation where constant islands is called multiple times since don't want to prescan more than once. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195569 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1fcb390d43
commit
e77071da42
@ -281,7 +281,7 @@ void Mips16InstrInfo::adjustStackPtrBig(unsigned SP, int64_t Amount,
|
||||
//
|
||||
//
|
||||
MachineInstrBuilder MIB1 = BuildMI(MBB, I, DL, get(Mips::LwConstant32), Reg1);
|
||||
MIB1.addImm(Amount);
|
||||
MIB1.addImm(Amount).addImm(-1);
|
||||
MachineInstrBuilder MIB2 = BuildMI(MBB, I, DL, get(Mips::MoveR3216), Reg2);
|
||||
MIB2.addReg(Mips::SP, RegState::Kill);
|
||||
MachineInstrBuilder MIB3 = BuildMI(MBB, I, DL, get(Mips::AdduRxRyRz16), Reg1);
|
||||
@ -393,7 +393,7 @@ Mips16InstrInfo::loadImmediate(unsigned FrameReg,
|
||||
}
|
||||
else
|
||||
Available.reset(Reg);
|
||||
BuildMI(MBB, II, DL, get(Mips::LwConstant32), Reg).addImm(Imm);
|
||||
BuildMI(MBB, II, DL, get(Mips::LwConstant32), Reg).addImm(Imm).addImm(-1);
|
||||
NewImm = 0;
|
||||
if (FrameReg == Mips::SP) {
|
||||
SpReg = Available.find_first();
|
||||
|
@ -1518,13 +1518,13 @@ MipsConstantIslands::fixupConditionalBr(ImmBranch &Br) {
|
||||
void MipsConstantIslands::prescanForConstants() {
|
||||
unsigned J = 0;
|
||||
(void)J;
|
||||
PrescannedForConstants = true;
|
||||
for (MachineFunction::iterator B =
|
||||
MF->begin(), E = MF->end(); B != E; ++B) {
|
||||
for (MachineBasicBlock::instr_iterator I =
|
||||
B->instr_begin(), EB = B->instr_end(); I != EB; ++I) {
|
||||
switch(I->getDesc().getOpcode()) {
|
||||
case Mips::LwConstant32: {
|
||||
PrescannedForConstants = true;
|
||||
DEBUG(dbgs() << "constant island constant " << *I << "\n");
|
||||
J = I->getNumOperands();
|
||||
DEBUG(dbgs() << "num operands " << J << "\n");
|
||||
|
@ -1,5 +1,6 @@
|
||||
; RUN: llc -march=mipsel -mcpu=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=1
|
||||
; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=1
|
||||
|
||||
; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -soft-float -mips16-hard-float -relocation-model=pic -mips16-constant-islands < %s | FileCheck %s -check-prefix=ci
|
||||
|
||||
@i = common global i32 0, align 4
|
||||
@j = common global i32 0, align 4
|
||||
@ -71,4 +72,5 @@ entry:
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
; ci: lw ${{[0-9]+}}, $CPI{{[0-9]+}}_{{[0-9]+}}
|
||||
declare i32 @printf(i8*, ...)
|
||||
|
Loading…
x
Reference in New Issue
Block a user