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?

 -Hal


-eric

On Thu, Jan 5, 2017 at 6:27 PM Saleem Abdulrasool <compn...@compnerd.org <mailto:compn...@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
    <echri...@gmail.com <mailto:echri...@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@lists.llvm.org
        <mailto:cfe-commits@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@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>
            http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits




-- Saleem Abdulrasool
    compnerd (at) compnerd (dot) org



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to