aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2008-03-08 00:58:38 +0000
committerEvan Cheng <evan.cheng@apple.com>2008-03-08 00:58:38 +0000
commit27b7db549e4c5bff4579d209304de5628513edeb (patch)
tree57198f184b01fe55ebbca8a70a05c679e1011b97 /lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
parenta2fcff4d97c8fecd58cd977c45f1a883bc6ae1c3 (diff)
Implement x86 support for @llvm.prefetch. It corresponds to prefetcht{0|1|2} and prefetchnta instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48042 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/LegalizeDAG.cpp')
-rw-r--r--lib/CodeGen/SelectionDAG/LegalizeDAG.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
index fd9cf15443..8e59b53d1c 100644
--- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ b/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)) {