Author: sampo Date: Thu Feb 14 01:39:30 2008 New Revision: 47117 URL: http://llvm.org/viewvc/llvm-project?rev=47117&view=rev Log: Support a new type of MachineOperand, MO_FPImmediate, used for holding FP Immediates, crazily enough
Modified: llvm/trunk/include/llvm/CodeGen/MachineOperand.h llvm/trunk/lib/CodeGen/MachineInstr.cpp Modified: llvm/trunk/include/llvm/CodeGen/MachineOperand.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineOperand.h?rev=47117&r1=47116&r2=47117&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineOperand.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineOperand.h Thu Feb 14 01:39:30 2008 @@ -21,6 +21,7 @@ namespace llvm { +class ConstantFP; class MachineBasicBlock; class GlobalValue; class MachineInstr; @@ -34,6 +35,7 @@ enum MachineOperandType { MO_Register, // Register operand. MO_Immediate, // Immediate Operand + MO_FPImmediate, MO_MachineBasicBlock, // MachineBasicBlock reference MO_FrameIndex, // Abstract Stack Frame Index MO_ConstantPoolIndex, // Address of indexed Constant in Constant Pool @@ -77,6 +79,7 @@ /// Contents union - This contains the payload for the various operand types. union { MachineBasicBlock *MBB; // For MO_MachineBasicBlock. + ConstantFP *CFP; // For MO_FPImmediate. int64_t ImmVal; // For MO_Immediate. struct { // For MO_Register. @@ -120,6 +123,7 @@ /// bool isRegister() const { return OpKind == MO_Register; } bool isImmediate() const { return OpKind == MO_Immediate; } + bool isFPImmediate() const { return OpKind == MO_FPImmediate; } bool isMachineBasicBlock() const { return OpKind == MO_MachineBasicBlock; } bool isFrameIndex() const { return OpKind == MO_FrameIndex; } bool isConstantPoolIndex() const { return OpKind == MO_ConstantPoolIndex; } @@ -231,6 +235,11 @@ return Contents.ImmVal; } + ConstantFP *getFPImm() const { + assert(isFPImmediate() && "Wrong MachineOperand accessor"); + return Contents.CFP; + } + MachineBasicBlock *getMBB() const { assert(isMachineBasicBlock() && "Wrong MachineOperand accessor"); return Contents.MBB; @@ -313,6 +322,12 @@ return Op; } + static MachineOperand CreateFPImm(ConstantFP *CFP) { + MachineOperand Op(MachineOperand::MO_FPImmediate); + Op.Contents.CFP = CFP; + return Op; + } + static MachineOperand CreateReg(unsigned Reg, bool isDef, bool isImp = false, bool isKill = false, bool isDead = false, unsigned SubReg = 0) { Modified: llvm/trunk/lib/CodeGen/MachineInstr.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=47117&r1=47116&r2=47117&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original) +++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Thu Feb 14 01:39:30 2008 @@ -11,6 +11,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Constants.h" #include "llvm/CodeGen/MachineInstr.h" #include "llvm/Value.h" #include "llvm/CodeGen/MachineFunction.h" @@ -138,6 +139,8 @@ getSubReg() == Other.getSubReg(); case MachineOperand::MO_Immediate: return getImm() == Other.getImm(); + case MachineOperand::MO_FPImmediate: + return getFPImm() == Other.getFPImm(); case MachineOperand::MO_MachineBasicBlock: return getMBB() == Other.getMBB(); case MachineOperand::MO_FrameIndex: @@ -197,6 +200,13 @@ case MachineOperand::MO_Immediate: OS << getImm(); break; + case MachineOperand::MO_FPImmediate: + if (getFPImm()->getType() == Type::FloatTy) { + OS << getFPImm()->getValueAPF().convertToFloat(); + } else { + OS << getFPImm()->getValueAPF().convertToDouble(); + } + break; case MachineOperand::MO_MachineBasicBlock: OS << "mbb<" << ((Value*)getMBB()->getBasicBlock())->getName() _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits