Magellan Linux

Annotation of /trunk/rust/patches/rust-1.22.1-thinlto-llvm5-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3059 - (hide annotations) (download)
Fri Dec 29 10:05:56 2017 UTC (6 years, 5 months ago) by niro
File size: 3106 byte(s)
-added thinlto llvm5 fixes patch
1 niro 3059 --- rustc-1.22.1-src/src/rustllvm/PassWrapper.cpp 2017-11-22 22:33:00.000000000 +0100
2     +++ rustc-1.22.1-src-llvm5/src/rustllvm/PassWrapper.cpp 2017-12-29 11:02:21.761588941 +0100
3     @@ -26,11 +26,13 @@
4     #include "llvm/Transforms/IPO/PassManagerBuilder.h"
5    
6     #if LLVM_VERSION_GE(4, 0)
7     -#include "llvm/Object/ModuleSummaryIndexObjectFile.h"
8     #include "llvm/Transforms/IPO/AlwaysInliner.h"
9     #include "llvm/Transforms/IPO/FunctionImport.h"
10     #include "llvm/Transforms/Utils/FunctionImportUtils.h"
11     #include "llvm/LTO/LTO.h"
12     +#if LLVM_VERSION_LE(4, 0)
13     +#include "llvm/Object/ModuleSummaryIndexObjectFile.h"
14     +#endif
15     #endif
16    
17     #include "llvm-c/Transforms/PassManagerBuilder.h"
18     @@ -888,6 +890,33 @@
19     return;
20     Preserved.insert(GUID);
21    
22     +#if LLVM_VERSION_GE(5, 0)
23     + auto Info = Index.getValueInfo(GUID);
24     + if (!Info) {
25     + return;
26     + }
27     + for (auto &Summary : Info.getSummaryList()) {
28     + for (auto &Ref : Summary->refs()) {
29     + addPreservedGUID(Index, Preserved, Ref.getGUID());
30     + }
31     +
32     + GlobalValueSummary *GVSummary = Summary.get();
33     + if (isa<FunctionSummary>(GVSummary)) {
34     + auto *FS = cast<FunctionSummary>(GVSummary);
35     + for (auto &Call: FS->calls()) {
36     + addPreservedGUID(Index, Preserved, Call.first.getGUID());
37     + }
38     + for (auto &GUID: FS->type_tests()) {
39     + addPreservedGUID(Index, Preserved, GUID);
40     + }
41     + }
42     + if (isa<AliasSummary>(GVSummary)) {
43     + auto *AS = cast<AliasSummary>(GVSummary);
44     + auto GUID = AS->getAliasee().getOriginalName();
45     + addPreservedGUID(Index, Preserved, GUID);
46     + }
47     + }
48     +#else
49     auto SummaryList = Index.findGlobalValueSummaryList(GUID);
50     if (SummaryList == Index.end())
51     return;
52     @@ -917,6 +946,7 @@
53     }
54     }
55     }
56     +#endif
57     }
58    
59     // The main entry point for creating the global ThinLTO analysis. The structure
60     @@ -937,6 +967,12 @@
61    
62     Ret->ModuleMap[module->identifier] = mem_buffer;
63    
64     +#if LLVM_VERSION_GE(5, 0)
65     + if (Error Err = readModuleSummaryIndex(mem_buffer, Ret->Index, i)) {
66     + LLVMRustSetLastError(toString(std::move(Err)).c_str());
67     + return nullptr;
68     + }
69     +#else
70     Expected<std::unique_ptr<object::ModuleSummaryIndexObjectFile>> ObjOrErr =
71     object::ModuleSummaryIndexObjectFile::create(mem_buffer);
72     if (!ObjOrErr) {
73     @@ -945,6 +981,7 @@
74     }
75     auto Index = (*ObjOrErr)->takeIndex();
76     Ret->Index.mergeFrom(std::move(Index), i);
77     +#endif
78     }
79    
80     // Collect for each module the list of function it defines (GUID -> Summary)
81     @@ -978,8 +1015,13 @@
82     StringMap<std::map<GlobalValue::GUID, GlobalValue::LinkageTypes>> ResolvedODR;
83     DenseMap<GlobalValue::GUID, const GlobalValueSummary *> PrevailingCopy;
84     for (auto &I : Ret->Index) {
85     +#if LLVM_VERSION_GE(5, 0)
86     + if (I.second.SummaryList.size() > 1)
87     + PrevailingCopy[I.first] = getFirstDefinitionForLinker(I.second.SummaryList);
88     +#else
89     if (I.second.size() > 1)
90     PrevailingCopy[I.first] = getFirstDefinitionForLinker(I.second);
91     +#endif
92     }
93     auto isPrevailing = [&](GlobalValue::GUID GUID, const GlobalValueSummary *S) {
94     const auto &Prevailing = PrevailingCopy.find(GUID);