diff options
| author | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-09-05 15:54:44 +0000 |
|---|---|---|
| committer | Krzysztof Parzyszek <kparzysz@codeaurora.org> | 2018-09-05 15:54:44 +0000 |
| commit | 31f2517dea17441ed011fb806d7ee0a07e3fe4d3 (patch) | |
| tree | 60dcab502fbce0ca9821e545e294d7559831e96b | |
| parent | 96ff6d8772ebe768c04e7c56855190c57e27ffd6 (diff) | |
| download | bcm5719-llvm-31f2517dea17441ed011fb806d7ee0a07e3fe4d3.tar.gz bcm5719-llvm-31f2517dea17441ed011fb806d7ee0a07e3fe4d3.zip | |
[Hexagon] Ignore unnamed globals in HexagonConstExtenders
This replaces r337723. The global list in the module can be huge with LTO,
plus the module can change between different invocations of the pass, so
there is no easy way to deterministically cache the ordering (especially
in the presence of multiple threads).
llvm-svn: 341478
| -rw-r--r-- | llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp b/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp index 35b0ff905e4..81bb36135d8 100644 --- a/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp +++ b/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp @@ -730,21 +730,8 @@ bool HCE::ExtRoot::operator< (const HCE::ExtRoot &ER) const { } case MachineOperand::MO_ExternalSymbol: return StringRef(V.SymbolName) < StringRef(ER.V.SymbolName); - case MachineOperand::MO_GlobalAddress: { - // Global values may not have names, so compare their positions - // in the parent module. - const Module &M = *V.GV->getParent(); - auto FindPos = [&M] (const GlobalValue &V) { - unsigned P = 0; - for (const GlobalValue &T : M.global_values()) { - if (&T == &V) - return P; - P++; - } - llvm_unreachable("Global value not found in module"); - }; - return FindPos(*V.GV) < FindPos(*ER.V.GV); - } + case MachineOperand::MO_GlobalAddress: + return V.GV->getGUID() < ER.V.GV->getGUID(); case MachineOperand::MO_BlockAddress: { const BasicBlock *ThisB = V.BA->getBasicBlock(); const BasicBlock *OtherB = ER.V.BA->getBasicBlock(); @@ -1221,6 +1208,12 @@ void HCE::recordExtender(MachineInstr &MI, unsigned OpNum) { } ED.UseMI = &MI; + + // Ignore unnamed globals. + ExtRoot ER(ED.getOp()); + if (ER.Kind == MachineOperand::MO_GlobalAddress) + if (ER.V.GV->getName().empty()) + return; Extenders.push_back(ED); } |

