-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRuntimeOptions.h
84 lines (77 loc) · 2.59 KB
/
RuntimeOptions.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "llvm/Crellvm/ValidationUnit.h"
#include "llvm/Support/CommandLine.h"
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
namespace crellvm {
class RuntimeOptions {
public:
static void Init(std::string outputDir, std::string whitelist,
std::string passwhitelist, bool compactjson,
bool nocommit) {
_DefaultOutputDir = outputDir;
_OptWhiteListEnabled = false;
_OptPassWhiteListEnabled = false;
_CompactJson = compactjson;
_NoCommit = nocommit;
if (!(whitelist == "-"))
_SetWhiteList(whitelist);
if (!(passwhitelist == "-"))
_SetPassWhiteList(passwhitelist);
}
static bool UseCompactJson()
{ return _CompactJson; }
static bool NoCommit()
{ return _NoCommit; }
static bool IgnoreOpt(const std::string &optname) {
return _OptWhiteListEnabled &&
std::find(_OptWhiteList.begin(), _OptWhiteList.end(), optname)
== _OptWhiteList.end();
}
static bool IgnorePass(ValidationUnit::PASS curpass) {
return _OptPassWhiteListEnabled &&
std::find(_OptPassWhiteList.begin(), _OptPassWhiteList.end(), curpass)
== _OptPassWhiteList.end();
}
static const std::string &GetDefaultOutputDir()
{ return _DefaultOutputDir; }
private:
static std::string _DefaultOutputDir;
static std::vector<std::string> _OptWhiteList;
static bool _OptWhiteListEnabled;
static std::vector<ValidationUnit::PASS> _OptPassWhiteList;
static bool _OptPassWhiteListEnabled;
static bool _CompactJson;
static bool _NoCommit;
private:
static void _SetWhiteList(const std::string &str) {
std::stringstream ss(str);
std::string optname;
while (std::getline(ss, optname, ',')) {
_OptWhiteList.push_back(optname);
}
_OptWhiteListEnabled = true;
}
static void _SetPassWhiteList(const std::string &str) {
std::stringstream ss(str);
std::string optname;
while (std::getline(ss, optname, ',')) {
std::transform(optname.begin(), optname.end(), optname.begin(), ::tolower);
if (optname == "gvn")
_OptPassWhiteList.push_back(ValidationUnit::GVN);
else if (optname == "mem2reg")
_OptPassWhiteList.push_back(ValidationUnit::MEM2REG);
else if (optname == "pre")
_OptPassWhiteList.push_back(ValidationUnit::PRE);
else if (optname == "instcombine")
_OptPassWhiteList.push_back(ValidationUnit::INSTCOMBINE);
else if (optname == "licm")
_OptPassWhiteList.push_back(ValidationUnit::LICM);
else
assert(false && "Invalid pass white list");
}
_OptPassWhiteListEnabled = true;
}
};
}