<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Mar 20, 2018 at 6:01 PM Friedman, Eli <<a href="mailto:efriedma@codeaurora.org">efriedma@codeaurora.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 3/20/2018 5:48 PM, David Blaikie via llvm-commits wrote:<br>
> Author: dblaikie<br>
> Date: Tue Mar 20 17:48:05 2018<br>
> New Revision: 328065<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=328065&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=328065&view=rev</a><br>
> Log:<br>
> Move DataTypes.h from Support to llvm-c to fix layering.<br>
><br>
> Support depends on llvm-c (a few typedefs, macros, etc - Types.h,<br>
> Disassembler.h, and TargetMachine.h.<br>
><br>
> This could be done the other way - those macros/typedefs/etc could be<br>
> moved into Support and used from llvm-c instead. If someone feels that's<br>
> a better direction to go, happy to discuss it/try it out/etc.<br>
<br>
This seems backwards.<br>
<br>
include/llvm-c/* is the C API wrapper, which allows code written in<br>
languages other than C++ to call LLVM APIs.  There shouldn't be any<br>
dependencies from include/llvm/* to include/llvm-c/*.<br></blockquote><div><br>Yeah, I have some of the same feelings, though they seem pretty broad (see below).<br><br>I think the llvm-c API is basically implemented across LLVM in all the libraries that implement the underlying functionality (eg: lib/Target/Target.cpp implements lots of llvm-c's LLVMTarget* functions - rather than them being implemented in lib/llvm-c).<br><br>(the dependencies on llvm-c/* from include/llvm are smaller - mostly just those macros/typedefs I mentioned - which could mostly be moved into llvm, or rewritten to not use those macros (well, only if we moved the lib implementations too - because they depend on the macros that stamp out wrap/unwrap, etc))<br><br> $ grep -r "llvm-c\/" lib include | grep -v "^include/llvm-c" | grep -v "^lib/llvm-c"</div><div>lib/CodeGen/CodeGen.cpp:#include "llvm-c/Initialization.h"</div><div>lib/MC/MCDisassembler/Disassembler.h:#include "llvm-c/Disassembler.h"</div><div>lib/MC/MCDisassembler/Disassembler.cpp:#include "llvm-c/Disassembler.h"</div><div>lib/MC/MCDisassembler/Disassembler.cpp:// the header llvm-c/Disassembler.h .  The pointer to the block and the </div><div>lib/MC/MCDisassembler/MCRelocationInfo.cpp:#include "llvm-c/Disassembler.h"</div><div>lib/Object/Object.cpp:#include "llvm-c/Object.h"</div><div>lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp:#include "llvm-c/Disassembler.h"</div><div>lib/Target/TargetMachineC.cpp:#include "llvm-c/Core.h"</div><div>lib/Target/TargetMachineC.cpp:#include "llvm-c/Target.h"</div><div>lib/Target/TargetMachineC.cpp:#include "llvm-c/TargetMachine.h"</div><div>lib/Target/Target.cpp:#include "llvm-c/Target.h"</div><div>lib/Target/Target.cpp:#include "llvm-c/Initialization.h"</div><div>lib/Target/Target.cpp:// Avoid including "llvm-c/Core.h" for compile time, fwd-declare this instead.</div><div>lib/Target/ARM/MCTargetDesc/ARMMachORelocationInfo.cpp:#include "llvm-c/Disassembler.h"</div><div>lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp:#include "llvm-c/Disassembler.h"</div><div>lib/Linker/LinkModules.cpp:#include "llvm-c/Linker.h"</div><div>lib/IR/DebugInfo.cpp:#include "llvm-c/DebugInfo.h"</div><div>lib/IR/Comdat.cpp:#include "llvm-c/Comdat.h"</div><div>lib/IR/Core.cpp:#include "llvm-c/Core.h"</div><div>lib/Support/PrettyStackTrace.cpp:#include "llvm-c/ErrorHandling.h"</div><div>lib/Support/ErrorHandling.cpp:#include "llvm-c/ErrorHandling.h"</div><div>lib/Support/CommandLine.cpp:#include "llvm-c/Support.h"</div><div>lib/Support/DynamicLibrary.cpp:#include "llvm-c/Support.h"</div><div>lib/IRReader/IRReader.cpp:#include "llvm-c/IRReader.h"</div><div>lib/Analysis/Analysis.cpp:#include "llvm-c/Analysis.h"</div><div>lib/Analysis/Analysis.cpp:#include "llvm-c/Initialization.h"</div><div>lib/Transforms/Scalar/Scalar.cpp:#include "llvm-c/Initialization.h"</div><div>lib/Transforms/Scalar/Scalar.cpp:#include "llvm-c/Transforms/Scalar.h"</div><div>lib/Transforms/InstCombine/InstructionCombining.cpp:#include "llvm-c/Initialization.h"</div><div>lib/Transforms/Vectorize/Vectorize.cpp:#include "llvm-c/Initialization.h"</div><div>lib/Transforms/Vectorize/Vectorize.cpp:#include "llvm-c/Transforms/Vectorize.h"</div><div>lib/Transforms/IPO/IPO.cpp:#include "llvm-c/Transforms/IPO.h"</div><div>lib/Transforms/IPO/IPO.cpp:#include "llvm-c/Initialization.h"</div><div>lib/Transforms/IPO/PassManagerBuilder.cpp:#include "llvm-c/Transforms/PassManagerBuilder.h"</div><div>lib/Transforms/ObjCARC/ObjCARC.cpp:#include "llvm-c/Initialization.h"</div><div>lib/Transforms/Instrumentation/Instrumentation.cpp:#include "llvm-c/Initialization.h"</div><div>lib/Transforms/Utils/Utils.cpp:#include "llvm-c/Initialization.h"</div><div>lib/ExecutionEngine/Orc/OrcCBindings.cpp:#include "llvm-c/OrcBindings.h"</div><div>lib/ExecutionEngine/Orc/OrcCBindingsStack.h:#include "llvm-c/OrcBindings.h"</div><div>lib/ExecutionEngine/Orc/OrcCBindingsStack.h:#include "llvm-c/TargetMachine.h"</div><div>lib/ExecutionEngine/ExecutionEngineBindings.cpp:#include "llvm-c/ExecutionEngine.h"</div><div>lib/Bitcode/Reader/BitReader.cpp:#include "llvm-c/BitReader.h"</div><div>lib/Bitcode/Reader/BitReader.cpp:#include "llvm-c/Core.h"</div><div>lib/Bitcode/Writer/BitWriter.cpp:#include "llvm-c/BitWriter.h"</div><div>include/llvm/MC/MCDisassembler/MCExternalSymbolizer.h:#include "llvm-c/Disassembler.h"</div><div>include/llvm/MC/MCDisassembler/MCExternalSymbolizer.h:/// See llvm-c/Disassembler.h.</div><div>include/llvm/MC/MCDisassembler/MCRelocationInfo.h:  /// The VariantKinds are defined in llvm-c/Disassembler.h.</div><div>include/llvm/IR/IRBuilder.h:#include "llvm-c/Types.h"</div><div>include/llvm/IR/Comdat.h:#include "llvm-c/Types.h"</div><div>include/llvm/IR/DiagnosticInfo.h:#include "llvm-c/Types.h"</div><div>include/llvm/IR/Attributes.h:#include "llvm-c/Types.h"</div><div>include/llvm/IR/Use.h:#include "llvm-c/Types.h"</div><div>include/llvm/IR/LLVMContext.h:#include "llvm-c/Types.h"</div><div>include/llvm/IR/BasicBlock.h:#include "llvm-c/Types.h"</div><div>include/llvm/IR/Module.h:#include "llvm-c/Types.h"</div><div>include/llvm/IR/Value.h:#include "llvm-c/Types.h"</div><div>include/llvm/Support/CBindingWrapping.h:#include "llvm-c/Types.h"</div><div>include/llvm/Support/CodeGenCWrappers.h:#include "llvm-c/TargetMachine.h"</div><div>include/llvm/Support/TargetRegistry.h:#include "llvm-c/Disassembler.h"</div><div>include/llvm/Support/DataTypes.h:#include "llvm-c/DataTypes.h"</div><div>include/llvm/Support/MemoryBuffer.h:#include "llvm-c/Types.h"</div><div>include/llvm/LTO/legacy/LTOCodeGenerator.h:#include "llvm-c/lto.h"</div><div>include/llvm/LTO/legacy/LTOModule.h:#include "llvm-c/lto.h"</div><div>include/llvm/LTO/legacy/ThinLTOCodeGenerator.h:#include "llvm-c/lto.h"</div><div>include/llvm/ExecutionEngine/ExecutionEngine.h:#include "llvm-c/ExecutionEngine.h"</div><div>include/llvm/ExecutionEngine/RTDyldMemoryManager.h:#include "llvm-c/ExecutionEngine.h"</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
-Eli<br>
<br>
--<br>
Employee of Qualcomm Innovation Center, Inc.<br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project<br>
<br>
</blockquote></div></div>