diff options
Diffstat (limited to 'lib/Target/TargetSelectionDAG.td')
-rw-r--r-- | lib/Target/TargetSelectionDAG.td | 14 |
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), |