<div dir="ltr">I think so, sorry about that. I wasn't careful enough here.</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 3, 2014 at 9:03 AM, Tom Stellard <span dir="ltr"><<a href="mailto:tom@stellard.net" target="_blank">tom@stellard.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Fri, Oct 31, 2014 at 04:48:08PM -0700, Reid Kleckner wrote:<br>
> I reverted this in r221020, I see at least one bot also have this link<br>
> error:<br>
> <a href="http://lab.llvm.org:8011/builders/clang-native-arm-lnt/builds/8946/steps/compile/logs/stdio" target="_blank">http://lab.llvm.org:8011/builders/clang-native-arm-lnt/builds/8946/steps/compile/logs/stdio</a><br>
><br>
<br>
</span>Is r221004 not a correct fix for this error?  It added IPO to the list of<br>
libraries required by R600.<br>
<span class="HOEnZb"><font color="#888888"><br>
-Tom<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
> On Fri, Oct 31, 2014 at 3:13 PM, Reid Kleckner <<a href="mailto:rnk@google.com">rnk@google.com</a>> wrote:<br>
><br>
> > This include from lib/Target/R600:<br>
> > #include "llvm/Transforms/Utils/Cloning.h"<br>
> ><br>
> > You probably want to figure something else out.<br>
> ><br>
> > On Fri, Oct 31, 2014 at 2:39 PM, Duncan P. N. Exon Smith <<br>
> > <a href="mailto:dexonsmith@apple.com">dexonsmith@apple.com</a>> wrote:<br>
> ><br>
> >> llc (among others) won't link for me in cmake, even after r220998.<br>
> >><br>
> >> [862/869] Linking CXX executable bin/llc<br>
> >> FAILED: : && /usr/bin/clang++   -fPIC -fvisibility-inlines-hidden -Wall<br>
> >> -W -Wno-unused-parameter -Wwrite-strings -Wmissing-field-initializers<br>
> >> -pedantic -Wno-long-long -Wcovered-switch-default -std=c++11<br>
> >> -fcolor-diagnostics -g -Wl,-search_paths_first<br>
> >> -Wl,-headerpad_max_install_names  tools/llc/CMakeFiles/llc.dir/llc.cpp.o<br>
> >> -o bin/llc lib/libLLVMAArch64CodeGen.a lib/libLLVMAArch64AsmPrinter.a<br>
> >> lib/libLLVMAArch64AsmParser.a lib/libLLVMAArch64Desc.a<br>
> >> lib/libLLVMAArch64Info.a lib/libLLVMAArch64Disassembler.a<br>
> >> lib/libLLVMARMCodeGen.a lib/libLLVMARMAsmPrinter.a<br>
> >> lib/libLLVMARMAsmParser.a lib/libLLVMARMDesc.a lib/libLLVMARMInfo.a<br>
> >> lib/libLLVMARMDisassembler.a lib/libLLVMCppBackendCodeGen.a<br>
> >> lib/libLLVMCppBackendInfo.a lib/libLLVMHexagonCodeGen.a<br>
> >> lib/libLLVMHexagonDesc.a lib/libLLVMHexagonInfo.a<br>
> >> lib/libLLVMHexagonDisassembler.a lib/libLLVMMipsCodeGen.a<br>
> >> lib/libLLVMMipsAsmPrinter.a lib/libLLVMMipsAsmParser.a<br>
> >> lib/libLLVMMipsDesc.a lib/libLLVMMipsInfo.a lib/libLLVMMipsDisassembler.a<br>
> >> lib/libLLV!<br>
> >>  MMSP430CodeGen.a lib/libLLVMMSP430AsmPrinter.a lib/libLLVMMSP430Desc.a<br>
> >> lib/libLLVMMSP430Info.a lib/libLLVMNVPTXCodeGen.a<br>
> >> lib/libLLVMNVPTXAsmPrinter.a lib/libLLVMNVPTXDesc.a lib/libLLVMNVPTXInfo.a<br>
> >> lib/libLLVMPowerPCCodeGen.a lib/libLLVMPowerPCAsmPrinter.a<br>
> >> lib/libLLVMPowerPCAsmParser.a lib/libLLVMPowerPCDesc.a<br>
> >> lib/libLLVMPowerPCInfo.a lib/libLLVMPowerPCDisassembler.a<br>
> >> lib/libLLVMR600CodeGen.a lib/libLLVMR600AsmPrinter.a lib/libLLVMR600Desc.a<br>
> >> lib/libLLVMR600Info.a lib/libLLVMSparcCodeGen.a<br>
> >> lib/libLLVMSparcAsmPrinter.a lib/libLLVMSparcAsmParser.a<br>
> >> lib/libLLVMSparcDesc.a lib/libLLVMSparcInfo.a<br>
> >> lib/libLLVMSparcDisassembler.a lib/libLLVMSystemZCodeGen.a<br>
> >> lib/libLLVMSystemZAsmPrinter.a lib/libLLVMSystemZAsmParser.a<br>
> >> lib/libLLVMSystemZDesc.a lib/libLLVMSystemZInfo.a<br>
> >> lib/libLLVMSystemZDisassembler.a lib/libLLVMX86CodeGen.a<br>
> >> lib/libLLVMX86AsmPrinter.a lib/libLLVMX86AsmParser.a lib/libLLVMX86Desc.a<br>
> >> lib/libLLVMX86Info.a lib/libLLVMX86Disassembler.a lib/libLLVMXCoreCodeGen.a<br>
> >> lib/libLLVMXCoreA!<br>
> >>  smPrinter.a lib/libLLVMXCoreDesc.a lib/libLLVMXCoreInfo.a<br>
> >> lib/libLLVMXCoreDisassembler.a lib/libLLVMAsmPrinter.a lib/libLLVMCodeGen.a<br>
> >> lib/libLLVMCore.a lib/libLLVMIRReader.a lib/libLLVMMC.a<br>
> >> lib/libLLVMScalarOpts.a lib/libLLVMSelectionDAG.a lib/libLLVMSupport.a<br>
> >> lib/libLLVMTarget.a lib/libLLVMAArch64AsmPrinter.a lib/libLLVMAArch64Info.a<br>
> >> lib/libLLVMAArch64Utils.a lib/libLLVMARMDesc.a lib/libLLVMARMAsmPrinter.a<br>
> >> lib/libLLVMARMInfo.a lib/libLLVMHexagonInfo.a lib/libLLVMMipsAsmPrinter.a<br>
> >> lib/libLLVMMipsInfo.a lib/libLLVMMSP430AsmPrinter.a<br>
> >> lib/libLLVMNVPTXAsmPrinter.a lib/libLLVMPowerPCAsmPrinter.a<br>
> >> lib/libLLVMPowerPCInfo.a lib/libLLVMR600AsmPrinter.a<br>
> >> lib/libLLVMSparcAsmPrinter.a lib/libLLVMSparcInfo.a<br>
> >> lib/libLLVMSystemZDesc.a lib/libLLVMSystemZAsmPrinter.a<br>
> >> lib/libLLVMSystemZInfo.a lib/libLLVMX86CodeGen.a lib/libLLVMX86Desc.a<br>
> >> lib/libLLVMX86AsmPrinter.a lib/libLLVMX86Utils.a lib/libLLVMX86Info.a<br>
> >> lib/libLLVMXCoreAsmPrinter.a lib/libLLVMAsmPrinter.a<br>
> >> lib/libLLVMSelectionDAG.a lib/libLLVMCodeGen.a lib/libLLVMScalarOpts.a<br>
> >> lib/libLLVMInstCombine.a lib/libLLVMP!<br>
> >>  rofileData.a lib/libLLVMObject.a lib/libLLVMMCParser.a<br>
> >> lib/libLLVMTransformUtils.a lib/libLLVMipa.a lib/libLLVMAnalysis.a<br>
> >> lib/libLLVMTarget.a lib/libLLVMXCoreInfo.a lib/libLLVMMCDisassembler.a<br>
> >> lib/libLLVMMC.a lib/libLLVMAsmParser.a lib/libLLVMBitReader.a<br>
> >> lib/libLLVMCore.a lib/libLLVMSupport.a -lcurses -lpthread -lz && :<br>
> >> Undefined symbols for architecture x86_64:<br>
> >>   "llvm::createBarrierNoopPass()", referenced from:<br>
> >>       (anonymous namespace)::AMDGPUPassConfig::addIRPasses() in<br>
> >> libLLVMR600CodeGen.a(AMDGPUTargetMachine.cpp.o)<br>
> >>   "llvm::createAlwaysInlinerPass()", referenced from:<br>
> >>       (anonymous namespace)::AMDGPUPassConfig::addIRPasses() in<br>
> >> libLLVMR600CodeGen.a(AMDGPUTargetMachine.cpp.o)<br>
> >> ld: symbol(s) not found for architecture x86_64<br>
> >> clang: error: linker command failed with exit code 1 (use -v to see<br>
> >> invocation)<br>
> >><br>
> >> Can you have a look?<br>
> >><br>
> >> > On 2014-Oct-31, at 13:52, Tom Stellard <<a href="mailto:thomas.stellard@amd.com">thomas.stellard@amd.com</a>> wrote:<br>
> >> ><br>
> >> > Author: tstellar<br>
> >> > Date: Fri Oct 31 15:52:02 2014<br>
> >> > New Revision: 220996<br>
> >> ><br>
> >> > URL: <a href="http://llvm.org/viewvc/llvm-project?rev=220996&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=220996&view=rev</a><br>
> >> > Log:<br>
> >> > R600: Make sure to inline all internal functions<br>
> >> ><br>
> >> > Function calls aren't supported yet.<br>
> >> ><br>
> >> > Added:<br>
> >> >    llvm/trunk/lib/Target/R600/AMDGPUAlwaysInlinePass.cpp<br>
> >> >    llvm/trunk/test/CodeGen/R600/inline-calls.ll<br>
> >> > Modified:<br>
> >> >    llvm/trunk/lib/Target/R600/AMDGPU.h<br>
> >> >    llvm/trunk/lib/Target/R600/AMDGPUTargetMachine.cpp<br>
> >> >    llvm/trunk/test/CodeGen/R600/call.ll<br>
> >> ><br>
> >> > Modified: llvm/trunk/lib/Target/R600/AMDGPU.h<br>
> >> > URL:<br>
> >> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPU.h?rev=220996&r1=220995&r2=220996&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPU.h?rev=220996&r1=220995&r2=220996&view=diff</a><br>
> >> ><br>
> >> ==============================================================================<br>
> >> > --- llvm/trunk/lib/Target/R600/AMDGPU.h (original)<br>
> >> > +++ llvm/trunk/lib/Target/R600/AMDGPU.h Fri Oct 31 15:52:02 2014<br>
> >> > @@ -57,6 +57,7 @@ extern char &SILoadStoreOptimizerID;<br>
> >> > FunctionPass *createAMDGPUPromoteAlloca(const AMDGPUSubtarget &ST);<br>
> >> > Pass *createAMDGPUStructurizeCFGPass();<br>
> >> > FunctionPass *createAMDGPUISelDag(TargetMachine &tm);<br>
> >> > +ModulePass *createAMDGPUAlwaysInlinePass();<br>
> >> ><br>
> >> > /// \brief Creates an AMDGPU-specific Target Transformation Info pass.<br>
> >> > ImmutablePass *<br>
> >> ><br>
> >> > Added: llvm/trunk/lib/Target/R600/AMDGPUAlwaysInlinePass.cpp<br>
> >> > URL:<br>
> >> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPUAlwaysInlinePass.cpp?rev=220996&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPUAlwaysInlinePass.cpp?rev=220996&view=auto</a><br>
> >> ><br>
> >> ==============================================================================<br>
> >> > --- llvm/trunk/lib/Target/R600/AMDGPUAlwaysInlinePass.cpp (added)<br>
> >> > +++ llvm/trunk/lib/Target/R600/AMDGPUAlwaysInlinePass.cpp Fri Oct 31<br>
> >> 15:52:02 2014<br>
> >> > @@ -0,0 +1,66 @@<br>
> >> > +//===-- AMDGPUAlwaysInlinePass.cpp - Promote Allocas<br>
> >> ----------------------===//<br>
> >> > +//<br>
> >> > +//                     The LLVM Compiler Infrastructure<br>
> >> > +//<br>
> >> > +// This file is distributed under the University of Illinois Open<br>
> >> Source<br>
> >> > +// License. See LICENSE.TXT for details.<br>
> >> > +//<br>
> >> ><br>
> >> +//===----------------------------------------------------------------------===//<br>
> >> > +//<br>
> >> > +/// \file<br>
> >> > +/// This pass marks all internal functions as always_inline and creates<br>
> >> > +/// duplicates of all other functions a marks the duplicates as<br>
> >> always_inline.<br>
> >> > +//<br>
> >> ><br>
> >> +//===----------------------------------------------------------------------===//<br>
> >> > +<br>
> >> > +#include "AMDGPU.h"<br>
> >> > +#include "llvm/IR/Module.h"<br>
> >> > +#include "llvm/Transforms/Utils/Cloning.h"<br>
> >> > +<br>
> >> > +using namespace llvm;<br>
> >> > +<br>
> >> > +namespace {<br>
> >> > +<br>
> >> > +class AMDGPUAlwaysInline : public ModulePass {<br>
> >> > +<br>
> >> > +  static char ID;<br>
> >> > +<br>
> >> > +public:<br>
> >> > +  AMDGPUAlwaysInline() : ModulePass(ID) { }<br>
> >> > +  bool runOnModule(Module &M) override;<br>
> >> > +  const char *getPassName() const override { return "AMDGPU Always<br>
> >> Inline Pass"; }<br>
> >> > +};<br>
> >> > +<br>
> >> > +} // End anonymous namespace<br>
> >> > +<br>
> >> > +char AMDGPUAlwaysInline::ID = 0;<br>
> >> > +<br>
> >> > +bool AMDGPUAlwaysInline::runOnModule(Module &M) {<br>
> >> > +<br>
> >> > +  std::vector<Function*> FuncsToClone;<br>
> >> > +  for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {<br>
> >> > +    Function &F = *I;<br>
> >> > +    if (!F.hasLocalLinkage() && !F.isDeclaration() && !F.use_empty())<br>
> >> > +      FuncsToClone.push_back(&F);<br>
> >> > +  }<br>
> >> > +<br>
> >> > +  for (Function *F : FuncsToClone) {<br>
> >> > +    ValueToValueMapTy VMap;<br>
> >> > +    Function *NewFunc = CloneFunction(F, VMap, false);<br>
> >> > +    NewFunc->setLinkage(GlobalValue::InternalLinkage);<br>
> >> > +    F->getParent()->getFunctionList().push_back(NewFunc);<br>
> >> > +    F->replaceAllUsesWith(NewFunc);<br>
> >> > +  }<br>
> >> > +<br>
> >> > +  for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {<br>
> >> > +    Function &F = *I;<br>
> >> > +    if (F.hasLocalLinkage()) {<br>
> >> > +      F.addFnAttr(Attribute::AlwaysInline);<br>
> >> > +    }<br>
> >> > +  }<br>
> >> > +  return false;<br>
> >> > +}<br>
> >> > +<br>
> >> > +ModulePass *llvm::createAMDGPUAlwaysInlinePass() {<br>
> >> > +  return new AMDGPUAlwaysInline();<br>
> >> > +}<br>
> >> ><br>
> >> > Modified: llvm/trunk/lib/Target/R600/AMDGPUTargetMachine.cpp<br>
> >> > URL:<br>
> >> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPUTargetMachine.cpp?rev=220996&r1=220995&r2=220996&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPUTargetMachine.cpp?rev=220996&r1=220995&r2=220996&view=diff</a><br>
> >> ><br>
> >> ==============================================================================<br>
> >> > --- llvm/trunk/lib/Target/R600/AMDGPUTargetMachine.cpp (original)<br>
> >> > +++ llvm/trunk/lib/Target/R600/AMDGPUTargetMachine.cpp Fri Oct 31<br>
> >> 15:52:02 2014<br>
> >> > @@ -80,6 +80,7 @@ public:<br>
> >> >     return nullptr;<br>
> >> >   }<br>
> >> ><br>
> >> > +  void addIRPasses() override;<br>
> >> >   void addCodeGenPrepare() override;<br>
> >> >   bool addPreISel() override;<br>
> >> >   bool addInstSelector() override;<br>
> >> > @@ -106,6 +107,19 @@ void AMDGPUTargetMachine::addAnalysisPas<br>
> >> >   PM.add(createAMDGPUTargetTransformInfoPass(this));<br>
> >> > }<br>
> >> ><br>
> >> > +void AMDGPUPassConfig::addIRPasses() {<br>
> >> > +  // Function calls are not supported, so make sure we inline<br>
> >> everything.<br>
> >> > +  addPass(createAMDGPUAlwaysInlinePass());<br>
> >> > +  addPass(createAlwaysInlinerPass());<br>
> >> > +  // We need to add the barrier noop pass, otherwise adding the<br>
> >> function<br>
> >> > +  // inlining pass will cause all of the PassConfigs passes to be run<br>
> >> > +  // one function at a time, which means if we have a nodule with two<br>
> >> > +  // functions, then we will generate code for the first function<br>
> >> > +  // without ever running any passes on the second.<br>
> >> > +  addPass(createBarrierNoopPass());<br>
> >> > +  TargetPassConfig::addIRPasses();<br>
> >> > +}<br>
> >> > +<br>
> >> > void AMDGPUPassConfig::addCodeGenPrepare() {<br>
> >> >   const AMDGPUSubtarget &ST = TM->getSubtarget<AMDGPUSubtarget>();<br>
> >> >   if (ST.isPromoteAllocaEnabled()) {<br>
> >> ><br>
> >> > Modified: llvm/trunk/test/CodeGen/R600/call.ll<br>
> >> > URL:<br>
> >> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/R600/call.ll?rev=220996&r1=220995&r2=220996&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/R600/call.ll?rev=220996&r1=220995&r2=220996&view=diff</a><br>
> >> ><br>
> >> ==============================================================================<br>
> >> > --- llvm/trunk/test/CodeGen/R600/call.ll (original)<br>
> >> > +++ llvm/trunk/test/CodeGen/R600/call.ll Fri Oct 31 15:52:02 2014<br>
> >> > @@ -1,7 +1,7 @@<br>
> >> > ; RUN: not llc -march=r600 -mcpu=SI -verify-machineinstrs< %s 2>&1 |<br>
> >> FileCheck %s<br>
> >> > ; RUN: not llc -march=r600 -mcpu=cypress < %s 2>&1 | FileCheck %s<br>
> >> ><br>
> >> > -; CHECK: error: unsupported call to function defined_function in<br>
> >> test_call<br>
> >> > +; CHECK: error: unsupported call to function external_function in<br>
> >> test_call_external<br>
> >> ><br>
> >> ><br>
> >> > declare i32 @external_function(i32) nounwind<br>
> >> ><br>
> >> > Added: llvm/trunk/test/CodeGen/R600/inline-calls.ll<br>
> >> > URL:<br>
> >> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/R600/inline-calls.ll?rev=220996&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/R600/inline-calls.ll?rev=220996&view=auto</a><br>
> >> ><br>
> >> ==============================================================================<br>
> >> > --- llvm/trunk/test/CodeGen/R600/inline-calls.ll (added)<br>
> >> > +++ llvm/trunk/test/CodeGen/R600/inline-calls.ll Fri Oct 31 15:52:02<br>
> >> 2014<br>
> >> > @@ -0,0 +1,24 @@<br>
> >> > +; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s |<br>
> >> FileCheck  %s<br>
> >> > +; RUN: llc -march=r600 -mcpu=redwood -verify-machineinstrs < %s |<br>
> >> FileCheck %s<br>
> >> > +<br>
> >> > +; CHECK-NOT: {{^}}func:<br>
> >> > +define internal fastcc i32 @func(i32 %a) {<br>
> >> > +entry:<br>
> >> > +  %tmp0 = add i32 %a, 1<br>
> >> > +  ret i32 %tmp0<br>
> >> > +}<br>
> >> > +<br>
> >> > +; CHECK: {{^}}kernel:<br>
> >> > +define void @kernel(i32 addrspace(1)* %out) {<br>
> >> > +entry:<br>
> >> > +  %tmp0 = call i32 @func(i32 1)<br>
> >> > +  store i32 %tmp0, i32 addrspace(1)* %out<br>
> >> > +  ret void<br>
> >> > +}<br>
> >> > +<br>
> >> > +; CHECK: {{^}}kernel2:<br>
> >> > +define void @kernel2(i32 addrspace(1)* %out) {<br>
> >> > +entry:<br>
> >> > +  call void @kernel(i32 addrspace(1)* %out)<br>
> >> > +  ret void<br>
> >> > +}<br>
> >> ><br>
> >> ><br>
> >> > _______________________________________________<br>
> >> > llvm-commits mailing list<br>
> >> > <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
> >> > <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
> >><br>
> >><br>
> >> _______________________________________________<br>
> >> llvm-commits mailing list<br>
> >> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
> >> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
> >><br>
> ><br>
> ><br>
<br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br>
</div></div></blockquote></div><br></div>