brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 9fc786f Raw
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