summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-07-23 18:30:17 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-07-23 18:30:17 +0000
commit9500a24fce02fdbe30f7b22334edded76ee7feb4 (patch)
treeb16f906d18f9dc6cc3a5a198ad13ae80b4014775 /llvm/lib/Target
parent3f659e8731464984760493b1011576256ff0f494 (diff)
downloadbcm5719-llvm-9500a24fce02fdbe30f7b22334edded76ee7feb4.tar.gz
bcm5719-llvm-9500a24fce02fdbe30f7b22334edded76ee7feb4.zip
[Hexagon] Handle unnamed globals in HexagonConstExpr
Instead of comparing names, compare positions in the parent module. llvm-svn: 337723
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp b/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp
index 8b024fad4f8..cbce61bc63c 100644
--- a/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp
@@ -730,9 +730,21 @@ 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:
- assert(V.GV->hasName() && ER.V.GV->hasName());
- return V.GV->getName() < ER.V.GV->getName();
+ 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_BlockAddress: {
const BasicBlock *ThisB = V.BA->getBasicBlock();
const BasicBlock *OtherB = ER.V.BA->getBasicBlock();
OpenPOWER on IntegriCloud