source: icGREP/icgrep-devel/icgrep/toolchain/toolchain.h @ 5486

Last change on this file since 5486 was 5486, checked in by nmedfort, 23 months ago

Initial attempt to improve debugging capabilities with compilation stack traces on error.

File size: 2.2 KB
Line 
1/*
2 *  Copyright (c) 2017 International Characters.
3 *  This software is licensed to the public under the Open Software License 3.0.
4 *  icgrep is a trademark of International Characters.
5 */
6
7#ifndef TOOLCHAIN_H
8#define TOOLCHAIN_H
9
10#include <llvm/ADT/StringRef.h>
11#include <llvm/Support/CodeGen.h>
12#include <llvm/Target/TargetOptions.h>
13#include <llvm/Target/TargetMachine.h>
14
15// FIXME: llvm/CodeGen/CommandFlags.h can only be included once or the various cl::opt causes multiple definition
16// errors. To bypass for now, the relevant options and functions are accessible from here. Re-evaluate with later
17// versions of LLVM.
18
19namespace llvm { namespace cl { class OptionCategory; } }
20
21namespace codegen {
22
23const llvm::cl::OptionCategory * codegen_flags();
24
25// Command Parameters
26enum DebugFlags {
27    ShowUnoptimizedIR,
28    ShowIR,
29    VerifyIR,
30#ifndef USE_LLVM_3_6
31    ShowASM,
32#endif
33    SerializeThreads
34};
35
36bool DebugOptionIsSet(const DebugFlags flag);
37
38extern bool PipelineParallel;
39extern bool SegmentPipelineParallel;
40#ifndef USE_LLVM_3_6
41extern const char * ASMOutputFilename;
42#endif
43extern const char * IROutputFilename;
44extern const char * ObjectCacheDir;
45extern llvm::CodeGenOpt::Level OptLevel;  // set from command line
46extern int BlockSize;  // set from command line
47extern int SegmentSize;  // set from command line
48extern int BufferSegments;
49extern int ThreadNum;
50extern bool EnableObjectCache;
51extern bool EnableAsserts;
52extern bool EnableCycleCounter;
53extern bool NVPTX;
54extern int GroupNum;
55extern std::string ProgramName;
56extern llvm::TargetOptions Options;
57extern const llvm::Reloc::Model RelocModel;
58extern const llvm::CodeModel::Model CMModel;
59extern const std::string MArch;
60extern const std::string RunPass;
61extern const llvm::TargetMachine::CodeGenFileType FileType;
62extern const std::string StopAfter;
63extern const std::string StartAfter;
64
65std::string getCPUStr();
66std::string getFeaturesStr();
67void setFunctionAttributes(llvm::StringRef CPU, llvm::StringRef Features, llvm::Module &M);
68
69void ParseCommandLineOptions(int argc, const char *const *argv, std::initializer_list<const llvm::cl::OptionCategory *> hiding = {});
70
71}
72
73void AddParabixVersionPrinter();
74
75bool AVX2_available();
76
77#endif
Note: See TracBrowser for help on using the repository browser.