diff options
author | Derek Schuff <dschuff@chromium.org> | 2013-02-15 16:12:59 -0800 |
---|---|---|
committer | Derek Schuff <dschuff@chromium.org> | 2013-02-15 16:12:59 -0800 |
commit | 50c20006ea707be7e439c3093d4a064ccfe78b7a (patch) | |
tree | b482850ca0a94a809d7396b4206b7e7a242993e7 /lib/Target | |
parent | de82c04bfc33b44fc650cf7f330dbf26992faf8b (diff) |
Don't fold negative constants into addresss displacements for memory references
This results in trying to reference a negative offset from r15.
R=sehr@chromium.org,jvoung@chromium.org,eliben@chromium.org
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3302
Review URL: https://codereview.chromium.org/12277018
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/X86/X86ISelDAGToDAG.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp index 70cfa7d516..f4a9ca38d2 100644 --- a/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -607,6 +607,14 @@ bool X86DAGToDAGISel::FoldOffsetIntoAddress(uint64_t Offset, if (AM.BaseType == X86ISelAddressMode::FrameIndexBase && !isDispSafeForFrameIndex(Val)) return true; + // LOCALMOD-BEGIN + // Do not allow negative displacements to be folded into memory operations. + // This results in trying to dereference a negative offset from RZP + else if (Subtarget->isTargetNaCl64() && + AM.BaseType == X86ISelAddressMode::RegBase && Val < 0 && + selectingMemOp) + return true; + // LOCALMOD-END } AM.Disp = Val; return false; |