[llvm-commits] [llvm] r114064 - in /llvm/trunk: include/llvm/MC/MCInst.h lib/Target/ARM/ARMMCInstLower.cpp lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
Jim Grosbach
grosbach at apple.com
Wed Sep 15 20:45:22 PDT 2010
Author: grosbach
Date: Wed Sep 15 22:45:21 2010
New Revision: 114064
URL: http://llvm.org/viewvc/llvm-project?rev=114064&view=rev
Log:
store MC FP immediates as a double instead of as an APFloat, thus avoiding an
unnecessary dtor for MCOperand.
Modified:
llvm/trunk/include/llvm/MC/MCInst.h
llvm/trunk/lib/Target/ARM/ARMMCInstLower.cpp
llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp
llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
Modified: llvm/trunk/include/llvm/MC/MCInst.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCInst.h?rev=114064&r1=114063&r2=114064&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCInst.h (original)
+++ llvm/trunk/include/llvm/MC/MCInst.h Wed Sep 15 22:45:21 2010
@@ -16,7 +16,6 @@
#ifndef LLVM_MC_MCINST_H
#define LLVM_MC_MCINST_H
-#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/System/DataTypes.h"
@@ -42,11 +41,9 @@
union {
unsigned RegVal;
int64_t ImmVal;
+ double FPImmVal;
const MCExpr *ExprVal;
};
- // This can't go in the union due to the non-trivial copy constructor
- // of APFloat. It's still only valid for Kind == kFPImmediate, though.
- APFloat FPImmVal;
public:
MCOperand() : Kind(kInvalid), FPImmVal(0.0) {}
@@ -78,12 +75,12 @@
ImmVal = Val;
}
- const APFloat &getFPImm() const {
+ const double &getFPImm() const {
assert(isFPImm() && "This is not an FP immediate");
return FPImmVal;
}
- void setFPImm(const APFloat &Val) {
+ void setFPImm(double Val) {
assert(isFPImm() && "This is not an FP immediate");
FPImmVal = Val;
}
@@ -109,7 +106,7 @@
Op.ImmVal = Val;
return Op;
}
- static MCOperand CreateFPImm(const APFloat &Val) {
+ static MCOperand CreateFPImm(double Val) {
MCOperand Op;
Op.Kind = kFPImmediate;
Op.FPImmVal = Val;
Modified: llvm/trunk/lib/Target/ARM/ARMMCInstLower.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMMCInstLower.cpp?rev=114064&r1=114063&r2=114064&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMMCInstLower.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMMCInstLower.cpp Wed Sep 15 22:45:21 2010
@@ -157,7 +157,8 @@
MO.getBlockAddress()));
break;
case MachineOperand::MO_FPImmediate:
- MCOp = MCOperand::CreateFPImm(MO.getFPImm()->getValueAPF());
+ MCOp =
+ MCOperand::CreateFPImm(MO.getFPImm()->getValueAPF().convertToDouble());
break;
}
Modified: llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp?rev=114064&r1=114063&r2=114064&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp Wed Sep 15 22:45:21 2010
@@ -747,12 +747,12 @@
void ARMInstPrinter::printVFPf32ImmOperand(const MCInst *MI, unsigned OpNum,
raw_ostream &O) {
- O << '#' << MI->getOperand(OpNum).getFPImm().convertToFloat();
+ O << '#' << (float)MI->getOperand(OpNum).getFPImm();
}
void ARMInstPrinter::printVFPf64ImmOperand(const MCInst *MI, unsigned OpNum,
raw_ostream &O) {
- O << '#' << MI->getOperand(OpNum).getFPImm().convertToDouble();
+ O << '#' << MI->getOperand(OpNum).getFPImm();
}
void ARMInstPrinter::printNEONModImmOperand(const MCInst *MI, unsigned OpNum,
Modified: llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp?rev=114064&r1=114063&r2=114064&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp (original)
+++ llvm/trunk/lib/Target/ARM/Disassembler/ARMDisassemblerCore.cpp Wed Sep 15 22:45:21 2010
@@ -1973,7 +1973,10 @@
// The asm syntax specifies the floating point value, not the 8-bit literal.
APInt immRaw = VFPExpandImm(slice(insn,19,16) << 4 | slice(insn, 3, 0),
Opcode == ARM::FCONSTD ? 64 : 32);
- MI.addOperand(MCOperand::CreateFPImm(APFloat(immRaw, true)));
+ APFloat immFP = APFloat(immRaw, true);
+ double imm = Opcode == ARM::FCONSTD ? immFP.convertToDouble() :
+ immFP.convertToFloat();
+ MI.addOperand(MCOperand::CreateFPImm(imm));
++OpIdx;
}
More information about the llvm-commits
mailing list