Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: lib/Target/X86/X86SelectionDAGInfo.cpp

Issue 939073008: Rebased PNaCl localmods in LLVM to 223109 (Closed)
Patch Set: undo localmod Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/Target/X86/X86RegisterInfo.td ('k') | lib/Target/X86/X86Subtarget.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===-- X86SelectionDAGInfo.cpp - X86 SelectionDAG Info -------------------===// 1 //===-- X86SelectionDAGInfo.cpp - X86 SelectionDAG Info -------------------===//
2 // 2 //
3 // The LLVM Compiler Infrastructure 3 // The LLVM Compiler Infrastructure
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // This file implements the X86SelectionDAGInfo class. 10 // This file implements the X86SelectionDAGInfo class.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 SDValue 52 SDValue
53 X86SelectionDAGInfo::EmitTargetCodeForMemset(SelectionDAG &DAG, SDLoc dl, 53 X86SelectionDAGInfo::EmitTargetCodeForMemset(SelectionDAG &DAG, SDLoc dl,
54 SDValue Chain, 54 SDValue Chain,
55 SDValue Dst, SDValue Src, 55 SDValue Dst, SDValue Src,
56 SDValue Size, unsigned Align, 56 SDValue Size, unsigned Align,
57 bool isVolatile, 57 bool isVolatile,
58 MachinePointerInfo DstPtrInfo) const { 58 MachinePointerInfo DstPtrInfo) const {
59 ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size); 59 ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
60 const X86Subtarget &Subtarget = DAG.getTarget().getSubtarget<X86Subtarget>(); 60 const X86Subtarget &Subtarget = DAG.getTarget().getSubtarget<X86Subtarget>();
61 61
62 // @LOCALMOD-BEGIN
63 if (Subtarget.isTargetNaCl()) {
64 // TODO: Can we allow this optimization for Native Client?
65 // At the very least, pointer size needs to be fixed below.
66 return SDValue();
67 }
68 // @LOCALMOD-END
62 #ifndef NDEBUG 69 #ifndef NDEBUG
63 // If the base register might conflict with our physical registers, bail out. 70 // If the base register might conflict with our physical registers, bail out.
64 unsigned ClobberSet[] = {X86::RCX, X86::RAX, X86::RDI, 71 unsigned ClobberSet[] = {X86::RCX, X86::RAX, X86::RDI,
65 X86::ECX, X86::EAX, X86::EDI}; 72 X86::ECX, X86::EAX, X86::EDI};
66 assert(!isBaseRegConflictPossible(DAG, ClobberSet)); 73 assert(!isBaseRegConflictPossible(DAG, ClobberSet));
67 #endif 74 #endif
68 75
69 // If to a segment-relative address space, use the default lowering. 76 // If to a segment-relative address space, use the default lowering.
70 if (DstPtrInfo.getAddrSpace() >= 256) 77 if (DstPtrInfo.getAddrSpace() >= 256)
71 return SDValue(); 78 return SDValue();
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 // This requires the copy size to be a constant, preferably 216 // This requires the copy size to be a constant, preferably
210 // within a subtarget-specific limit. 217 // within a subtarget-specific limit.
211 ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size); 218 ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
212 const X86Subtarget &Subtarget = DAG.getTarget().getSubtarget<X86Subtarget>(); 219 const X86Subtarget &Subtarget = DAG.getTarget().getSubtarget<X86Subtarget>();
213 if (!ConstantSize) 220 if (!ConstantSize)
214 return SDValue(); 221 return SDValue();
215 uint64_t SizeVal = ConstantSize->getZExtValue(); 222 uint64_t SizeVal = ConstantSize->getZExtValue();
216 if (!AlwaysInline && SizeVal > Subtarget.getMaxInlineSizeThreshold()) 223 if (!AlwaysInline && SizeVal > Subtarget.getMaxInlineSizeThreshold())
217 return SDValue(); 224 return SDValue();
218 225
226 // @LOCALMOD-BEGIN
227 if (Subtarget.isTargetNaCl()) {
228 // TODO(pdox): Allow use of the NaCl pseudo-instruction for REP MOV
229 return SDValue();
230 }
231 // @LOCALMOD-END
232
219 /// If not DWORD aligned, it is more efficient to call the library. However 233 /// If not DWORD aligned, it is more efficient to call the library. However
220 /// if calling the library is not allowed (AlwaysInline), then soldier on as 234 /// if calling the library is not allowed (AlwaysInline), then soldier on as
221 /// the code generated here is better than the long load-store sequence we 235 /// the code generated here is better than the long load-store sequence we
222 /// would otherwise get. 236 /// would otherwise get.
223 if (!AlwaysInline && (Align & 3) != 0) 237 if (!AlwaysInline && (Align & 3) != 0)
224 return SDValue(); 238 return SDValue();
225 239
226 // If to a segment-relative address space, use the default lowering. 240 // If to a segment-relative address space, use the default lowering.
227 if (DstPtrInfo.getAddrSpace() >= 256 || 241 if (DstPtrInfo.getAddrSpace() >= 256 ||
228 SrcPtrInfo.getAddrSpace() >= 256) 242 SrcPtrInfo.getAddrSpace() >= 256)
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 DAG.getNode(ISD::ADD, dl, SrcVT, Src, 297 DAG.getNode(ISD::ADD, dl, SrcVT, Src,
284 DAG.getConstant(Offset, SrcVT)), 298 DAG.getConstant(Offset, SrcVT)),
285 DAG.getConstant(BytesLeft, SizeVT), 299 DAG.getConstant(BytesLeft, SizeVT),
286 Align, isVolatile, AlwaysInline, 300 Align, isVolatile, AlwaysInline,
287 DstPtrInfo.getWithOffset(Offset), 301 DstPtrInfo.getWithOffset(Offset),
288 SrcPtrInfo.getWithOffset(Offset))); 302 SrcPtrInfo.getWithOffset(Offset)));
289 } 303 }
290 304
291 return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Results); 305 return DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Results);
292 } 306 }
OLDNEW
« no previous file with comments | « lib/Target/X86/X86RegisterInfo.td ('k') | lib/Target/X86/X86Subtarget.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698