aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/X86/X86ISelDAGToDAG.cpp3
-rw-r--r--lib/Target/X86/X86InstrInfo.td8
2 files changed, 4 insertions, 7 deletions
diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp
index 3cf36a5394..719d1e7d71 100644
--- a/lib/Target/X86/X86ISelDAGToDAG.cpp
+++ b/lib/Target/X86/X86ISelDAGToDAG.cpp
@@ -834,7 +834,8 @@ void X86DAGToDAGISel::Select(SDOperand &Result, SDOperand N) {
}
}
- case X86ISD::CALL: {
+ case X86ISD::CALL:
+ case X86ISD::TAILCALL: {
// Handle indirect call which folds a load here. This never matches by
// the TableGen generated code since the load's chain result is read by
// the callseq_start node.
diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td
index 80327f7fcd..de1c3a1ff4 100644
--- a/lib/Target/X86/X86InstrInfo.td
+++ b/lib/Target/X86/X86InstrInfo.td
@@ -75,7 +75,7 @@ def X86callseq_end :
def X86call : SDNode<"X86ISD::CALL", SDT_X86Call,
[SDNPHasChain, SDNPOutFlag, SDNPOptInFlag]>;
-def X86tailcall : SDNode<"X86ISD::TAILCALL", SDT_X86Call,
+def X86tailcall: SDNode<"X86ISD::TAILCALL", SDT_X86Call,
[SDNPHasChain, SDNPOutFlag, SDNPOptInFlag]>;
def X86rep_stos: SDNode<"X86ISD::REP_STOS", SDTX86RepStr,
@@ -442,8 +442,7 @@ let isCall = 1, noResults = 1 in
[]>;
def CALL32r : I<0xFF, MRM2r, (ops GR32:$dst), "call {*}$dst",
[(X86call GR32:$dst)]>;
- def CALL32m : I<0xFF, MRM2m, (ops i32mem:$dst), "call {*}$dst",
- [(X86call (loadiPTR addr:$dst))]>;
+ def CALL32m : I<0xFF, MRM2m, (ops i32mem:$dst), "call {*}$dst", []>;
}
// Tail call stuff.
@@ -2370,9 +2369,6 @@ def : Pat<(store (i32 (X86Wrapper texternalsym:$src)), addr:$dst),
def : Pat<(X86tailcall GR32:$dst),
(CALL32r GR32:$dst)>;
-def : Pat<(X86tailcall (loadiPTR addr:$dst)),
- (CALL32m addr:$dst)>;
-
def : Pat<(X86tailcall tglobaladdr:$dst),
(CALLpcrel32 tglobaladdr:$dst)>;
def : Pat<(X86tailcall texternalsym:$dst),