xref: /src/contrib/llvm-project/llvm/lib/CodeGen/MIRYamlMapping.cpp (revision fe6060f10f634930ff71b7c50291ddc610da2475)
1344a3780SDimitry Andric //===- MIRYamlMapping.cpp - Describe mapping between MIR and YAML ---------===//
2344a3780SDimitry Andric //
3344a3780SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4344a3780SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5344a3780SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6344a3780SDimitry Andric //
7344a3780SDimitry Andric //===----------------------------------------------------------------------===//
8344a3780SDimitry Andric //
9344a3780SDimitry Andric // This file implements the mapping between various MIR data structures and
10344a3780SDimitry Andric // their corresponding YAML representation.
11344a3780SDimitry Andric //
12344a3780SDimitry Andric //===----------------------------------------------------------------------===//
13344a3780SDimitry Andric 
14344a3780SDimitry Andric #include "llvm/CodeGen/MIRYamlMapping.h"
15344a3780SDimitry Andric #include "llvm/CodeGen/MachineFrameInfo.h"
16344a3780SDimitry Andric #include "llvm/Support/Error.h"
17344a3780SDimitry Andric #include "llvm/Support/FormatVariadic.h"
18344a3780SDimitry Andric 
19344a3780SDimitry Andric using namespace llvm;
20344a3780SDimitry Andric using namespace llvm::yaml;
21344a3780SDimitry Andric 
FrameIndex(int FI,const llvm::MachineFrameInfo & MFI)22344a3780SDimitry Andric FrameIndex::FrameIndex(int FI, const llvm::MachineFrameInfo &MFI) {
23344a3780SDimitry Andric   IsFixed = MFI.isFixedObjectIndex(FI);
24344a3780SDimitry Andric   if (IsFixed)
25344a3780SDimitry Andric     FI -= MFI.getObjectIndexBegin();
26344a3780SDimitry Andric   this->FI = FI;
27344a3780SDimitry Andric }
28344a3780SDimitry Andric 
29344a3780SDimitry Andric // Returns the value and if the frame index is fixed or not.
getFI(const llvm::MachineFrameInfo & MFI) const30344a3780SDimitry Andric Expected<int> FrameIndex::getFI(const llvm::MachineFrameInfo &MFI) const {
31344a3780SDimitry Andric   int FI = this->FI;
32344a3780SDimitry Andric   if (IsFixed) {
33344a3780SDimitry Andric     if (unsigned(FI) >= MFI.getNumFixedObjects())
34344a3780SDimitry Andric       return make_error<StringError>(
35344a3780SDimitry Andric           formatv("invalid fixed frame index {0}", FI).str(),
36344a3780SDimitry Andric           inconvertibleErrorCode());
37344a3780SDimitry Andric     FI += MFI.getObjectIndexBegin();
38344a3780SDimitry Andric   }
39344a3780SDimitry Andric   if (unsigned(FI + MFI.getNumFixedObjects()) >= MFI.getNumObjects())
40344a3780SDimitry Andric     return make_error<StringError>(formatv("invalid frame index {0}", FI).str(),
41344a3780SDimitry Andric                                    inconvertibleErrorCode());
42344a3780SDimitry Andric   return FI;
43344a3780SDimitry Andric }
44