summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-09-05 15:54:44 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-09-05 15:54:44 +0000
commit31f2517dea17441ed011fb806d7ee0a07e3fe4d3 (patch)
tree60dcab502fbce0ca9821e545e294d7559831e96b
parent96ff6d8772ebe768c04e7c56855190c57e27ffd6 (diff)
downloadbcm5719-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.cpp23
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);
}
OpenPOWER on IntegriCloud