]>
Commit | Line | Data |
---|---|---|
1a4d82fc JJ |
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 LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZINSTRBUILDER_H | |
16 | #define LLVM_LIB_TARGET_SYSTEMZ_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 namespace llvm | |
47 | ||
48 | #endif |