Skip to content

Commit

Permalink
[mips] Small update to the logic behind the expansion of assembly pse…
Browse files Browse the repository at this point in the history
…udo instructions.

Summary:
The functions that do the expansion now return false on success and true otherwise. This is so
we can catch some errors during the expansion (e.g.: immediate too large). The next patch adds some test cases.

Reviewers: vmedic

Reviewed By: vmedic

Differential Revision: http://reviews.llvm.org/D4214

llvm-svn: 211269
  • Loading branch information
Matheus Almeida committed Jun 19, 2014
1 parent 8bb5fb0 commit 3813d57
Showing 1 changed file with 20 additions and 9 deletions.
29 changes: 20 additions & 9 deletions llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
Expand Up @@ -116,14 +116,20 @@ class MipsAsmParser : public MCTargetAsmParser {

bool needsExpansion(MCInst &Inst);

void expandInstruction(MCInst &Inst, SMLoc IDLoc,
// Expands assembly pseudo instructions.
// Returns false on success, true otherwise.
bool expandInstruction(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions);
void expandLoadImm(MCInst &Inst, SMLoc IDLoc,

bool expandLoadImm(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions);
void expandLoadAddressImm(MCInst &Inst, SMLoc IDLoc,

bool expandLoadAddressImm(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions);
void expandLoadAddressReg(MCInst &Inst, SMLoc IDLoc,

bool expandLoadAddressReg(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions);

void expandMemInst(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions, bool isLoad,
bool isImmOpnd);
Expand Down Expand Up @@ -965,7 +971,7 @@ bool MipsAsmParser::processInstruction(MCInst &Inst, SMLoc IDLoc,
} // if load/store

if (needsExpansion(Inst))
expandInstruction(Inst, IDLoc, Instructions);
return expandInstruction(Inst, IDLoc, Instructions);
else
Instructions.push_back(Inst);

Expand All @@ -984,9 +990,11 @@ bool MipsAsmParser::needsExpansion(MCInst &Inst) {
}
}

void MipsAsmParser::expandInstruction(MCInst &Inst, SMLoc IDLoc,
bool MipsAsmParser::expandInstruction(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions) {
switch (Inst.getOpcode()) {
default: assert(0 && "unimplemented expansion");
return true;
case Mips::LoadImm32Reg:
return expandLoadImm(Inst, IDLoc, Instructions);
case Mips::LoadAddr32Imm:
Expand All @@ -996,7 +1004,7 @@ void MipsAsmParser::expandInstruction(MCInst &Inst, SMLoc IDLoc,
}
}

void MipsAsmParser::expandLoadImm(MCInst &Inst, SMLoc IDLoc,
bool MipsAsmParser::expandLoadImm(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions) {
MCInst tmpInst;
const MCOperand &ImmOp = Inst.getOperand(1);
Expand Down Expand Up @@ -1038,9 +1046,10 @@ void MipsAsmParser::expandLoadImm(MCInst &Inst, SMLoc IDLoc,
tmpInst.setLoc(IDLoc);
Instructions.push_back(tmpInst);
}
return false;
}

void
bool
MipsAsmParser::expandLoadAddressReg(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions) {
MCInst tmpInst;
Expand Down Expand Up @@ -1081,9 +1090,10 @@ MipsAsmParser::expandLoadAddressReg(MCInst &Inst, SMLoc IDLoc,
tmpInst.addOperand(MCOperand::CreateReg(SrcRegOp.getReg()));
Instructions.push_back(tmpInst);
}
return false;
}

void
bool
MipsAsmParser::expandLoadAddressImm(MCInst &Inst, SMLoc IDLoc,
SmallVectorImpl<MCInst> &Instructions) {
MCInst tmpInst;
Expand Down Expand Up @@ -1115,6 +1125,7 @@ MipsAsmParser::expandLoadAddressImm(MCInst &Inst, SMLoc IDLoc,
tmpInst.addOperand(MCOperand::CreateImm(ImmValue & 0xffff));
Instructions.push_back(tmpInst);
}
return false;
}

void MipsAsmParser::expandMemInst(MCInst &Inst, SMLoc IDLoc,
Expand Down

0 comments on commit 3813d57

Please sign in to comment.