Changes in directory llvm/lib/Target/X86:
X86InstrInfo.td updated: 1.249 -> 1.250 --- Log message: * Allow mul, shl nodes to be codegen'd as LEA (if appropriate). * Add patterns to handle GlobalAddress, ConstantPool, etc. MOV32ri to materialize these nodes in registers. ADD32ri to handle %reg + GA, etc. MOV32mi to handle store GA, etc. to memory. --- Diffs of the changes: (+24 -1) X86InstrInfo.td | 25 ++++++++++++++++++++++++- 1 files changed, 24 insertions(+), 1 deletion(-) Index: llvm/lib/Target/X86/X86InstrInfo.td diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.249 llvm/lib/Target/X86/X86InstrInfo.td:1.250 --- llvm/lib/Target/X86/X86InstrInfo.td:1.249 Thu Feb 23 14:41:18 2006 +++ llvm/lib/Target/X86/X86InstrInfo.td Sat Feb 25 04:02:21 2006 @@ -56,6 +56,8 @@ def SDTX86RdTsc : SDTypeProfile<0, 0, []>; +def SDTX86Wrapper : SDTypeProfile<1, 1, [SDTCisSameAs<0, 1>, SDTCisPtrTy<0>]>; + def X86shld : SDNode<"X86ISD::SHLD", SDTIntShiftDOp>; def X86shrd : SDNode<"X86ISD::SHRD", SDTIntShiftDOp>; @@ -120,6 +122,8 @@ def X86loadp : SDNode<"X86ISD::LOAD_PACK", SDTLoad, [SDNPHasChain]>; +def X86Wrapper : SDNode<"X86ISD::Wrapper", SDTX86Wrapper>; + //===----------------------------------------------------------------------===// // X86 Operand Definitions. // @@ -165,7 +169,7 @@ // Define X86 specific addressing mode. def addr : ComplexPattern<i32, 4, "SelectAddr", []>; def leaaddr : ComplexPattern<i32, 4, "SelectLEAAddr", - [add, frameindex]>; + [add, mul, shl, frameindex]>; //===----------------------------------------------------------------------===// // X86 Instruction Format Definitions. @@ -2352,6 +2356,25 @@ // Non-Instruction Patterns //===----------------------------------------------------------------------===// +// ConstantPool GlobalAddress, ExternalSymbol +def : Pat<(i32 (X86Wrapper tconstpool :$dst)), (MOV32ri tconstpool :$dst)>; +def : Pat<(i32 (X86Wrapper tglobaladdr :$dst)), (MOV32ri tglobaladdr :$dst)>; +def : Pat<(i32 (X86Wrapper texternalsym:$dst)), (MOV32ri texternalsym:$dst)>; + +def : Pat<(add R32:$src1, (X86Wrapper tconstpool:$src2)), + (ADD32ri R32:$src1, tconstpool:$src2)>; +def : Pat<(add R32:$src1, (X86Wrapper tglobaladdr :$src2)), + (ADD32ri R32:$src1, tglobaladdr:$src2)>; +def : Pat<(add R32:$src1, (X86Wrapper texternalsym:$src2)), + (ADD32ri R32:$src1, texternalsym:$src2)>; + +def : Pat<(store (X86Wrapper tconstpool:$src), addr:$dst), + (MOV32mi addr:$dst, tconstpool:$src)>; +def : Pat<(store (X86Wrapper tglobaladdr:$src), addr:$dst), + (MOV32mi addr:$dst, tglobaladdr:$src)>; +def : Pat<(store (X86Wrapper texternalsym:$src), addr:$dst), + (MOV32mi addr:$dst, texternalsym:$src)>; + // Calls def : Pat<(X86call tglobaladdr:$dst), (CALLpcrel32 tglobaladdr:$dst)>; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits