aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/TargetSelectionDAG.td
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/TargetSelectionDAG.td')
-rw-r--r--lib/Target/TargetSelectionDAG.td14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/Target/TargetSelectionDAG.td b/lib/Target/TargetSelectionDAG.td
index 4b6d881f2c..0698e1ea35 100644
--- a/lib/Target/TargetSelectionDAG.td
+++ b/lib/Target/TargetSelectionDAG.td
@@ -457,6 +457,13 @@ def extloadf32 : PatFrag<(ops node:$ptr), (ld node:$ptr), [{
LD->getLoadedVT() == MVT::f32;
return false;
}]>;
+def extloadf64 : PatFrag<(ops node:$ptr), (ld node:$ptr), [{
+ if (LoadSDNode *LD = dyn_cast<LoadSDNode>(N))
+ return LD->getExtensionType() == ISD::EXTLOAD &&
+ LD->getAddressingMode() == ISD::UNINDEXED &&
+ LD->getLoadedVT() == MVT::f64;
+ return false;
+}]>;
def sextloadi1 : PatFrag<(ops node:$ptr), (ld node:$ptr), [{
if (LoadSDNode *LD = dyn_cast<LoadSDNode>(N))
@@ -561,6 +568,13 @@ def truncstoref32 : PatFrag<(ops node:$val, node:$ptr),
ST->getAddressingMode() == ISD::UNINDEXED;
return false;
}]>;
+def truncstoref64 : PatFrag<(ops node:$val, node:$ptr),
+ (st node:$val, node:$ptr), [{
+ if (StoreSDNode *ST = dyn_cast<StoreSDNode>(N))
+ return ST->isTruncatingStore() && ST->getStoredVT() == MVT::f64 &&
+ ST->getAddressingMode() == ISD::UNINDEXED;
+ return false;
+}]>;
// indexed store fragments.
def pre_store : PatFrag<(ops node:$val, node:$base, node:$offset),