Now that tblgen can handle matching implicit defs of instructions
authorChris Lattner <sabre@nondot.org>
Fri, 19 Mar 2010 00:01:11 +0000 (00:01 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 19 Mar 2010 00:01:11 +0000 (00:01 +0000)
commite3486a4c9a4394d5ffe2ddbd4b39199f6c3c624d
tree94d89fa20f02559abe8dbce9aa4939eb9131d8a4
parent50622ce8cf429067540232ffabc5b53a81f53ca8
Now that tblgen can handle matching implicit defs of instructions
to input patterns, we can fix X86ISD::CMP and X86ISD::BT as taking
two inputs (which have to be the same type) and *returning an i32*.
This is how the SDNodes get made in the graph, but we weren't able
to model it this way due to deficiencies in the pattern language.

Now we can change things like this:

 def UCOM_FpIr80: FpI_<(outs), (ins RFP80:$lhs, RFP80:$rhs), CompareFP,
-                  [(X86cmp RFP80:$lhs, RFP80:$rhs),
-                   (implicit EFLAGS)]>; // CC = ST(0) cmp ST(i)
+                  [(set EFLAGS, (X86cmp RFP80:$lhs, RFP80:$rhs))]>;

and fix terrible crimes like this:

-def : Pat<(parallel (X86cmp GR8:$src1, 0), (implicit EFLAGS)),
+def : Pat<(X86cmp GR8:$src1, 0),
           (TEST8rr GR8:$src1, GR8:$src1)>;

This relies on matching the result of TEST8rr (which is EFLAGS, which is
an implicit def) to the result of X86cmp, an i32.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98903 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86Instr64bit.td
lib/Target/X86/X86InstrFPStack.td
lib/Target/X86/X86InstrInfo.td
lib/Target/X86/X86InstrSSE.td