45 lines · c
1//===-- SystemZInstrBuilder.h - Functions to aid building insts -*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file exposes functions that may be used with BuildMI from the10// MachineInstrBuilder.h file to handle SystemZ'isms in a clean way.11//12//===----------------------------------------------------------------------===//13 14#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZINSTRBUILDER_H15#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZINSTRBUILDER_H16 17#include "llvm/CodeGen/MachineFrameInfo.h"18#include "llvm/CodeGen/MachineInstrBuilder.h"19#include "llvm/CodeGen/MachineMemOperand.h"20 21namespace llvm {22 23/// Add a BDX memory reference for frame object FI to MIB.24static inline const MachineInstrBuilder &25addFrameReference(const MachineInstrBuilder &MIB, int FI) {26 MachineInstr *MI = MIB;27 MachineFunction &MF = *MI->getParent()->getParent();28 MachineFrameInfo &MFFrame = MF.getFrameInfo();29 const MCInstrDesc &MCID = MI->getDesc();30 auto Flags = MachineMemOperand::MONone;31 if (MCID.mayLoad())32 Flags |= MachineMemOperand::MOLoad;33 if (MCID.mayStore())34 Flags |= MachineMemOperand::MOStore;35 int64_t Offset = 0;36 MachineMemOperand *MMO = MF.getMachineMemOperand(37 MachinePointerInfo::getFixedStack(MF, FI, Offset), Flags,38 MFFrame.getObjectSize(FI), MFFrame.getObjectAlign(FI));39 return MIB.addFrameIndex(FI).addImm(Offset).addReg(0).addMemOperand(MMO);40}41 42} // end namespace llvm43 44#endif45