OpenASIP  2.0
LLVMUtilities.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2017 Tampere University.
3  *
4  * This file is part of TTA-Based Codesign Environment (TCE).
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 /**
25  * @file LLVMUtilities.cc
26  *
27  * Declarations of LLVM utilities.
28  *
29  * @author Henry Linjamäki 2017 (henry.linjamaki-no.spam-tut.fi)
30  * @note reting: red
31  */
32 
33 #ifndef LLVMUTILITIES_HH
34 #define LLVMUTILITIES_HH
35 
36 #include <string>
37 #include <tuple>
38 #include <map>
39 #include <vector>
40 
41 #include "llvm/IR/InlineAsm.h"
42 
43 namespace llvm {
44  class MachineInstr;
45  class MachineOperand;
46 }
47 
48 std::tuple<std::string, size_t> getSourceLocationInfo(
49  const llvm::MachineInstr& mi);
50 
51 std::string getSourceLocationString(const llvm::MachineInstr& mi);
52 
53 /// First = Inline asm kind defined in llvm/IR/InlineAsm.h
54 /// Second = The associated operands.
55 using AsmOperands =
56  std::tuple< unsigned, std::vector<const llvm::MachineOperand*>>;
57 /// Inline assembly operand position. The numbers are matched to template
58 /// strings in inline asm texts - e.g. 2 => "$2".
59 using AsmPosition = unsigned;
60 using AsmOperandMap = std::map<AsmPosition, AsmOperands>;
61 
62 AsmOperandMap getInlineAsmOperands(const llvm::MachineInstr& mi);
63 
64 #endif // LLVMUTILITIES_HH
llvm
Definition: InlineAsmParser.hh:49
AsmPosition
unsigned AsmPosition
Inline assembly operand position. The numbers are matched to template strings in inline asm texts - e...
Definition: LLVMUtilities.hh:59
getSourceLocationInfo
std::tuple< std::string, size_t > getSourceLocationInfo(const llvm::MachineInstr &mi)
Definition: LLVMUtilities.cc:54
getSourceLocationString
std::string getSourceLocationString(const llvm::MachineInstr &mi)
Definition: LLVMUtilities.cc:78
AsmOperandMap
std::map< AsmPosition, AsmOperands > AsmOperandMap
Definition: LLVMUtilities.hh:60
getInlineAsmOperands
AsmOperandMap getInlineAsmOperands(const llvm::MachineInstr &mi)
Definition: LLVMUtilities.cc:92
AsmOperands
std::tuple< unsigned, std::vector< const llvm::MachineOperand * > > AsmOperands
First = Inline asm kind defined in llvm/IR/InlineAsm.h Second = The associated operands.
Definition: LLVMUtilities.hh:56