r291123 - CodeGen: plumb header search down to the IAS
Eric Christopher via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 6 18:22:46 PST 2017
On Fri, Jan 6, 2017 at 5:56 AM Hal Finkel <hfinkel at anl.gov> wrote:
>
> On 01/05/2017 08:30 PM, Eric Christopher via cfe-commits wrote:
>
> Ok, thanks. I agree that it's a problem. I'm definitely open for testing
> ideas here. There are a few other things in the
> TargetOptions/MCTargetOptions area that are already problematic to test.
>
>
> I think that we need to add serialization for these structures, and a
> printing option for them, so that we can test these kinds of things. That
> having been said, a lot of these things need to end up in attributes so
> that they work correctly with LTO. Is this one of them?
>
>
We definitely need to figure out testing for this, but I don't know that
serializing them to std::out is right. Might want to come up with either a
gtest or gmock way?
That said, ultimately anything that involves parsing at code generation
time could involve putting it into a module - that said, I really disagree
with all of the include paths etc being serialized into the module.
-eric
> -Hal
>
>
>
> -eric
>
> On Thu, Jan 5, 2017 at 6:27 PM Saleem Abdulrasool <compnerd at compnerd.org>
> wrote:
>
> This was certainly the problem that I had. The test really needs a way to
> check that the field was set. As you state, this is a problematic area.
> The backend already has a test to ensure that the paths are honored, but, I
> didn't see any way to actually ensure that it was getting sent to the
> backend otherwise.
>
> The module itself doesnt encode the search path, nor is the information in
> the command line. I can see the argument that the test itself doesn't add
> much value especially with the backend side testing that the processing of
> the inclusion does occur correctly. I'll go ahead and remove the test
> (which already has ended up being a pain to test).
>
> On Thu, Jan 5, 2017 at 6:11 PM, Eric Christopher <echristo at gmail.com>
> wrote:
>
> Hi Saleem,
>
> Love that you wanted to add a test for it, but I'd really prefer that you
> not engage the backend here in order to do it. You can verify some of it
> from the backend and just that the module is correct via the front end if
> you'd like. Ensuring the paths are correct is a bit of a sticky problem,
> but this is an API boundary that we just have problems with.
>
> TL;DR: Would you mind splitting this test into front end and back end
> tests and avoid using the backend in clang's test harness?
>
> Thanks!
>
> -eric
>
> On Thu, Jan 5, 2017 at 8:13 AM Saleem Abdulrasool via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
> Author: compnerd
> Date: Thu Jan 5 10:02:32 2017
> New Revision: 291123
>
> URL: http://llvm.org/viewvc/llvm-project?rev=291123&view=rev
> Log:
> CodeGen: plumb header search down to the IAS
>
> inline assembly may use the `.include` directive to include other
> content into the file. Without the integrated assembler, the `-I` group
> gets passed to the assembler. Emulate this by collecting the header
> search paths and passing them to the IAS.
>
> Resolves PR24811!
>
> Added:
> cfe/trunk/test/CodeGen/include/
> cfe/trunk/test/CodeGen/include/function.x
> cfe/trunk/test/CodeGen/include/module.x
> cfe/trunk/test/CodeGen/inline-asm-inclusion.c
> Modified:
> cfe/trunk/include/clang/CodeGen/BackendUtil.h
> cfe/trunk/lib/CodeGen/BackendUtil.cpp
> cfe/trunk/lib/CodeGen/CodeGenAction.cpp
> cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
>
> Modified: cfe/trunk/include/clang/CodeGen/BackendUtil.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/BackendUtil.h?rev=291123&r1=291122&r2=291123&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/CodeGen/BackendUtil.h (original)
> +++ cfe/trunk/include/clang/CodeGen/BackendUtil.h Thu Jan 5 10:02:32 2017
> @@ -21,6 +21,7 @@ namespace llvm {
>
> namespace clang {
> class DiagnosticsEngine;
> + class HeaderSearchOptions;
> class CodeGenOptions;
> class TargetOptions;
> class LangOptions;
> @@ -34,7 +35,8 @@ namespace clang {
> Backend_EmitObj ///< Emit native object files
> };
>
> - void EmitBackendOutput(DiagnosticsEngine &Diags, const CodeGenOptions
> &CGOpts,
> + void EmitBackendOutput(DiagnosticsEngine &Diags, const
> HeaderSearchOptions &,
> + const CodeGenOptions &CGOpts,
> const TargetOptions &TOpts, const LangOptions
> &LOpts,
> const llvm::DataLayout &TDesc, llvm::Module *M,
> BackendAction Action,
>
> Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=291123&r1=291122&r2=291123&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original)
> +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Thu Jan 5 10:02:32 2017
> @@ -14,6 +14,7 @@
> #include "clang/Frontend/CodeGenOptions.h"
> #include "clang/Frontend/FrontendDiagnostic.h"
> #include "clang/Frontend/Utils.h"
> +#include "clang/Lex/HeaderSearchOptions.h"
> #include "llvm/ADT/SmallSet.h"
> #include "llvm/ADT/StringExtras.h"
> #include "llvm/ADT/StringSwitch.h"
> @@ -32,6 +33,7 @@
> #include "llvm/IR/ModuleSummaryIndex.h"
> #include "llvm/IR/Verifier.h"
> #include "llvm/LTO/LTOBackend.h"
> +#include "llvm/MC/MCAsmInfo.h"
> #include "llvm/MC/SubtargetFeature.h"
> #include "llvm/Object/ModuleSummaryIndexObjectFile.h"
> #include "llvm/Passes/PassBuilder.h"
> @@ -61,6 +63,7 @@ namespace {
>
> class EmitAssemblyHelper {
> DiagnosticsEngine &Diags;
> + const HeaderSearchOptions &HSOpts;
> const CodeGenOptions &CodeGenOpts;
> const clang::TargetOptions &TargetOpts;
> const LangOptions &LangOpts;
> @@ -100,11 +103,14 @@ private:
> raw_pwrite_stream &OS);
>
> public:
> - EmitAssemblyHelper(DiagnosticsEngine &_Diags, const CodeGenOptions
> &CGOpts,
> + EmitAssemblyHelper(DiagnosticsEngine &_Diags,
> + const HeaderSearchOptions &HeaderSearchOpts,
> + const CodeGenOptions &CGOpts,
> const clang::TargetOptions &TOpts,
> const LangOptions &LOpts, Module *M)
> - : Diags(_Diags), CodeGenOpts(CGOpts), TargetOpts(TOpts),
> LangOpts(LOpts),
> - TheModule(M), CodeGenerationTime("codegen", "Code Generation
> Time") {}
> + : Diags(_Diags), HSOpts(HeaderSearchOpts), CodeGenOpts(CGOpts),
> + TargetOpts(TOpts), LangOpts(LOpts), TheModule(M),
> + CodeGenerationTime("codegen", "Code Generation Time") {}
>
> ~EmitAssemblyHelper() {
> if (CodeGenOpts.DisableFree)
> @@ -584,12 +590,18 @@ void EmitAssemblyHelper::CreateTargetMac
> Options.MCOptions.MCNoExecStack = CodeGenOpts.NoExecStack;
> Options.MCOptions.MCIncrementalLinkerCompatible =
> CodeGenOpts.IncrementalLinkerCompatible;
> - Options.MCOptions.MCPIECopyRelocations =
> - CodeGenOpts.PIECopyRelocations;
> + Options.MCOptions.MCPIECopyRelocations = CodeGenOpts.PIECopyRelocations;
> Options.MCOptions.MCFatalWarnings = CodeGenOpts.FatalWarnings;
> Options.MCOptions.AsmVerbose = CodeGenOpts.AsmVerbose;
> Options.MCOptions.PreserveAsmComments = CodeGenOpts.PreserveAsmComments;
> Options.MCOptions.ABIName = TargetOpts.ABI;
> + for (const auto &Entry : HSOpts.UserEntries)
> + if (!Entry.IsFramework &&
> + (Entry.Group == frontend::IncludeDirGroup::Quoted ||
> + Entry.Group == frontend::IncludeDirGroup::Angled ||
> + Entry.Group == frontend::IncludeDirGroup::System))
> + Options.MCOptions.IASSearchPaths.push_back(
> + Entry.IgnoreSysRoot ? Entry.Path : HSOpts.Sysroot + Entry.Path);
>
> TM.reset(TheTarget->createTargetMachine(Triple, TargetOpts.CPU,
> FeaturesStr,
> Options, RM, CM, OptLevel));
> @@ -929,17 +941,19 @@ static void runThinLTOBackend(const Code
> }
>
> void clang::EmitBackendOutput(DiagnosticsEngine &Diags,
> + const HeaderSearchOptions &HeaderOpts,
> const CodeGenOptions &CGOpts,
> const clang::TargetOptions &TOpts,
> - const LangOptions &LOpts, const
> llvm::DataLayout &TDesc,
> - Module *M, BackendAction Action,
> + const LangOptions &LOpts,
> + const llvm::DataLayout &TDesc, Module *M,
> + BackendAction Action,
> std::unique_ptr<raw_pwrite_stream> OS) {
> if (!CGOpts.ThinLTOIndexFile.empty()) {
> runThinLTOBackend(CGOpts, M, std::move(OS));
> return;
> }
>
> - EmitAssemblyHelper AsmHelper(Diags, CGOpts, TOpts, LOpts, M);
> + EmitAssemblyHelper AsmHelper(Diags, HeaderOpts, CGOpts, TOpts, LOpts,
> M);
>
> if (CGOpts.ExperimentalNewPassManager)
> AsmHelper.EmitAssemblyWithNewPassManager(Action, std::move(OS));
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenAction.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenAction.cpp?rev=291123&r1=291122&r2=291123&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenAction.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenAction.cpp Thu Jan 5 10:02:32 2017
> @@ -44,6 +44,7 @@ namespace clang {
> virtual void anchor();
> DiagnosticsEngine &Diags;
> BackendAction Action;
> + const HeaderSearchOptions &HeaderSearchOpts;
> const CodeGenOptions &CodeGenOpts;
> const TargetOptions &TargetOpts;
> const LangOptions &LangOpts;
> @@ -77,8 +78,8 @@ namespace clang {
> const SmallVectorImpl<std::pair<unsigned, llvm::Module *>>
> &LinkModules,
> std::unique_ptr<raw_pwrite_stream> OS, LLVMContext &C,
> CoverageSourceInfo *CoverageInfo = nullptr)
> - : Diags(Diags), Action(Action), CodeGenOpts(CodeGenOpts),
> - TargetOpts(TargetOpts), LangOpts(LangOpts),
> + : Diags(Diags), Action(Action),
> HeaderSearchOpts(HeaderSearchOpts),
> + CodeGenOpts(CodeGenOpts), TargetOpts(TargetOpts),
> LangOpts(LangOpts),
> AsmOutStream(std::move(OS)), Context(nullptr),
> LLVMIRGeneration("irgen", "LLVM IR Generation Time"),
> LLVMIRGenerationRefCount(0),
> @@ -225,8 +226,8 @@ namespace clang {
>
> EmbedBitcode(getModule(), CodeGenOpts, llvm::MemoryBufferRef());
>
> - EmitBackendOutput(Diags, CodeGenOpts, TargetOpts, LangOpts,
> - C.getTargetInfo().getDataLayout(),
> + EmitBackendOutput(Diags, HeaderSearchOpts, CodeGenOpts, TargetOpts,
> + LangOpts, C.getTargetInfo().getDataLayout(),
> getModule(), Action, std::move(AsmOutStream));
>
> Ctx.setInlineAsmDiagnosticHandler(OldHandler, OldContext);
> @@ -898,9 +899,10 @@ void CodeGenAction::ExecuteAction() {
> Ctx.setInlineAsmDiagnosticHandler(BitcodeInlineAsmDiagHandler,
> &CI.getDiagnostics());
>
> - EmitBackendOutput(CI.getDiagnostics(), CI.getCodeGenOpts(),
> TargetOpts,
> - CI.getLangOpts(), CI.getTarget().getDataLayout(),
> - TheModule.get(), BA, std::move(OS));
> + EmitBackendOutput(CI.getDiagnostics(), CI.getHeaderSearchOpts(),
> + CI.getCodeGenOpts(), TargetOpts, CI.getLangOpts(),
> + CI.getTarget().getDataLayout(), TheModule.get(), BA,
> + std::move(OS));
> return;
> }
>
>
> Modified: cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp?rev=291123&r1=291122&r2=291123&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp (original)
> +++ cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp Thu Jan 5
> 10:02:32 2017
> @@ -282,7 +282,7 @@ public:
> // Print the IR for the PCH container to the debug output.
> llvm::SmallString<0> Buffer;
> clang::EmitBackendOutput(
> - Diags, CodeGenOpts, TargetOpts, LangOpts,
> + Diags, HeaderSearchOpts, CodeGenOpts, TargetOpts, LangOpts,
> Ctx.getTargetInfo().getDataLayout(), M.get(),
> BackendAction::Backend_EmitLL,
> llvm::make_unique<llvm::raw_svector_ostream>(Buffer));
> @@ -290,9 +290,10 @@ public:
> });
>
> // Use the LLVM backend to emit the pch container.
> - clang::EmitBackendOutput(Diags, CodeGenOpts, TargetOpts, LangOpts,
> - Ctx.getTargetInfo().getDataLayout(), M.get(),
> - BackendAction::Backend_EmitObj,
> std::move(OS));
> + clang::EmitBackendOutput(Diags, HeaderSearchOpts, CodeGenOpts,
> TargetOpts,
> + LangOpts,
> Ctx.getTargetInfo().getDataLayout(),
> + M.get(), BackendAction::Backend_EmitObj,
> + std::move(OS));
>
> // Free the memory for the temporary buffer.
> llvm::SmallVector<char, 0> Empty;
>
> Added: cfe/trunk/test/CodeGen/include/function.x
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/include/function.x?rev=291123&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/CodeGen/include/function.x (added)
> +++ cfe/trunk/test/CodeGen/include/function.x Thu Jan 5 10:02:32 2017
> @@ -0,0 +1 @@
> +FUNCTION = 1
>
> Added: cfe/trunk/test/CodeGen/include/module.x
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/include/module.x?rev=291123&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/CodeGen/include/module.x (added)
> +++ cfe/trunk/test/CodeGen/include/module.x Thu Jan 5 10:02:32 2017
> @@ -0,0 +1 @@
> +MODULE = 1
>
> Added: cfe/trunk/test/CodeGen/inline-asm-inclusion.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/inline-asm-inclusion.c?rev=291123&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/CodeGen/inline-asm-inclusion.c (added)
> +++ cfe/trunk/test/CodeGen/inline-asm-inclusion.c Thu Jan 5 10:02:32 2017
> @@ -0,0 +1,10 @@
> +// RUN: %clang_cc1 -I %p/include -S -o - %s | FileCheck %s
> +
> +__asm__(".include \"module.x\"");
> +void function(void) {
> + __asm__(".include \"function.x\"");
> +}
> +
> +// CHECK: MODULE = 1
> +// CHECK: FUNCTION = 1
> +
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>
>
>
> --
> Saleem Abdulrasool
> compnerd (at) compnerd (dot) org
>
>
>
> _______________________________________________
> cfe-commits mailing listcfe-commits at lists.llvm.orghttp://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>
> --
> Hal Finkel
> Lead, Compiler Technology and Programming Languages
> Leadership Computing Facility
> Argonne National Laboratory
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170107/be679a99/attachment-0001.html>
More information about the cfe-commits
mailing list