[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrInfo.td X86RegisterInfo.cpp
Evan Cheng
evan.cheng at apple.com
Fri Dec 23 14:14:46 PST 2005
Changes in directory llvm/lib/Target/X86:
X86InstrInfo.td updated: 1.184 -> 1.185
X86RegisterInfo.cpp updated: 1.113 -> 1.114
---
Log message:
* Removed the use of FLAG. Now use hasFlagIn and hasFlagOut instead.
* Added a pseudo instruction (for each target) that represent "return void".
This is a workaround for lack of optional flag operand (return void is not
lowered so it does not have a flag operand.)
---
Diffs of the changes: (+19 -18)
X86InstrInfo.td | 36 ++++++++++++++++++------------------
X86RegisterInfo.cpp | 1 +
2 files changed, 19 insertions(+), 18 deletions(-)
Index: llvm/lib/Target/X86/X86InstrInfo.td
diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.184 llvm/lib/Target/X86/X86InstrInfo.td:1.185
--- llvm/lib/Target/X86/X86InstrInfo.td:1.184 Fri Dec 23 01:31:11 2005
+++ llvm/lib/Target/X86/X86InstrInfo.td Fri Dec 23 16:14:32 2005
@@ -32,13 +32,12 @@
[SDTCisVT<0, i8>, SDTCisVT<1, OtherVT>,
SDTCisVT<2, FlagVT>]>;
-def SDTX86RetFlag : SDTypeProfile<0, 2, [SDTCisVT<0, i16>,
- SDTCisVT<1, FlagVT>]>;
+def SDTX86RetFlag : SDTypeProfile<0, 1, [SDTCisVT<0, i16>]>;
def SDTX86Fld : SDTypeProfile<1, 2, [SDTCisVT<0, f64>,
SDTCisPtrTy<1>, SDTCisVT<2, OtherVT>]>;
-def SDTX86FpSet : SDTypeProfile<1, 1, [SDTCisVT<0, FlagVT>, SDTCisFP<1>]>;
+def SDTX86FpSet : SDTypeProfile<0, 1, [SDTCisFP<0>]>;
def X86cmp : SDNode<"X86ISD::CMP" , SDTX86CmpTest, []>;
def X86test : SDNode<"X86ISD::TEST", SDTX86CmpTest, []>;
@@ -47,7 +46,7 @@
def X86Brcond : SDNode<"X86ISD::BRCOND", SDTX86BrCond, [SDNPHasChain]>;
def X86SetCC : SDNode<"X86ISD::SETCC", SDTX86SetCC, []>;
-def X86retflag : SDNode<"X86ISD::RET_FLAG", SDTX86RetFlag, [SDNPHasChain]>;
+def X86retflag : SDNode<"X86ISD::RET_FLAG", SDTX86RetFlag, [SDNPHasChain]>;
def X86fld : SDNode<"X86ISD::FLD", SDTX86Fld, [SDNPHasChain]>;
@@ -290,13 +289,17 @@
//
// Return instructions.
-let isTerminator = 1, isReturn = 1, isBarrier = 1, hasCtrlDep = 1 in
- def RET : I<0xC3, RawFrm, (ops), "ret", [(ret)]>;
-let isTerminator = 1, isReturn = 1, isBarrier = 1, hasCtrlDep = 1 in
- def RETI : Ii16<0xC2, RawFrm, (ops i16imm:$amt), "ret $amt", []>;
+let isTerminator = 1, isReturn = 1, isBarrier = 1, hasCtrlDep = 1 in {
+ // FIXME: temporary workaround for return without an incoming flag.
+ def RETVOID : I<0xC3, RawFrm, (ops), "ret", [(ret)]>;
+ let hasInFlag = 1 in {
+ def RET : I<0xC3, RawFrm, (ops), "ret", []>;
+ def RETI : Ii16<0xC2, RawFrm, (ops i16imm:$amt), "ret $amt", []>;
+ }
+}
-def : Pat<(X86retflag 0, FLAG), (RET)>;
-def : Pat<(X86retflag imm:$amt, FLAG), (RETI imm:$amt)>;
+def : Pat<(X86retflag 0), (RET)>;
+def : Pat<(X86retflag imm:$amt), (RETI imm:$amt)>;
// All branches are RawFrm, Void, Branch, and Terminators
let isBranch = 1, isTerminator = 1 in
@@ -2312,17 +2315,14 @@
}
// Random Pseudo Instructions.
-def FpGETRESULT : FpPseudoI<(ops RFP:$dst), SpecialFP, // FPR = ST(0)
- []>;
-def FpSETRESULT : FpPseudoI<(ops RFP:$src), SpecialFP,
- [(set FLAG, (X86fpset RFP:$src))]>,
- Imp<[], [ST0]>; // ST(0) = FPR
+def FpGETRESULT : FpPseudoI<(ops RFP:$dst), SpecialFP, []>; // FPR = ST(0)
+let hasOutFlag = 1 in
+ def FpSETRESULT : FpPseudoI<(ops RFP:$src), SpecialFP,
+ [(X86fpset RFP:$src)]>, Imp<[], [ST0]>; // ST(0) = FPR
-def FpMOV : FpI<(ops RFP:$dst, RFP:$src), SpecialFP,
- []>; // f1 = fmov f2
+def FpMOV : FpI<(ops RFP:$dst, RFP:$src), SpecialFP, []>; // f1 = fmov f2
// Arithmetic
-
// Add, Sub, Mul, Div.
def FpADD : FpI<(ops RFP:$dst, RFP:$src1, RFP:$src2), TwoArgFP,
[(set RFP:$dst, (fadd RFP:$src1, RFP:$src2))]>;
Index: llvm/lib/Target/X86/X86RegisterInfo.cpp
diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.113 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.114
--- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.113 Wed Dec 21 01:47:04 2005
+++ llvm/lib/Target/X86/X86RegisterInfo.cpp Fri Dec 23 16:14:32 2005
@@ -568,6 +568,7 @@
switch (MBBI->getOpcode()) {
case X86::RET:
case X86::RETI:
+ case X86::RETVOID: // FIXME: See X86InstrInfo.td
case X86::TAILJMPd:
case X86::TAILJMPr:
case X86::TAILJMPm: break; // These are ok
More information about the llvm-commits
mailing list