<p dir="ltr"><br>
2015/06/08 午後5:23 "Peter Collingbourne" <<a href="mailto:peter@pcc.me.uk">peter@pcc.me.uk</a>>:<br>
><br>
> Hi ruiu,<br>
><br>
> The LLVM code generator can sometimes synthesize symbols, such as SSE<br>
> constants, that are not visible via the LTOModule interface. Allow such<br>
> symbols so long as they have definitions.<br>
><br>
> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D10331&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=WbHeL-AAfkHnmBOO0I1AsqUAadG7EuQn2pHsdV2TIeE&s=BiFHyhgy_J8FEpRKfVw45vioHXs6NbzpSpiFl5Xfsqg&e=">http://reviews.llvm.org/D10331</a><br>
><br>
> Files:<br>
>   COFF/SymbolTable.cpp<br>
>   test/COFF/lto-new-symbol.ll<br>
><br>
> Index: COFF/SymbolTable.cpp<br>
> ===================================================================<br>
> --- COFF/SymbolTable.cpp<br>
> +++ COFF/SymbolTable.cpp<br>
> @@ -276,12 +276,18 @@<br>
>      if (!Body->isExternal())<br>
>        continue;<br>
><br>
> -    // Find an existing Symbol. We should not see any new symbols at this point.<br>
> +    // Find an existing Symbol. We should not see any new undefined symbols at<br>
> +    // this point.<br>
>      StringRef Name = Body->getName();<br>
> -    Symbol *Sym = Symtab[Name];<br>
> +    Symbol *&Sym = Symtab[Name];<br>
>      if (!Sym) {<br>
> -      llvm::errs() << "LTO: unexpected new symbol: " << Name << '\n';<br>
> -      return make_error_code(LLDError::BrokenFile);<br>
> +      Sym = new (Alloc) Symbol(Body);</p>
<p dir="ltr">I'm sorry, I was talking about this line.</p>
<p dir="ltr">> +      if (!isa<Defined>(Body)) {<br>
> +        llvm::errs() << "LTO: undefined symbol: " << Name << '\n';<br>
> +        return make_error_code(LLDError::BrokenFile);<br>
> +      }<br>
> +      Body->setBackref(Sym);<br>
> +      continue;<br>
>      }<br>
>      Body->setBackref(Sym);<br>
><br>
> Index: test/COFF/lto-new-symbol.ll<br>
> ===================================================================<br>
> --- /dev/null<br>
> +++ test/COFF/lto-new-symbol.ll<br>
> @@ -0,0 +1,16 @@<br>
> +; RUN: llvm-as -o %t.obj %s<br>
> +; RUN: lld -flavor link2 /out:%t.exe /entry:foo /subsystem:console %t.obj<br>
> +<br>
> +target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"<br>
> +target triple = "x86_64-pc-windows-msvc"<br>
> +<br>
> +define void @foo(<4 x i32>* %p, <4 x float>* %q, i1 %t) nounwind {<br>
> +entry:<br>
> +  br label %loop<br>
> +loop:<br>
> +  store <4 x i32><i32 1073741824, i32 1073741824, i32 1073741824, i32 1073741824>, <4 x i32>* %p<br>
> +  store <4 x float><float 2.0, float 2.0, float 2.0, float 2.0>, <4 x float>* %q<br>
> +  br i1 %t, label %loop, label %ret<br>
> +ret:<br>
> +  ret void<br>
> +}<br>
><br>
> EMAIL PREFERENCES<br>
>   <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_settings_panel_emailpreferences_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=WbHeL-AAfkHnmBOO0I1AsqUAadG7EuQn2pHsdV2TIeE&s=dbmn3VxsRBXWjfIH8yDXxGaCiFV1Wg_yZPVyT44OST4&e=">http://reviews.llvm.org/settings/panel/emailpreferences/</a><br>
</p>