/3rd_party/llvm/lib/Target/SystemZ/SystemZInstrBuilder.h

https://code.google.com/p/softart/ · C Header · 48 lines · 28 code · 6 blank · 14 comment · 2 complexity · 0ce38fdb344b815d2b45e6e632c732f9 MD5 · raw file

  1. //===-- SystemZInstrBuilder.h - Functions to aid building insts -*- C++ -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. //
  10. // This file exposes functions that may be used with BuildMI from the
  11. // MachineInstrBuilder.h file to handle SystemZ'isms in a clean way.
  12. //
  13. //===----------------------------------------------------------------------===//
  14. #ifndef SYSTEMZINSTRBUILDER_H
  15. #define SYSTEMZINSTRBUILDER_H
  16. #include "llvm/CodeGen/MachineFrameInfo.h"
  17. #include "llvm/CodeGen/MachineInstrBuilder.h"
  18. #include "llvm/CodeGen/MachineMemOperand.h"
  19. #include "llvm/CodeGen/PseudoSourceValue.h"
  20. namespace llvm {
  21. /// Add a BDX memory reference for frame object FI to MIB.
  22. static inline const MachineInstrBuilder &
  23. addFrameReference(const MachineInstrBuilder &MIB, int FI) {
  24. MachineInstr *MI = MIB;
  25. MachineFunction &MF = *MI->getParent()->getParent();
  26. MachineFrameInfo *MFFrame = MF.getFrameInfo();
  27. const MCInstrDesc &MCID = MI->getDesc();
  28. unsigned Flags = 0;
  29. if (MCID.mayLoad())
  30. Flags |= MachineMemOperand::MOLoad;
  31. if (MCID.mayStore())
  32. Flags |= MachineMemOperand::MOStore;
  33. int64_t Offset = 0;
  34. MachineMemOperand *MMO =
  35. MF.getMachineMemOperand(MachinePointerInfo(
  36. PseudoSourceValue::getFixedStack(FI), Offset),
  37. Flags, MFFrame->getObjectSize(FI),
  38. MFFrame->getObjectAlignment(FI));
  39. return MIB.addFrameIndex(FI).addImm(Offset).addReg(0).addMemOperand(MMO);
  40. }
  41. } // End llvm namespace
  42. #endif