[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrInfo.td
Evan Cheng
evan.cheng at apple.com
Sat Feb 25 02:02:34 PST 2006
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)>;
More information about the llvm-commits
mailing list