diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-03-08 00:58:38 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-03-08 00:58:38 +0000 |
commit | 95cf661534ff6c24e5dba4d156842a00b6af8499 (patch) | |
tree | de7a94e33d8a94211cf1e8f56c3b5b32ec731ceb /llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | |
parent | d2ab5fd713eb933c48876c1cb9f627a99c64f2b9 (diff) | |
download | bcm5719-llvm-95cf661534ff6c24e5dba4d156842a00b6af8499.tar.gz bcm5719-llvm-95cf661534ff6c24e5dba4d156842a00b6af8499.zip |
Implement x86 support for @llvm.prefetch. It corresponds to prefetcht{0|1|2} and prefetchnta instructions.
llvm-svn: 48042
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index fd9cf154436..8e59b53d1cb 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -1142,6 +1142,24 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) { } break; + case ISD::PREFETCH: + assert(Node->getNumOperands() == 4 && "Invalid Prefetch node!"); + switch (TLI.getOperationAction(ISD::PREFETCH, MVT::Other)) { + default: assert(0 && "This action is not supported yet!"); + case TargetLowering::Legal: + Tmp1 = LegalizeOp(Node->getOperand(0)); // Legalize the chain. + Tmp2 = LegalizeOp(Node->getOperand(1)); // Legalize the address. + Tmp3 = LegalizeOp(Node->getOperand(2)); // Legalize the rw specifier. + Tmp4 = LegalizeOp(Node->getOperand(3)); // Legalize locality specifier. + Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, Tmp3, Tmp4); + break; + case TargetLowering::Expand: + // It's a noop. + Result = LegalizeOp(Node->getOperand(0)); + break; + } + break; + case ISD::MEMBARRIER: { assert(Node->getNumOperands() == 6 && "Invalid MemBarrier node!"); switch (TLI.getOperationAction(ISD::MEMBARRIER, MVT::Other)) { |