-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