Home | History | Annotate | Download | only in SystemZ
      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 
     15 #ifndef SYSTEMZINSTRBUILDER_H
     16 #define SYSTEMZINSTRBUILDER_H
     17 
     18 #include "llvm/CodeGen/MachineFrameInfo.h"
     19 #include "llvm/CodeGen/MachineInstrBuilder.h"
     20 #include "llvm/CodeGen/MachineMemOperand.h"
     21 #include "llvm/CodeGen/PseudoSourceValue.h"
     22 
     23 namespace llvm {
     24 
     25 /// Add a BDX memory reference for frame object FI to MIB.
     26 static inline const MachineInstrBuilder &
     27 addFrameReference(const MachineInstrBuilder &MIB, int FI) {
     28   MachineInstr *MI = MIB;
     29   MachineFunction &MF = *MI->getParent()->getParent();
     30   MachineFrameInfo *MFFrame = MF.getFrameInfo();
     31   const MCInstrDesc &MCID = MI->getDesc();
     32   unsigned Flags = 0;
     33   if (MCID.mayLoad())
     34     Flags |= MachineMemOperand::MOLoad;
     35   if (MCID.mayStore())
     36     Flags |= MachineMemOperand::MOStore;
     37   int64_t Offset = 0;
     38   MachineMemOperand *MMO =
     39     MF.getMachineMemOperand(MachinePointerInfo(
     40                               PseudoSourceValue::getFixedStack(FI), Offset),
     41                             Flags, MFFrame->getObjectSize(FI),
     42                             MFFrame->getObjectAlignment(FI));
     43   return MIB.addFrameIndex(FI).addImm(Offset).addReg(0).addMemOperand(MMO);
     44 }
     45 
     46 } // End llvm namespace
     47 
     48 #endif
     49