[CodeGen] Move printing MO_FPImmediate operands to MachineOperand::print

Work towards the unification of MIR and debug output by refactoring the
interfaces.

llvm-svn: 321110
This commit is contained in:
Francis Visoiu Mistrih 2017-12-19 21:47:00 +00:00
parent 8122660226
commit 3b265c8fcf
3 changed files with 3 additions and 27 deletions

View File

@ -774,6 +774,7 @@ void MIPrinter::print(const MachineInstr &MI, unsigned OpIdx,
LLVM_FALLTHROUGH; LLVM_FALLTHROUGH;
case MachineOperand::MO_Register: case MachineOperand::MO_Register:
case MachineOperand::MO_CImmediate: case MachineOperand::MO_CImmediate:
case MachineOperand::MO_FPImmediate:
case MachineOperand::MO_MachineBasicBlock: case MachineOperand::MO_MachineBasicBlock:
case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_ConstantPoolIndex:
case MachineOperand::MO_TargetIndex: case MachineOperand::MO_TargetIndex:
@ -792,9 +793,6 @@ void MIPrinter::print(const MachineInstr &MI, unsigned OpIdx,
TiedOperandIdx, TRI, TII); TiedOperandIdx, TRI, TII);
break; break;
} }
case MachineOperand::MO_FPImmediate:
Op.getFPImm()->printAsOperand(OS, /*PrintType=*/true, MST);
break;
case MachineOperand::MO_FrameIndex: case MachineOperand::MO_FrameIndex:
printStackObjectReference(Op.getIndex()); printStackObjectReference(Op.getIndex());
break; break;

View File

@ -678,29 +678,7 @@ void MachineOperand::print(raw_ostream &OS, ModuleSlotTracker &MST,
getCImm()->printAsOperand(OS, /*PrintType=*/true, MST); getCImm()->printAsOperand(OS, /*PrintType=*/true, MST);
break; break;
case MachineOperand::MO_FPImmediate: case MachineOperand::MO_FPImmediate:
if (getFPImm()->getType()->isFloatTy()) { getFPImm()->printAsOperand(OS, /*PrintType=*/true, MST);
OS << getFPImm()->getValueAPF().convertToFloat();
} else if (getFPImm()->getType()->isHalfTy()) {
APFloat APF = getFPImm()->getValueAPF();
bool Unused;
APF.convert(APFloat::IEEEsingle(), APFloat::rmNearestTiesToEven, &Unused);
OS << "half " << APF.convertToFloat();
} else if (getFPImm()->getType()->isFP128Ty()) {
APFloat APF = getFPImm()->getValueAPF();
SmallString<16> Str;
getFPImm()->getValueAPF().toString(Str);
OS << "quad " << Str;
} else if (getFPImm()->getType()->isX86_FP80Ty()) {
APFloat APF = getFPImm()->getValueAPF();
OS << "x86_fp80 0xK";
APInt API = APF.bitcastToAPInt();
OS << format_hex_no_prefix(API.getHiBits(16).getZExtValue(), 4,
/*Upper=*/true);
OS << format_hex_no_prefix(API.getLoBits(64).getZExtValue(), 16,
/*Upper=*/true);
} else {
OS << getFPImm()->getValueAPF().convertToDouble();
}
break; break;
case MachineOperand::MO_MachineBasicBlock: case MachineOperand::MO_MachineBasicBlock:
OS << printMBBReference(*getMBB()); OS << printMBBReference(*getMBB());

View File

@ -135,7 +135,7 @@ continue:
} }
; Check that we fallback on invoke translation failures. ; Check that we fallback on invoke translation failures.
; FALLBACK-WITH-REPORT-ERR: remark: <unknown>:0:0: unable to legalize instruction: %0:_(s128) = G_FCONSTANT quad 2 ; FALLBACK-WITH-REPORT-ERR: remark: <unknown>:0:0: unable to legalize instruction: %0:_(s128) = G_FCONSTANT fp128 0xL00000000000000004000000000000000
; FALLBACK-WITH-REPORT-ERR: warning: Instruction selection used fallback path for test_quad_dump ; FALLBACK-WITH-REPORT-ERR: warning: Instruction selection used fallback path for test_quad_dump
; FALLBACK-WITH-REPORT-OUT-LABEL: test_quad_dump: ; FALLBACK-WITH-REPORT-OUT-LABEL: test_quad_dump:
define fp128 @test_quad_dump() { define fp128 @test_quad_dump() {