r291123 - CodeGen: plumb header search down to the IAS

Saleem Abdulrasool via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 5 18:27:16 PST 2017


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170105/77f2432c/attachment-0001.html>


More information about the cfe-commits mailing list