SVN r291208 On Thu, Jan 5, 2017 at 6:30 PM, Eric Christopher <echri...@gmail.com> 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. > > -eric > > On Thu, Jan 5, 2017 at 6:27 PM Saleem Abdulrasool <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> >> 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> 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 >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >> >> >> >> -- >> Saleem Abdulrasool >> compnerd (at) compnerd (dot) org >> > -- 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