[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp X86InstrInfo.td

Evan Cheng evan.cheng at apple.com
Thu Apr 27 01:40:53 PDT 2006



Changes in directory llvm/lib/Target/X86:

X86ISelLowering.cpp updated: 1.193 -> 1.194
X86InstrInfo.td updated: 1.262 -> 1.263
---
Log message:

Make x86 isel lowering produce tailcall nodes. They are match to normal calls
for now.

Patch contributed by Alexander Friedman.


---
Diffs of the changes:  (+17 -1)

 X86ISelLowering.cpp |    2 +-
 X86InstrInfo.td     |   16 ++++++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.193 llvm/lib/Target/X86/X86ISelLowering.cpp:1.194
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.193	Thu Apr 27 03:31:10 2006
+++ llvm/lib/Target/X86/X86ISelLowering.cpp	Thu Apr 27 03:40:39 2006
@@ -1203,7 +1203,7 @@
     Ops.push_back(InFlag);
 
   // FIXME: Do not generate X86ISD::TAILCALL for now.
-  Chain = DAG.getNode(X86ISD::CALL, NodeTys, Ops);
+  Chain = DAG.getNode(isTailCall ? X86ISD::TAILCALL : X86ISD::CALL, NodeTys, Ops);
   InFlag = Chain.getValue(1);
 
   NodeTys.clear();


Index: llvm/lib/Target/X86/X86InstrInfo.td
diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.262 llvm/lib/Target/X86/X86InstrInfo.td:1.263
--- llvm/lib/Target/X86/X86InstrInfo.td:1.262	Sat Apr 22 17:31:45 2006
+++ llvm/lib/Target/X86/X86InstrInfo.td	Thu Apr 27 03:40:39 2006
@@ -75,6 +75,9 @@
 def X86call    : SDNode<"X86ISD::CALL",     SDT_X86Call,
                         [SDNPHasChain, SDNPOutFlag, SDNPOptInFlag]>;
 
+def X86tailcall    : SDNode<"X86ISD::TAILCALL",     SDT_X86Call,
+                        [SDNPHasChain, SDNPOutFlag, SDNPOptInFlag]>;
+
 def X86rep_stos: SDNode<"X86ISD::REP_STOS", SDTX86RepStr,
                         [SDNPHasChain, SDNPInFlag, SDNPOutFlag]>;
 def X86rep_movs: SDNode<"X86ISD::REP_MOVS", SDTX86RepStr,
@@ -2329,6 +2332,19 @@
           (MOV32mi addr:$dst, texternalsym:$src)>;
 
 // Calls
+def : Pat<(X86tailcall R32:$dst),
+      (CALL32r     R32:$dst)>;
+
+def : Pat<(X86tailcall (loadi32 addr:$dst)),
+      (CALL32m addr:$dst)>;
+
+def : Pat<(X86tailcall tglobaladdr:$dst),
+          (CALLpcrel32 tglobaladdr:$dst)>;
+def : Pat<(X86tailcall texternalsym:$dst),
+          (CALLpcrel32 texternalsym:$dst)>;
+
+
+
 def : Pat<(X86call tglobaladdr:$dst),
           (CALLpcrel32 tglobaladdr:$dst)>;
 def : Pat<(X86call texternalsym:$dst),






More information about the llvm-commits mailing list