X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FSystemZ%2FSystemZInstrBuilder.h;h=84196e94a5a64eb409c98be72384f9f4e13155a8;hb=c848b1bbcf88ab5d8318d990612fb1fda206ea3d;hp=b69d2f6ce9ff835abdee621a82502379ca294e4c;hpb=c76909abfec876c6b751d693ebd3df07df686aa0;p=oota-llvm.git diff --git a/lib/Target/SystemZ/SystemZInstrBuilder.h b/lib/Target/SystemZ/SystemZInstrBuilder.h index b69d2f6ce9f..84196e94a5a 100644 --- a/lib/Target/SystemZ/SystemZInstrBuilder.h +++ b/lib/Target/SystemZ/SystemZInstrBuilder.h @@ -1,4 +1,4 @@ -//===- SystemZInstrBuilder.h - Functions to aid building insts -*- C++ -*-===// +//===-- SystemZInstrBuilder.h - Functions to aid building insts -*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -10,12 +10,6 @@ // This file exposes functions that may be used with BuildMI from the // MachineInstrBuilder.h file to handle SystemZ'isms in a clean way. // -// The BuildMem function may be used with the BuildMI function to add entire -// memory references in a single, typed, function call. -// -// For reference, the order of operands for memory references is: -// (Operand), Base, Displacement, Index. -// //===----------------------------------------------------------------------===// #ifndef SYSTEMZINSTRBUILDER_H @@ -28,101 +22,27 @@ namespace llvm { -/// SystemZAddressMode - This struct holds a generalized full x86 address mode. -/// The base register can be a frame index, which will eventually be replaced -/// with R15 or R11 and Disp being offsetted accordingly. -struct SystemZAddressMode { - enum { - RegBase, - FrameIndexBase - } BaseType; - - union { - unsigned Reg; - int FrameIndex; - } Base; - - unsigned IndexReg; - int32_t Disp; - GlobalValue *GV; - - SystemZAddressMode() : BaseType(RegBase), IndexReg(0), Disp(0) { - Base.Reg = 0; - } -}; - -/// addDirectMem - This function is used to add a direct memory reference to the -/// current instruction -- that is, a dereference of an address in a register, -/// with no index or displacement. -/// -static inline const MachineInstrBuilder & -addDirectMem(const MachineInstrBuilder &MIB, unsigned Reg) { - // Because memory references are always represented with 3 - // values, this adds: Reg, [0, NoReg] to the instruction. - return MIB.addReg(Reg).addImm(0).addReg(0); -} - -static inline const MachineInstrBuilder & -addOffset(const MachineInstrBuilder &MIB, int Offset) { - return MIB.addImm(Offset).addReg(0); -} - -/// addRegOffset - This function is used to add a memory reference of the form -/// [Reg + Offset], i.e., one with no or index, but with a -/// displacement. An example is: 10(%r15). -/// -static inline const MachineInstrBuilder & -addRegOffset(const MachineInstrBuilder &MIB, - unsigned Reg, bool isKill, int Offset) { - return addOffset(MIB.addReg(Reg, getKillRegState(isKill)), Offset); -} - -/// addRegReg - This function is used to add a memory reference of the form: -/// [Reg + Reg]. -static inline const MachineInstrBuilder & -addRegReg(const MachineInstrBuilder &MIB, - unsigned Reg1, bool isKill1, unsigned Reg2, bool isKill2) { - return MIB.addReg(Reg1, getKillRegState(isKill1)).addImm(0) - .addReg(Reg2, getKillRegState(isKill2)); -} - -static inline const MachineInstrBuilder & -addFullAddress(const MachineInstrBuilder &MIB, const SystemZAddressMode &AM) { - if (AM.BaseType == SystemZAddressMode::RegBase) - MIB.addReg(AM.Base.Reg); - else if (AM.BaseType == SystemZAddressMode::FrameIndexBase) - MIB.addFrameIndex(AM.Base.FrameIndex); - else - assert(0); - - return MIB.addImm(AM.Disp).addReg(AM.IndexReg); -} - -/// addFrameReference - This function is used to add a reference to the base of -/// an abstract object on the stack frame of the current function. This -/// reference has base register as the FrameIndex offset until it is resolved. -/// This allows a constant offset to be specified as well... -/// +/// Add a BDX memory reference for frame object FI to MIB. static inline const MachineInstrBuilder & -addFrameReference(const MachineInstrBuilder &MIB, int FI, int Offset = 0) { +addFrameReference(const MachineInstrBuilder &MIB, int FI) { MachineInstr *MI = MIB; MachineFunction &MF = *MI->getParent()->getParent(); - MachineFrameInfo &MFI = *MF.getFrameInfo(); - const TargetInstrDesc &TID = MI->getDesc(); + MachineFrameInfo *MFFrame = MF.getFrameInfo(); + const MCInstrDesc &MCID = MI->getDesc(); unsigned Flags = 0; - if (TID.mayLoad()) + if (MCID.mayLoad()) Flags |= MachineMemOperand::MOLoad; - if (TID.mayStore()) + if (MCID.mayStore()) Flags |= MachineMemOperand::MOStore; + int64_t Offset = 0; MachineMemOperand *MMO = - MF.getMachineMemOperand(PseudoSourceValue::getFixedStack(FI), - Flags, Offset, - MFI.getObjectSize(FI), - MFI.getObjectAlignment(FI)); - return addOffset(MIB.addFrameIndex(FI), Offset) - .addMemOperand(MMO); + MF.getMachineMemOperand(MachinePointerInfo( + PseudoSourceValue::getFixedStack(FI), Offset), + Flags, MFFrame->getObjectSize(FI), + MFFrame->getObjectAlignment(FI)); + return MIB.addFrameIndex(FI).addImm(Offset).addReg(0).addMemOperand(MMO); } -} // End llvm namespace +} // end namespace llvm #endif