mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 20:59:51 +00:00
Add extra sign extension to the same bit width before int sign
extension to another bit width. This is needed to get correct singed value. Patch by Artur Pietrek! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75629 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e9fd67e2c6
commit
94ac0343cc
@ -670,12 +670,18 @@ void MSILWriter::printIndirectSave(const Type* Ty) {
|
||||
|
||||
|
||||
void MSILWriter::printCastInstruction(unsigned int Op, const Value* V,
|
||||
const Type* Ty) {
|
||||
const Type* Ty, const Type* SrcTy) {
|
||||
std::string Tmp("");
|
||||
printValueLoad(V);
|
||||
switch (Op) {
|
||||
// Signed
|
||||
case Instruction::SExt:
|
||||
// If sign extending int, convert first from unsigned to signed
|
||||
// with the same bit size - because otherwise we will loose the sign.
|
||||
if (SrcTy) {
|
||||
Tmp = "conv."+getTypePostfix(SrcTy,false,true);
|
||||
printSimpleInstruction(Tmp.c_str());
|
||||
}
|
||||
case Instruction::SIToFP:
|
||||
case Instruction::FPToSI:
|
||||
Tmp = "conv."+getTypePostfix(Ty,false,true);
|
||||
@ -1152,9 +1158,13 @@ void MSILWriter::printInstruction(const Instruction* Inst) {
|
||||
case Instruction::Store:
|
||||
printIndirectSave(Inst->getOperand(1), Inst->getOperand(0));
|
||||
break;
|
||||
case Instruction::SExt:
|
||||
printCastInstruction(Inst->getOpcode(),Left,
|
||||
cast<CastInst>(Inst)->getDestTy(),
|
||||
cast<CastInst>(Inst)->getSrcTy());
|
||||
break;
|
||||
case Instruction::Trunc:
|
||||
case Instruction::ZExt:
|
||||
case Instruction::SExt:
|
||||
case Instruction::FPTrunc:
|
||||
case Instruction::FPExt:
|
||||
case Instruction::UIToFP:
|
||||
|
@ -187,7 +187,7 @@ namespace {
|
||||
void printIndirectSave(const Type* Ty);
|
||||
|
||||
void printCastInstruction(unsigned int Op, const Value* V,
|
||||
const Type* Ty);
|
||||
const Type* Ty, const Type* SrcTy=0);
|
||||
|
||||
void printGepInstruction(const Value* V, gep_type_iterator I,
|
||||
gep_type_iterator E);
|
||||
|
Loading…
Reference in New Issue
Block a user