11d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===-- SystemZInstrBuilder.h - Functions to aid building insts -*- C++ -*-===// 21d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 31d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// The LLVM Compiler Infrastructure 41d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 51d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// This file is distributed under the University of Illinois Open Source 61d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// License. See LICENSE.TXT for details. 71d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 81d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===----------------------------------------------------------------------===// 91d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 101d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// This file exposes functions that may be used with BuildMI from the 111d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// MachineInstrBuilder.h file to handle SystemZ'isms in a clean way. 121d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 131d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===----------------------------------------------------------------------===// 141d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 151d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#ifndef SYSTEMZINSTRBUILDER_H 161d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#define SYSTEMZINSTRBUILDER_H 171d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 181d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/CodeGen/MachineFrameInfo.h" 191d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/CodeGen/MachineInstrBuilder.h" 201d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/CodeGen/MachineMemOperand.h" 211d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/CodeGen/PseudoSourceValue.h" 221d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 231d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandnamespace llvm { 241d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 251d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand/// Add a BDX memory reference for frame object FI to MIB. 261d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandstatic inline const MachineInstrBuilder & 271d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich WeigandaddFrameReference(const MachineInstrBuilder &MIB, int FI) { 281d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand MachineInstr *MI = MIB; 291d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand MachineFunction &MF = *MI->getParent()->getParent(); 301d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand MachineFrameInfo *MFFrame = MF.getFrameInfo(); 311d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand const MCInstrDesc &MCID = MI->getDesc(); 321d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand unsigned Flags = 0; 331d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand if (MCID.mayLoad()) 341d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand Flags |= MachineMemOperand::MOLoad; 351d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand if (MCID.mayStore()) 361d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand Flags |= MachineMemOperand::MOStore; 371d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand int64_t Offset = 0; 381d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand MachineMemOperand *MMO = 391d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand MF.getMachineMemOperand(MachinePointerInfo( 401d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand PseudoSourceValue::getFixedStack(FI), Offset), 411d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand Flags, MFFrame->getObjectSize(FI), 421d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand MFFrame->getObjectAlignment(FI)); 431d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand return MIB.addFrameIndex(FI).addImm(Offset).addReg(0).addMemOperand(MMO); 441d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand} 451d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} // end namespace llvm 471d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 481d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#endif 49