Mark associative nodes as associative

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23503 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2005-09-28 20:58:39 +00:00
parent 7cf2fe6c48
commit a5cac6f6eb

View File

@ -87,7 +87,8 @@ def SDTExtInreg : SDTypeProfile<1, 2, [ // sext_inreg
// Note: These are hard coded into tblgen. // Note: These are hard coded into tblgen.
// //
class SDNodeProperty; class SDNodeProperty;
def SDNPCommutative : SDNodeProperty; def SDNPCommutative : SDNodeProperty; // X op Y == Y op X
def SDNPAssociative : SDNodeProperty; // (X op Y) op Z == X op (Y op Z)
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Selection DAG Node definitions. // Selection DAG Node definitions.
@ -105,12 +106,17 @@ def node;
def imm : SDNode<"ISD::Constant" , SDTImm , [], "ConstantSDNode">; def imm : SDNode<"ISD::Constant" , SDTImm , [], "ConstantSDNode">;
def vt : SDNode<"ISD::VALUETYPE" , SDTVT , [], "VTSDNode">; def vt : SDNode<"ISD::VALUETYPE" , SDTVT , [], "VTSDNode">;
def and : SDNode<"ISD::AND" , SDTIntBinOp, [SDNPCommutative]>; def and : SDNode<"ISD::AND" , SDTIntBinOp,
def or : SDNode<"ISD::OR" , SDTIntBinOp, [SDNPCommutative]>; [SDNPCommutative, SDNPAssociative]>;
def xor : SDNode<"ISD::XOR" , SDTIntBinOp, [SDNPCommutative]>; def or : SDNode<"ISD::OR" , SDTIntBinOp,
def add : SDNode<"ISD::ADD" , SDTBinOp , [SDNPCommutative]>; [SDNPCommutative, SDNPAssociative]>;
def xor : SDNode<"ISD::XOR" , SDTIntBinOp,
[SDNPCommutative, SDNPAssociative]>;
def add : SDNode<"ISD::ADD" , SDTBinOp ,
[SDNPCommutative, SDNPAssociative]>;
def sub : SDNode<"ISD::SUB" , SDTBinOp>; def sub : SDNode<"ISD::SUB" , SDTBinOp>;
def mul : SDNode<"ISD::MUL" , SDTBinOp , [SDNPCommutative]>; def mul : SDNode<"ISD::MUL" , SDTBinOp ,
[SDNPCommutative, SDNPAssociative]>;
def sdiv : SDNode<"ISD::SDIV" , SDTBinOp>; def sdiv : SDNode<"ISD::SDIV" , SDTBinOp>;
def udiv : SDNode<"ISD::UDIV" , SDTIntBinOp>; def udiv : SDNode<"ISD::UDIV" , SDTIntBinOp>;
def mulhs : SDNode<"ISD::MULHS" , SDTIntBinOp, [SDNPCommutative]>; def mulhs : SDNode<"ISD::MULHS" , SDTIntBinOp, [SDNPCommutative]>;