summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2015-03-23 16:06:01 +0000
committerTom Stellard <thomas.stellard@amd.com>2015-03-23 16:06:01 +0000
commitf0a575f6be1ace7c1c5fd4cffe34ce3078ada74e (patch)
tree621c9a50e59d0c3e5ad88e0d92d5dd89be0ea6b9 /llvm/lib
parent544d2bdb5caf7b20a75901e4b2262d3dff3d59c3 (diff)
downloadbcm5719-llvm-f0a575f6be1ace7c1c5fd4cffe34ce3078ada74e.tar.gz
bcm5719-llvm-f0a575f6be1ace7c1c5fd4cffe34ce3078ada74e.zip
R600/SI: Fix crash in SIInstrInfo::areLoadsFromSameBasePtr()
This function assumed that SMRD instructions always have immediate offsets, which is not always the case. llvm-svn: 232957
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/R600/SIInstrInfo.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/Target/R600/SIInstrInfo.cpp b/llvm/lib/Target/R600/SIInstrInfo.cpp
index 95334c30d17..c8468f98524 100644
--- a/llvm/lib/Target/R600/SIInstrInfo.cpp
+++ b/llvm/lib/Target/R600/SIInstrInfo.cpp
@@ -120,12 +120,20 @@ bool SIInstrInfo::areLoadsFromSameBasePtr(SDNode *Load0, SDNode *Load1,
if (Load0->getOperand(0) != Load1->getOperand(0))
return false;
+ const ConstantSDNode *Load0Offset =
+ dyn_cast<ConstantSDNode>(Load0->getOperand(1));
+ const ConstantSDNode *Load1Offset =
+ dyn_cast<ConstantSDNode>(Load1->getOperand(1));
+
+ if (!Load0Offset || !Load1Offset)
+ return false;
+
// Check chain.
if (findChainOperand(Load0) != findChainOperand(Load1))
return false;
- Offset0 = cast<ConstantSDNode>(Load0->getOperand(1))->getZExtValue();
- Offset1 = cast<ConstantSDNode>(Load1->getOperand(1))->getZExtValue();
+ Offset0 = Load0Offset->getZExtValue();
+ Offset1 = Load1Offset->getZExtValue();
return true;
}
OpenPOWER on IntegriCloud