From 3d2331dba74bc8119c7e9b8df6826279d72bd67d Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Wed, 14 Dec 2005 02:21:01 +0000 Subject: [PATCH] Added sextld + zextld DAG nodes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24703 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/TargetSelectionDAG.td | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/Target/TargetSelectionDAG.td b/lib/Target/TargetSelectionDAG.td index 31d8e4333ab..cc39e0ffd43 100644 --- a/lib/Target/TargetSelectionDAG.td +++ b/lib/Target/TargetSelectionDAG.td @@ -150,6 +150,12 @@ def SDTStore : SDTypeProfile<0, 2, [ // store SDTCisPtrTy<1> ]>; +def SDTIntExtLoad : SDTypeProfile<1, 3, [ // sextload, zextload + SDTCisInt<0>, SDTCisPtrTy<1>, SDTCisVT<2, OtherVT>, SDTCisVT<3, OtherVT>, + SDTCisVTSmallerThanOp<3, 0> +]>; + + //===----------------------------------------------------------------------===// // Selection DAG Node Properties. // @@ -173,6 +179,7 @@ class SDNode; def vt : SDNode<"ISD::VALUETYPE" , SDTOther , [], "VTSDNode">; @@ -245,6 +252,11 @@ def writeport : SDNode<"ISD::WRITEPORT" , SDTWritePort, [SDNPHasChain]>; def load : SDNode<"ISD::LOAD" , SDTLoad, [SDNPHasChain]>; def store : SDNode<"ISD::STORE" , SDTStore, [SDNPHasChain]>; +// Do not use sextld and zextld directly. Use sextload and zextload (see +// below) which pass in a dummy srcvalue node which tblgen will skip over. +def sextld : SDNode<"ISD::SEXTLOAD" , SDTIntExtLoad, [SDNPHasChain]>; +def zextld : SDNode<"ISD::ZEXTLOAD" , SDTIntExtLoad, [SDNPHasChain]>; + //===----------------------------------------------------------------------===// // Selection DAG Condition Codes @@ -311,6 +323,11 @@ def vtFP : PatLeaf<(vt), [{ return MVT::isFloatingPoint(N->getVT()); }]>; def not : PatFrag<(ops node:$in), (xor node:$in, immAllOnes)>; def ineg : PatFrag<(ops node:$in), (sub 0, node:$in)>; +// extending load fragments. +def sextload : PatFrag<(ops node:$ptr, node:$vt), + (sextld node:$ptr, srcvalue:$dummy, node:$vt)>; +def zextload : PatFrag<(ops node:$ptr, node:$vt), + (zextld node:$ptr, srcvalue:$dummy, node:$vt)>; // setcc convenience fragments. def setoeq : PatFrag<(ops node:$lhs, node:$rhs),