[clang] 23cc838 - Add forgotten in 888d06d file.
Vassil Vassilev via cfe-commits
cfe-commits at lists.llvm.org
Sat Nov 14 13:33:31 PST 2020
Author: Vassil Vassilev
Date: 2020-11-14T21:32:23Z
New Revision: 23cc838099e10b13a32e54105f4db0f1b7e3a842
URL: https://github.com/llvm/llvm-project/commit/23cc838099e10b13a32e54105f4db0f1b7e3a842
DIFF: https://github.com/llvm/llvm-project/commit/23cc838099e10b13a32e54105f4db0f1b7e3a842.diff
LOG: Add forgotten in 888d06d file.
Added:
clang/unittests/CodeGen/TestCompiler.h
Modified:
Removed:
################################################################################
diff --git a/clang/unittests/CodeGen/TestCompiler.h b/clang/unittests/CodeGen/TestCompiler.h
new file mode 100644
index 000000000000..61ca9a3e06fb
--- /dev/null
+++ b/clang/unittests/CodeGen/TestCompiler.h
@@ -0,0 +1,112 @@
+//=== unittests/CodeGen/TestCompiler.h - Match on the LLVM IR ---*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef CLANG_UNITTESTS_CODEGEN_TESTCOMPILER_H
+#define CLANG_UNITTESTS_CODEGEN_TESTCOMPILER_H
+
+
+#include "clang/AST/ASTConsumer.h"
+#include "clang/Basic/TargetInfo.h"
+#include "clang/Basic/TargetOptions.h"
+#include "clang/CodeGen/ModuleBuilder.h"
+#include "clang/Frontend/CompilerInstance.h"
+#include "clang/Parse/ParseAST.h"
+
+#include "llvm/IR/Constants.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
+#include "llvm/Support/Host.h"
+
+namespace llvm {
+
+struct TestCompiler {
+ LLVMContext Context;
+ clang::CompilerInstance compiler;
+ clang::CodeGenerator* CG;
+ llvm::Module *M = nullptr;
+ unsigned PtrSize = 0;
+
+ TestCompiler(clang::LangOptions LO,
+ clang::CodeGenOptions CGO = clang::CodeGenOptions()) {
+ compiler.getLangOpts() = LO;
+ compiler.getCodeGenOpts() = CGO;
+ compiler.createDiagnostics();
+
+ std::string TrStr = llvm::Triple::normalize(llvm::sys::getProcessTriple());
+ llvm::Triple Tr(TrStr);
+ Tr.setOS(Triple::Linux);
+ Tr.setVendor(Triple::VendorType::UnknownVendor);
+ Tr.setEnvironment(Triple::EnvironmentType::UnknownEnvironment);
+ compiler.getTargetOpts().Triple = Tr.getTriple();
+ compiler.setTarget(clang::TargetInfo::CreateTargetInfo(
+ compiler.getDiagnostics(),
+ std::make_shared<clang::TargetOptions>(compiler.getTargetOpts())));
+
+ const clang::TargetInfo &TInfo = compiler.getTarget();
+ PtrSize = TInfo.getPointerWidth(0) / 8;
+
+ compiler.createFileManager();
+ compiler.createSourceManager(compiler.getFileManager());
+ compiler.createPreprocessor(clang::TU_Prefix);
+
+ compiler.createASTContext();
+
+ CG = CreateLLVMCodeGen(compiler.getDiagnostics(),
+ "main-module",
+ compiler.getHeaderSearchOpts(),
+ compiler.getPreprocessorOpts(),
+ compiler.getCodeGenOpts(),
+ Context);
+ }
+
+ void init(const char *TestProgram,
+ std::unique_ptr<clang::ASTConsumer> Consumer = nullptr) {
+ assert(CG);
+
+ if (!Consumer)
+ Consumer = std::unique_ptr<clang::ASTConsumer>(CG);
+
+ compiler.setASTConsumer(std::move(Consumer));
+
+ compiler.createSema(clang::TU_Prefix, nullptr);
+
+ clang::SourceManager &sm = compiler.getSourceManager();
+ sm.setMainFileID(sm.createFileID(
+ llvm::MemoryBuffer::getMemBuffer(TestProgram), clang::SrcMgr::C_User));
+ }
+
+ const BasicBlock *compile() {
+ clang::ParseAST(compiler.getSema(), false, false);
+ M = CG->GetModule();
+
+ // Do not expect more than one function definition.
+ auto FuncPtr = M->begin();
+ for (; FuncPtr != M->end(); ++FuncPtr)
+ if (!FuncPtr->isDeclaration())
+ break;
+ assert(FuncPtr != M->end());
+ const llvm::Function &Func = *FuncPtr;
+ ++FuncPtr;
+ for (; FuncPtr != M->end(); ++FuncPtr)
+ if (!FuncPtr->isDeclaration())
+ break;
+ assert(FuncPtr == M->end());
+
+ // The function must consist of single basic block.
+ auto BBPtr = Func.begin();
+ assert(Func.begin() != Func.end());
+ const BasicBlock &BB = *BBPtr;
+ ++BBPtr;
+ assert(BBPtr == Func.end());
+
+ return &BB;
+ }
+};
+
+} // namespace llvm
+#endif // CLANG_UNITTESTS_CODEGEN_TESTCOMPILER_H
More information about the cfe-commits
mailing list