r291123 - CodeGen: plumb header search down to the IAS
Saleem Abdulrasool via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 5 18:38:35 PST 2017
SVN r291208
On Thu, Jan 5, 2017 at 6:30 PM, Eric Christopher <echristo at 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 <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
>>
>
--
Saleem Abdulrasool
compnerd (at) compnerd (dot) org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170105/dd5519b7/attachment-0001.html>
More information about the cfe-commits
mailing list