[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2007-06-25 Thread Dan Gohman


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.184 - 1.185
---
Log message:

Fix loadv2i32 to be loadv4i32, though it isn't actually used anywhere yet.


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

 X86InstrSSE.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.184 
llvm/lib/Target/X86/X86InstrSSE.td:1.185
--- llvm/lib/Target/X86/X86InstrSSE.td:1.184Mon Jun 18 20:48:05 2007
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Jun 25 10:19:03 2007
@@ -85,7 +85,7 @@
 
 def loadv4f32: PatFrag(ops node:$ptr), (v4f32 (load node:$ptr));
 def loadv2f64: PatFrag(ops node:$ptr), (v2f64 (load node:$ptr));
-def loadv2i32: PatFrag(ops node:$ptr), (v2i32 (load node:$ptr));
+def loadv4i32: PatFrag(ops node:$ptr), (v4i32 (load node:$ptr));
 def loadv2i64: PatFrag(ops node:$ptr), (v2i64 (load node:$ptr));
 
 def bc_v4f32 : PatFrag(ops node:$in), (v4f32 (bitconvert node:$in));



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2007-06-25 Thread Dan Gohman


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.185 - 1.186
---
Log message:

Make minor adjustments to whitespace and comments to reduce differences
between SSE1 instructions and their respective SSE2 analogues.


---
Diffs of the changes:  (+28 -25)

 X86InstrSSE.td |   53 -
 1 files changed, 28 insertions(+), 25 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.185 
llvm/lib/Target/X86/X86InstrSSE.td:1.186
--- llvm/lib/Target/X86/X86InstrSSE.td:1.185Mon Jun 25 10:19:03 2007
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Jun 25 10:44:19 2007
@@ -392,7 +392,6 @@
 
 // Alias bitwise logical operations using SSE logical ops on packed FP values.
 let isTwoAddress = 1 in {
-
 let isCommutable = 1 in {
   def FsANDPSrr : PSI0x54, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
   andps {$src2, $dst|$dst, $src2},
@@ -418,9 +417,11 @@
 [(set FR32:$dst, (X86fxor FR32:$src1,
   (X86loadpf32 addr:$src2)))];
 
-def FsANDNPSrr : PSI0x55, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
+def FsANDNPSrr : PSI0x55, MRMSrcReg,
+ (ops FR32:$dst, FR32:$src1, FR32:$src2),
  andnps {$src2, $dst|$dst, $src2}, [];
-def FsANDNPSrm : PSI0x55, MRMSrcMem, (ops FR32:$dst, FR32:$src1, 
f128mem:$src2),
+def FsANDNPSrm : PSI0x55, MRMSrcMem,
+ (ops FR32:$dst, FR32:$src1, f128mem:$src2),
  andnps {$src2, $dst|$dst, $src2}, [];
 }
 
@@ -440,8 +441,8 @@
bit Commutable = 0 {
   // Scalar operation, reg+reg.
   def SSrr : SSIopc, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
-   !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2}),
-   [(set FR32:$dst, (OpNode FR32:$src1, FR32:$src2))] {
+ !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2}),
+ [(set FR32:$dst, (OpNode FR32:$src1, FR32:$src2))] {
 let isCommutable = Commutable;
   }
 
@@ -498,20 +499,22 @@
[(int_x86_sse_storeu_ps addr:$dst, VR128:$src)];
 
 let isTwoAddress = 1 in {
-let AddedComplexity = 20 in {
-def MOVLPSrm : PSI0x12, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
-   movlps {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, 
- (v4f32 (vector_shuffle VR128:$src1,
- (bc_v4f32 (v2f64 (scalar_to_vector (loadf64 
addr:$src2,
- MOVLP_shuffle_mask)))];
-def MOVHPSrm : PSI0x16, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
-   movhps {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, 
- (v4f32 (vector_shuffle VR128:$src1,
- (bc_v4f32 (v2f64 (scalar_to_vector (loadf64 
addr:$src2,
- MOVHP_shuffle_mask)))];
-} // AddedComplexity
+  let AddedComplexity = 20 in {
+def MOVLPSrm : PSI0x12, MRMSrcMem,
+   (ops VR128:$dst, VR128:$src1, f64mem:$src2),
+   movlps {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, 
+ (v4f32 (vector_shuffle VR128:$src1,
+ (bc_v4f32 (v2f64 (scalar_to_vector (loadf64 
addr:$src2,
+ MOVLP_shuffle_mask)))];
+def MOVHPSrm : PSI0x16, MRMSrcMem,
+   (ops VR128:$dst, VR128:$src1, f64mem:$src2),
+   movhps {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, 
+ (v4f32 (vector_shuffle VR128:$src1,
+ (bc_v4f32 (v2f64 (scalar_to_vector (loadf64 
addr:$src2,
+ MOVHP_shuffle_mask)))];
+  } // AddedComplexity
 } // isTwoAddress
 
 def MOVLPSmr : PSI0x13, MRMDestMem, (ops f64mem:$dst, VR128:$src),
@@ -955,7 +958,7 @@
   comisd {$src2, $src1|$src1, $src2},
   [(X86comi (v2f64 VR128:$src1), (load addr:$src2))];
 
-// Aliases of packed instructions for scalar use. These all have names that
+// Aliases of packed SSE2 instructions for scalar use. These all have names 
that
 // start with 'Fs'.
 
 // Alias instructions that map fld0 to pxor for sse.
@@ -963,16 +966,16 @@
  pxor $dst, $dst, [(set FR64:$dst, fp64imm0)],
Requires[HasSSE2], TB, OpSize;
 
-// Alias instructions to do FR64 reg-to-reg copy using movapd. Upper bits are
+// Alias instruction to do FR64 reg-to-reg copy using movapd. Upper bits are
 // disregarded.
 def FsMOVAPDrr : PDI0x28, MRMSrcReg, (ops FR64:$dst, FR64:$src),
-   movapd {$src, $dst|$dst, $src}, [];
+ movapd {$src, $dst|$dst, $src}, [];
 
-// Alias instructions to load FR64 from f128mem using movapd. Upper bits are
+// Alias instruction 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2007-05-17 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.182 - 1.183
---
Log message:

Added missing patterns for UNPCKH* and PUNPCKH*.

---
Diffs of the changes:  (+20 -0)

 X86InstrSSE.td |   20 
 1 files changed, 20 insertions(+)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.182 
llvm/lib/Target/X86/X86InstrSSE.td:1.183
--- llvm/lib/Target/X86/X86InstrSSE.td:1.182Wed May  2 18:11:52 2007
+++ llvm/lib/Target/X86/X86InstrSSE.td  Thu May 17 13:44:37 2007
@@ -170,6 +170,10 @@
   return X86::isUNPCKL_v_undef_Mask(N);
 }];
 
+def UNPCKH_v_undef_shuffle_mask : PatLeaf(build_vector), [{
+  return X86::isUNPCKH_v_undef_Mask(N);
+}];
+
 def PSHUFD_shuffle_mask : PatLeaf(build_vector), [{
   return X86::isPSHUFDMask(N);
 }], SHUFFLE_get_shuf_imm;
@@ -2266,6 +2270,22 @@
   (PUNPCKLDQrr VR128:$src, VR128:$src), Requires[HasSSE1];
 }
 
+// vector_shuffle v1, undef, 2, 2, 3, 3, ...
+let AddedComplexity = 10 in {
+def : Pat(v4f32 (vector_shuffle VR128:$src, (undef),
+  UNPCKH_v_undef_shuffle_mask)),
+  (UNPCKHPSrr VR128:$src, VR128:$src), Requires[HasSSE2];
+def : Pat(v16i8 (vector_shuffle VR128:$src, (undef),
+  UNPCKH_v_undef_shuffle_mask)),
+  (PUNPCKHBWrr VR128:$src, VR128:$src), Requires[HasSSE2];
+def : Pat(v8i16 (vector_shuffle VR128:$src, (undef),
+  UNPCKH_v_undef_shuffle_mask)),
+  (PUNPCKHWDrr VR128:$src, VR128:$src), Requires[HasSSE2];
+def : Pat(v4i32 (vector_shuffle VR128:$src, (undef),
+  UNPCKH_v_undef_shuffle_mask)),
+  (PUNPCKHDQrr VR128:$src, VR128:$src), Requires[HasSSE1];
+}
+
 let AddedComplexity = 15 in {
 // vector_shuffle v1, v2 0, 1, 4, 5 using MOVLHPS
 def : Pat(v4i32 (vector_shuffle VR128:$src1, VR128:$src2,



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2007-04-18 Thread Dan Gohman


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.180 - 1.181
---
Log message:

Fix the spelling of the prefetchnta instruction.


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

 X86InstrSSE.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.180 
llvm/lib/Target/X86/X86InstrSSE.td:1.181
--- llvm/lib/Target/X86/X86InstrSSE.td:1.180Tue Apr 10 17:10:25 2007
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Apr 18 09:09:14 2007
@@ -1645,7 +1645,7 @@
 def PREFETCHT0   : PSI0x18, MRM1m, (ops i8mem:$src), prefetcht0 $src, [];
 def PREFETCHT1   : PSI0x18, MRM2m, (ops i8mem:$src), prefetcht1 $src, [];
 def PREFETCHT2   : PSI0x18, MRM3m, (ops i8mem:$src), prefetcht2 $src, [];
-def PREFETCHTNTA : PSI0x18, MRM0m, (ops i8mem:$src), prefetchtnta $src, [];
+def PREFETCHNTA  : PSI0x18, MRM0m, (ops i8mem:$src), prefetchnta $src, [];
 
 // Non-temporal stores
 def MOVNTPSmr : PSI0x2B, MRMDestMem, (ops i128mem:$dst, VR128:$src),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2007-03-03 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.177 - 1.178
---
Log message:

add missing braces


---
Diffs of the changes:  (+25 -25)

 X86InstrSSE.td |   50 +-
 1 files changed, 25 insertions(+), 25 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.177 
llvm/lib/Target/X86/X86InstrSSE.td:1.178
--- llvm/lib/Target/X86/X86InstrSSE.td:1.177Mon Feb 19 18:39:09 2007
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sun Mar  4 00:13:52 2007
@@ -217,19 +217,19 @@
 
 multiclass SS_IntUnarybits8 o, string OpcodeStr, Intrinsic IntId {
   def r : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src),
-  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src),
+  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
   [(set VR128:$dst, (v4f32 (IntId VR128:$src)))];
   def m : SSIo, MRMSrcMem, (ops VR128:$dst, ssmem:$src),
-  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src),
+  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
   [(set VR128:$dst, (v4f32 (IntId sse_load_f32:$src)))];
 }
 
 multiclass SD_IntUnarybits8 o, string OpcodeStr, Intrinsic IntId {
   def r : SDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src),
-  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src),
+  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
   [(set VR128:$dst, (v2f64 (IntId VR128:$src)))];
   def m : SDIo, MRMSrcMem, (ops VR128:$dst, sdmem:$src),
-  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src),
+  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
   [(set VR128:$dst, (v2f64 (IntId sse_load_f64:$src)))];
 }
 
@@ -337,41 +337,41 @@
 Intrinsic F64Int, bit Commutable = 0 {
   // Scalar operation, reg+reg.
   def SSrr : SSIopc, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
-   !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2),
+   !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2}),
[(set FR32:$dst, (OpNode FR32:$src1, FR32:$src2))] {
 let isCommutable = Commutable;
   }
   def SDrr : SDIopc, MRMSrcReg, (ops FR64:$dst, FR64:$src1, FR64:$src2),
-   !strconcat(OpcodeStr, sd {$src2, $dst|$dst, $src2),
+   !strconcat(OpcodeStr, sd {$src2, $dst|$dst, $src2}),
[(set FR64:$dst, (OpNode FR64:$src1, FR64:$src2))] {
 let isCommutable = Commutable;
   }
   // Scalar operation, reg+mem.
   def SSrm : SSIopc, MRMSrcMem, (ops FR32:$dst, FR32:$src1, f32mem:$src2),
- !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2),
+ !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2}),
  [(set FR32:$dst, (OpNode FR32:$src1, (load addr:$src2)))];
   def SDrm : SDIopc, MRMSrcMem, (ops FR64:$dst, FR64:$src1, f64mem:$src2),
- !strconcat(OpcodeStr, sd {$src2, $dst|$dst, $src2),
+ !strconcat(OpcodeStr, sd {$src2, $dst|$dst, $src2}),
  [(set FR64:$dst, (OpNode FR64:$src1, (load addr:$src2)))];
  
   // Vector intrinsic operation, reg+reg.
   def SSrr_Int : SSIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
- !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2),
+ !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2}),
  [(set VR128:$dst, (F32Int VR128:$src1, VR128:$src2))] {
 let isCommutable = Commutable;
   }
   def SDrr_Int : SDIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
-   !strconcat(OpcodeStr, sd {$src2, $dst|$dst, $src2),
+   !strconcat(OpcodeStr, sd {$src2, $dst|$dst, $src2}),
[(set VR128:$dst, (F64Int VR128:$src1, VR128:$src2))] {
 let isCommutable = Commutable;
   }
   // Vector intrinsic operation, reg+mem.
   def SSrm_Int : SSIopc, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
ssmem:$src2),
- !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2),
+ !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2}),
  [(set VR128:$dst, (F32Int VR128:$src1,
sse_load_f32:$src2))];
   def SDrm_Int : SDIopc, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
sdmem:$src2),
- !strconcat(OpcodeStr, sd {$src2, $dst|$dst, $src2),
+ !strconcat(OpcodeStr, sd {$src2, $dst|$dst, $src2}),
  [(set VR128:$dst, (F64Int VR128:$src1,
sse_load_f64:$src2))];
 }
@@ -937,21 +937,21 @@
 SDNode OpNode, bit Commutable = 0 {
   // Packed operation, reg+reg.
   def PSrr : PSIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-   !strconcat(OpcodeStr, ps {$src2, $dst|$dst, $src2),
+   !strconcat(OpcodeStr, ps {$src2, $dst|$dst, $src2}),

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2007-02-19 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.176 - 1.177
---
Log message:

How the heck did I forget patterns for llvm.x86.sse2.cmp.sd?

---
Diffs of the changes:  (+6 -2)

 X86InstrSSE.td |8 ++--
 1 files changed, 6 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.176 
llvm/lib/Target/X86/X86InstrSSE.td:1.177
--- llvm/lib/Target/X86/X86InstrSSE.td:1.176Fri Jan  5 15:37:56 2007
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Feb 19 18:39:09 2007
@@ -544,10 +544,14 @@
  (load addr:$src), imm:$cc))];
 def Int_CMPSDrr : SDI0xC2, MRMSrcReg, 
   (ops VR128:$dst, VR128:$src1, VR128:$src, SSECC:$cc),
-  cmp${cc}sd {$src, $dst|$dst, $src}, [];
+  cmp${cc}sd {$src, $dst|$dst, $src},
+  [(set VR128:$dst, (int_x86_sse2_cmp_sd VR128:$src1,
+ VR128:$src, imm:$cc))];
 def Int_CMPSDrm : SDI0xC2, MRMSrcMem, 
   (ops VR128:$dst, VR128:$src1, f64mem:$src, SSECC:$cc),
-  cmp${cc}sd {$src, $dst|$dst, $src}, [];
+  cmp${cc}sd {$src, $dst|$dst, $src},
+  [(set VR128:$dst, (int_x86_sse2_cmp_sd VR128:$src1,
+ (load addr:$src), imm:$cc))];
 }
 
 def Int_UCOMISSrr: PSI0x2E, MRMSrcReg, (ops VR128:$src1, VR128:$src2),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-12-14 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.173 - 1.174
---
Log message:

- Rename MOVDSS2DIrr to MOVSS2DIrr for consistency sake.
- Add MOVDI2SSrm and MOVSS2DImr to fold load / store for i32 - f32 bit_convert
  patterns.

---
Diffs of the changes:  (+9 -3)

 X86InstrSSE.td |   12 +---
 1 files changed, 9 insertions(+), 3 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.173 
llvm/lib/Target/X86/X86InstrSSE.td:1.174
--- llvm/lib/Target/X86/X86InstrSSE.td:1.173Tue Dec  5 12:45:06 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Thu Dec 14 13:43:11 2006
@@ -1687,6 +1687,9 @@
   movd {$src, $dst|$dst, $src},
   [(set FR32:$dst, (bitconvert GR32:$src))];
 
+def MOVDI2SSrm  : PDI0x6E, MRMSrcMem, (ops FR32:$dst, i32mem:$src),
+  movd {$src, $dst|$dst, $src},
+  [(set FR32:$dst, (bitconvert (loadi32 addr:$src)))];
 
 // SSE2 instructions with XS prefix
 def MOVQI2PQIrm : I0x7E, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
@@ -1729,9 +1732,12 @@
[(store (i32 (vector_extract (v4i32 VR128:$src),
  (iPTR 0))), addr:$dst)];
 
-def MOVDSS2DIrr  : PDI0x7E, MRMDestReg, (ops GR32:$dst, FR32:$src),
-   movd {$src, $dst|$dst, $src},
-   [(set GR32:$dst, (bitconvert FR32:$src))];
+def MOVSS2DIrr  : PDI0x7E, MRMDestReg, (ops GR32:$dst, FR32:$src),
+  movd {$src, $dst|$dst, $src},
+  [(set GR32:$dst, (bitconvert FR32:$src))];
+def MOVSS2DImr  : PDI0x7E, MRMDestMem, (ops i32mem:$dst, FR32:$src),
+  movd {$src, $dst|$dst, $src},
+  [(store (i32 (bitconvert FR32:$src)), addr:$dst)];
 
 
 // Move to lower bits of a VR128, leaving upper bits alone.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td X86InstrX86-64.td X86RegisterInfo.cpp

2006-11-16 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.171 - 1.172
X86InstrX86-64.td updated: 1.6 - 1.7
X86RegisterInfo.cpp updated: 1.178 - 1.179
---
Log message:

Correct instructions for moving data between GR64 and SSE registers; also 
correct load i64 / store i64 from v2i64.

---
Diffs of the changes:  (+34 -6)

 X86InstrSSE.td  |   11 ++-
 X86InstrX86-64.td   |   26 ++
 X86RegisterInfo.cpp |3 ++-
 3 files changed, 34 insertions(+), 6 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.171 
llvm/lib/Target/X86/X86InstrSSE.td:1.172
--- llvm/lib/Target/X86/X86InstrSSE.td:1.171Fri Nov 10 15:43:37 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Thu Nov 16 17:33:25 2006
@@ -1682,17 +1682,18 @@
   movd {$src, $dst|$dst, $src},
   [(set VR128:$dst,
 (v4i32 (scalar_to_vector (loadi32 addr:$src];
+
 // SSE2 instructions with XS prefix
-def MOVQI2PQIrr : I0x7E, MRMSrcReg, (ops VR128:$dst, VR64:$src),
-movq {$src, $dst|$dst, $src},
-[(set VR128:$dst,
-  (v2i64 (scalar_to_vector VR64:$src)))], XS,
-  Requires[HasSSE2];
 def MOVQI2PQIrm : I0x7E, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
 movq {$src, $dst|$dst, $src},
 [(set VR128:$dst,
   (v2i64 (scalar_to_vector (loadi64 addr:$src], XS,
   Requires[HasSSE2];
+def MOVPQI2QImr : PDI0xD6, MRMDestMem, (ops i64mem:$dst, VR128:$src),
+  movq {$src, $dst|$dst, $src},
+  [(store (i64 (vector_extract (v2i64 VR128:$src),
+(iPTR 0))), addr:$dst)];
+
 // FIXME: may not be able to eliminate this movss with coalescing the src and
 // dest register classes are different. We really want to write this pattern
 // like this:


Index: llvm/lib/Target/X86/X86InstrX86-64.td
diff -u llvm/lib/Target/X86/X86InstrX86-64.td:1.6 
llvm/lib/Target/X86/X86InstrX86-64.td:1.7
--- llvm/lib/Target/X86/X86InstrX86-64.td:1.6   Fri Nov  3 17:48:56 2006
+++ llvm/lib/Target/X86/X86InstrX86-64.td   Thu Nov 16 17:33:25 2006
@@ -59,6 +59,8 @@
   : SSIo, F, ops, asm, pattern, REX_W;
 class RSDIbits8 o, Format F, dag ops, string asm, listdag pattern
   : SDIo, F, ops, asm, pattern, REX_W;
+class RPDIbits8 o, Format F, dag ops, string asm, listdag pattern
+  : PDIo, F, ops, asm, pattern, REX_W;
 
 
//===--===//
 // Pattern fragments...
@@ -1076,3 +1078,27 @@
 def : Pat(store (or (shl (loadi64 addr:$dst), CL:$amt),
  (srl GR64:$src2, (sub 64, CL:$amt))), addr:$dst),
   (SHLD64mrCL addr:$dst, GR64:$src2);
+
+//===--===//
+// X86-64 SSE Instructions
+//===--===//
+
+// Move instructions...
+
+def MOV64toPQIrr : RPDI0x6E, MRMSrcReg, (ops VR128:$dst, GR64:$src),
+movq {$src, $dst|$dst, $src},
+[(set VR128:$dst,
+  (v2i64 (scalar_to_vector GR64:$src)))];
+def MOV64toPQIrm : RPDI0x6E, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
+movq {$src, $dst|$dst, $src},
+[(set VR128:$dst,
+  (v2i64 (scalar_to_vector (loadi64 addr:$src];
+
+def MOVPQIto64rr  : RPDI0x7E, MRMDestReg, (ops GR64:$dst, VR128:$src),
+ movd {$src, $dst|$dst, $src},
+ [(set GR64:$dst, (vector_extract (v2i64 VR128:$src),
+   (iPTR 0)))];
+def MOVPQIto64mr  : RPDI0x7E, MRMDestMem, (ops i64mem:$dst, VR128:$src),
+ movd {$src, $dst|$dst, $src},
+ [(store (i64 (vector_extract (v2i64 VR128:$src),
+   (iPTR 0))), addr:$dst)];


Index: llvm/lib/Target/X86/X86RegisterInfo.cpp
diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.178 
llvm/lib/Target/X86/X86RegisterInfo.cpp:1.179
--- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.178   Wed Nov 15 14:58:11 2006
+++ llvm/lib/Target/X86/X86RegisterInfo.cpp Thu Nov 16 17:33:25 2006
@@ -509,6 +509,7 @@
   { X86::MOVAPDrr,X86::MOVAPDmr },
   { X86::MOVAPSrr,X86::MOVAPSmr },
   { X86::MOVPDI2DIrr, X86::MOVPDI2DImr },
+  { X86::MOVPQIto64rr,X86::MOVPQIto64mr },
   { X86::MOVPS2SSrr,  X86::MOVPS2SSmr },
   { X86::MOVSDrr, X86::MOVSDmr },
   { X86::MOVSSrr, X86::MOVSSmr },
@@ -606,12 +607,12 @@
   { X86::MOV16rr, X86::MOV16rm },
   { X86::MOV32rr, X86::MOV32rm },
   { X86::MOV64rr, X86::MOV64rm },
+  { X86::MOV64toPQIrr,X86::MOV64toPQIrm },
   { X86::MOV8rr,  

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-31 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.167 - 1.168
---
Log message:

Fix ldmxcsr JIT encoding.

---
Diffs of the changes:  (+4 -6)

 X86InstrSSE.td |   10 --
 1 files changed, 4 insertions(+), 6 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.167 
llvm/lib/Target/X86/X86InstrSSE.td:1.168
--- llvm/lib/Target/X86/X86InstrSSE.td:1.167Fri Oct 27 16:08:32 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Nov  1 00:53:52 2006
@@ -1653,12 +1653,10 @@
mfence, [(int_x86_sse2_mfence)], TB, Requires[HasSSE2];
 
 // MXCSR register
-def LDMXCSR : I0xAE, MRM5m, (ops i32mem:$src),
-ldmxcsr $src,
-[(int_x86_sse_ldmxcsr addr:$src)], TB, Requires[HasSSE1];
-def STMXCSR : I0xAE, MRM3m, (ops i32mem:$dst),
-stmxcsr $dst,
-[(int_x86_sse_stmxcsr addr:$dst)], TB, Requires[HasSSE1];
+def LDMXCSR : PSI0xAE, MRM2m, (ops i32mem:$src),
+  ldmxcsr $src, [(int_x86_sse_ldmxcsr addr:$src)];
+def STMXCSR : PSI0xAE, MRM3m, (ops i32mem:$dst),
+  stmxcsr $dst, [(int_x86_sse_stmxcsr addr:$dst)];
 
 // Thread synchronization
 def MONITOR : I0xC8, RawFrm, (ops), monitor,



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-25 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.165 - 1.166
---
Log message:

X86ISD::PEXTRW 3rd operand type is always target pointer type.

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

 X86InstrSSE.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.165 
llvm/lib/Target/X86/X86InstrSSE.td:1.166
--- llvm/lib/Target/X86/X86InstrSSE.td:1.165Wed Oct 11 16:05:24 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Oct 25 16:35:05 2006
@@ -1580,7 +1580,7 @@
 (ops GR32:$dst, VR128:$src1, i32i8imm:$src2),
 pextrw {$src2, $src1, $dst|$dst, $src1, $src2},
 [(set GR32:$dst, (X86pextrw (v8i16 VR128:$src1),
- (i32 imm:$src2)))];
+ (iPTR imm:$src2)))];
 let isTwoAddress = 1 in {
 def PINSRWrri : PDIi80xC4, MRMSrcReg,
  (ops VR128:$dst, VR128:$src1, GR32:$src2, i32i8imm:$src3),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-11 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.164 - 1.165
---
Log message:

ComplexPatterns sse_load_f32 and sse_load_f64 returns in / out chain operands.

---
Diffs of the changes:  (+4 -2)

 X86InstrSSE.td |6 --
 1 files changed, 4 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.164 
llvm/lib/Target/X86/X86InstrSSE.td:1.165
--- llvm/lib/Target/X86/X86InstrSSE.td:1.164Mon Oct  9 16:42:15 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Oct 11 16:05:24 2006
@@ -39,8 +39,10 @@
 // These are 'extloads' from a scalar to the low element of a vector, zeroing
 // the top elements.  These are used for the SSE 'ss' and 'sd' instruction
 // forms.
-def sse_load_f32 : ComplexPatternv4f32, 4, SelectScalarSSELoad, [];
-def sse_load_f64 : ComplexPatternv2f64, 4, SelectScalarSSELoad, [];
+def sse_load_f32 : ComplexPatternv4f32, 4, SelectScalarSSELoad, [],
+  [SDNPHasChain];
+def sse_load_f64 : ComplexPatternv2f64, 4, SelectScalarSSELoad, [],
+  [SDNPHasChain];
 
 def ssmem : Operandv4f32 {
   let PrintMethod = printf32mem;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-09 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.163 - 1.164
---
Log message:

Don't go too crazy with these AddComplexity. Try matching shufps with load
folding first.


---
Diffs of the changes:  (+19 -8)

 X86InstrSSE.td |   27 +++
 1 files changed, 19 insertions(+), 8 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.163 
llvm/lib/Target/X86/X86InstrSSE.td:1.164
--- llvm/lib/Target/X86/X86InstrSSE.td:1.163Mon Oct  9 15:57:25 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Oct  9 16:42:15 2006
@@ -769,7 +769,7 @@
  addr:$dst)];
 
 let isTwoAddress = 1 in {
-let AddedComplexity = 20 in {
+let AddedComplexity = 15 in {
 def MOVLHPSrr : PSI0x16, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
 movlhps {$src2, $dst|$dst, $src2},
 [(set VR128:$dst,
@@ -1753,7 +1753,7 @@
 def MOVLSD2PDrr : SDI0x10, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
FR64:$src2),
   movsd {$src2, $dst|$dst, $src2}, [];
 
-let AddedComplexity = 20 in {
+let AddedComplexity = 15 in {
 def MOVLPSrr : SSI0x10, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   movss {$src2, $dst|$dst, $src2},
[(set VR128:$dst,
@@ -1785,28 +1785,32 @@
   [(set VR128:$dst, (v2f64 (vector_shuffle immAllZerosV,
  (v2f64 (scalar_to_vector (loadf64 
addr:$src))),
 MOVL_shuffle_mask)))];
+}
+let AddedComplexity = 15 in
 // movd / movq to XMM register zero-extends
 def MOVZDI2PDIrr : PDI0x6E, MRMSrcReg, (ops VR128:$dst, GR32:$src),
movd {$src, $dst|$dst, $src},
   [(set VR128:$dst, (v4i32 (vector_shuffle immAllZerosV,
(v4i32 (scalar_to_vector 
GR32:$src)),
 MOVL_shuffle_mask)))];
+let AddedComplexity = 20 in
 def MOVZDI2PDIrm : PDI0x6E, MRMSrcMem, (ops VR128:$dst, i32mem:$src),
movd {$src, $dst|$dst, $src},
   [(set VR128:$dst, (v4i32 (vector_shuffle immAllZerosV,
  (v4i32 (scalar_to_vector (loadi32 
addr:$src))),
 MOVL_shuffle_mask)))];
 // Moving from XMM to XMM but still clear upper 64 bits.
+let AddedComplexity = 15 in
 def MOVZQI2PQIrr : I0x7E, MRMSrcReg, (ops VR128:$dst, VR128:$src),
  movq {$src, $dst|$dst, $src},
  [(set VR128:$dst, (int_x86_sse2_movl_dq VR128:$src))],
XS, Requires[HasSSE2];
+let AddedComplexity = 20 in
 def MOVZQI2PQIrm : I0x7E, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
  movq {$src, $dst|$dst, $src},
[(set VR128:$dst, (int_x86_sse2_movl_dq
   (bitconvert (loadv2i64 addr:$src],
XS, Requires[HasSSE2];
-}
 
 
//===--===//
 // Non-Instruction Patterns
@@ -1884,7 +1888,7 @@
 
 // Move scalar to XMM zero-extended
 // movd to XMM register zero-extends
-let AddedComplexity = 20 in {
+let AddedComplexity = 15 in {
 def : Pat(v8i16 (vector_shuffle immAllZerosV,
   (v8i16 (X86s2vec GR32:$src)), MOVL_shuffle_mask)),
   (MOVZDI2PDIrr GR32:$src), Requires[HasSSE2];
@@ -1950,25 +1954,27 @@
   (PUNPCKLDQrr VR128:$src, VR128:$src), Requires[HasSSE1];
 }
 
-let AddedComplexity = 20 in {
+let AddedComplexity = 15 in
 // vector_shuffle v1, undef 1, 1, 3, 3
 def : Pat(v4i32 (vector_shuffle VR128:$src, (undef),
   MOVSHDUP_shuffle_mask)),
   (MOVSHDUPrr VR128:$src), Requires[HasSSE3];
+let AddedComplexity = 20 in
 def : Pat(v4i32 (vector_shuffle (bc_v4i32 (loadv2i64 addr:$src)), (undef),
   MOVSHDUP_shuffle_mask)),
   (MOVSHDUPrm addr:$src), Requires[HasSSE3];
 
 // vector_shuffle v1, undef 0, 0, 2, 2
+let AddedComplexity = 15 in
 def : Pat(v4i32 (vector_shuffle VR128:$src, (undef),
   MOVSLDUP_shuffle_mask)),
   (MOVSLDUPrr VR128:$src), Requires[HasSSE3];
+let AddedComplexity = 20 in
 def : Pat(v4i32 (vector_shuffle (bc_v4i32 (loadv2i64 addr:$src)), (undef),
   MOVSLDUP_shuffle_mask)),
   (MOVSLDUPrm addr:$src), Requires[HasSSE3];
-}
 
-let AddedComplexity = 20 in {
+let AddedComplexity = 15 in {
 // vector_shuffle v1, v2 0, 1, 4, 5 using MOVLHPS
 def : Pat(v4i32 (vector_shuffle VR128:$src1, VR128:$src2,
   MOVHP_shuffle_mask)),
@@ -1986,7 +1992,9 @@
 def : Pat(v4i32 (vector_shuffle VR128:$src1, (undef),
   UNPCKH_shuffle_mask)),
   (MOVHLPSrr VR128:$src1, VR128:$src1);
+}
 
+  let AddedComplexity = 20 in {
 // vector_shuffle v1, (load v2) 4, 5, 2, 3 using MOVLPS
 // vector_shuffle 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.141 - 1.142
---
Log message:

remove some unneeded type info


---
Diffs of the changes:  (+28 -30)

 X86InstrSSE.td |   58 +++--
 1 files changed, 28 insertions(+), 30 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.141 
llvm/lib/Target/X86/X86InstrSSE.td:1.142
--- llvm/lib/Target/X86/X86InstrSSE.td:1.141Sat Oct  7 00:50:25 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 01:17:43 2006
@@ -231,7 +231,7 @@
 class PS_Intmbits8 o, string OpcodeStr, Intrinsic IntId
   : PSIo, MRMSrcMem, (ops VR128:$dst, f32mem:$src),
 !strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
-[(set VR128:$dst, (IntId (loadv4f32 addr:$src)))];
+[(set VR128:$dst, (IntId (load addr:$src)))];
 class PD_Intrbits8 o, string OpcodeStr, Intrinsic IntId
   : PDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src),
 !strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
@@ -239,7 +239,7 @@
 class PD_Intmbits8 o, string OpcodeStr, Intrinsic IntId
   : PDIo, MRMSrcMem, (ops VR128:$dst, f64mem:$src),
 !strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
-[(set VR128:$dst, (IntId (loadv2f64 addr:$src)))];
+[(set VR128:$dst, (IntId (load addr:$src)))];
 
 class PS_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
   : PSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
@@ -248,7 +248,7 @@
 class PS_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
   : PSIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f32mem:$src2),
 !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
-[(set VR128:$dst, (IntId VR128:$src1, (loadv4f32 addr:$src2)))];
+[(set VR128:$dst, (IntId VR128:$src1, (load addr:$src2)))];
 class PD_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
   : PDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
 !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
@@ -256,22 +256,21 @@
 class PD_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
   : PDIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f64mem:$src2),
 !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
-[(set VR128:$dst, (IntId VR128:$src1, (loadv2f64 addr:$src2)))];
+[(set VR128:$dst, (IntId VR128:$src1, (load addr:$src2)))];
 
 class S3D_Intrrbits8 o, string asm, Intrinsic IntId
   : S3DIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
  [(set VR128:$dst, (v4f32 (IntId VR128:$src1, VR128:$src2)))];
 class S3D_Intrmbits8 o, string asm, Intrinsic IntId
   : S3DIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2), asm,
- [(set VR128:$dst, (v4f32 (IntId VR128:$src1,
-   (loadv4f32 addr:$src2];
+ [(set VR128:$dst, (v4f32 (IntId VR128:$src1, (load addr:$src2];
 class S3_Intrrbits8 o, string asm, Intrinsic IntId
   : S3Io, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
  [(set VR128:$dst, (v2f64 (IntId VR128:$src1, VR128:$src2)))];
 class S3_Intrmbits8 o, string asm, Intrinsic IntId
   : S3Io, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2), asm,
  [(set VR128:$dst, (v2f64 (IntId VR128:$src1,
-   (loadv2f64 addr:$src2];
+   (load addr:$src2];
 
 // Some 'special' instructions
 def IMPLICIT_DEF_FR32 : I0, Pseudo, (ops FR32:$dst),
@@ -490,14 +489,14 @@
 def Int_CVTSS2SIrm: SSI0x2D, MRMSrcMem, (ops GR32:$dst, f32mem:$src),
 cvtss2si {$src, $dst|$dst, $src},
 [(set GR32:$dst, (int_x86_sse_cvtss2si
-  (loadv4f32 addr:$src)))];
+  (load addr:$src)))];
 def Int_CVTSD2SIrr: SDI0x2D, MRMSrcReg, (ops GR32:$dst, VR128:$src),
 cvtsd2si {$src, $dst|$dst, $src},
 [(set GR32:$dst, (int_x86_sse2_cvtsd2si VR128:$src))];
 def Int_CVTSD2SIrm: SDI0x2D, MRMSrcMem, (ops GR32:$dst, f128mem:$src),
 cvtsd2si {$src, $dst|$dst, $src},
 [(set GR32:$dst, (int_x86_sse2_cvtsd2si
-  (loadv2f64 addr:$src)))];
+  (load addr:$src)))];
 
 // Aliases for intrinsics
 def Int_CVTTSS2SIrr: SSI0x2C, MRMSrcReg, (ops GR32:$dst, VR128:$src),
@@ -505,15 +504,14 @@
 [(set GR32:$dst, (int_x86_sse_cvttss2si VR128:$src))];
 def Int_CVTTSS2SIrm: SSI0x2C, MRMSrcMem, (ops GR32:$dst, f32mem:$src),
 cvttss2si {$src, $dst|$dst, $src},
-[(set GR32:$dst, (int_x86_sse_cvttss2si
- (loadv4f32 addr:$src)))];
+[(set GR32:$dst, (int_x86_sse_cvttss2si(load 
addr:$src)))];
 def Int_CVTTSD2SIrr: SDI0x2C, MRMSrcReg, (ops GR32:$dst, VR128:$src),
  cvttsd2si 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.142 - 1.143
---
Log message:

remove unneeded definitions and type info


---
Diffs of the changes:  (+0 -3)

 X86InstrSSE.td |3 ---
 1 files changed, 3 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.142 
llvm/lib/Target/X86/X86InstrSSE.td:1.143
--- llvm/lib/Target/X86/X86InstrSSE.td:1.142Sat Oct  7 01:17:43 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 01:19:41 2006
@@ -45,9 +45,6 @@
 
 def loadv4f32: PatFrag(ops node:$ptr), (v4f32 (load node:$ptr));
 def loadv2f64: PatFrag(ops node:$ptr), (v2f64 (load node:$ptr));
-def loadv16i8: PatFrag(ops node:$ptr), (v16i8 (load node:$ptr));
-def loadv8i16: PatFrag(ops node:$ptr), (v8i16 (load node:$ptr));
-def loadv4i32: PatFrag(ops node:$ptr), (v4i32 (load node:$ptr));
 def loadv2i64: PatFrag(ops node:$ptr), (v2i64 (load node:$ptr));
 
 def bc_v4f32 : PatFrag(ops node:$in), (v4f32 (bitconvert node:$in));



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.143 - 1.144
---
Log message:

remove more unneeded type info


---
Diffs of the changes:  (+51 -51)

 X86InstrSSE.td |  102 -
 1 files changed, 51 insertions(+), 51 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.143 
llvm/lib/Target/X86/X86InstrSSE.td:1.144
--- llvm/lib/Target/X86/X86InstrSSE.td:1.143Sat Oct  7 01:19:41 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 01:27:03 2006
@@ -836,7 +836,7 @@
 def Int_CVTDQ2PSrm : I0x5B, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
cvtdq2ps {$src, $dst|$dst, $src},
[(set VR128:$dst, (int_x86_sse2_cvtdq2ps
-  (bc_v4i32 (loadv2i64 addr:$src],
+ (bitconvert (loadv2i64 
addr:$src],
  TB, Requires[HasSSE2];
 
 // SSE2 instructions with XS prefix
@@ -847,7 +847,7 @@
 def Int_CVTDQ2PDrm : I0xE6, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
cvtdq2pd {$src, $dst|$dst, $src},
[(set VR128:$dst, (int_x86_sse2_cvtdq2pd
-  (bc_v4i32 (loadv2i64 addr:$src],
+  (bitconvert (loadv2i64 
addr:$src],
  XS, Requires[HasSSE2];
 
 def Int_CVTPS2DQrr : PDI0x5B, MRMSrcReg, (ops VR128:$dst, VR128:$src),
@@ -1061,7 +1061,7 @@
 andpd {$src2, $dst|$dst, $src2},
   [(set VR128:$dst,
 (and (bc_v2i64 (v2f64 VR128:$src1)),
- (bc_v2i64 (v2f64 VR128:$src2];
+ (bc_v2i64 (v2f64 VR128:$src2];
 def ORPSrr  : PSI0x56, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   orps {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v2i64 (or VR128:$src1, VR128:$src2)))];
@@ -1069,7 +1069,7 @@
   orpd {$src2, $dst|$dst, $src2},
   [(set VR128:$dst,
 (or (bc_v2i64 (v2f64 VR128:$src1)),
- (bc_v2i64 (v2f64 VR128:$src2];
+(bc_v2i64 (v2f64 VR128:$src2];
 def XORPSrr : PSI0x57, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   xorps {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v2i64 (xor VR128:$src1, VR128:$src2)))];
@@ -1077,7 +1077,7 @@
   xorpd {$src2, $dst|$dst, $src2},
   [(set VR128:$dst,
 (xor (bc_v2i64 (v2f64 VR128:$src1)),
- (bc_v2i64 (v2f64 VR128:$src2];
+ (bc_v2i64 (v2f64 VR128:$src2];
 }
 def ANDPSrm : PSI0x54, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
   andps {$src2, $dst|$dst, $src2},
@@ -1120,7 +1120,7 @@
   andnpd {$src2, $dst|$dst, $src2},
 [(set VR128:$dst,
   (and (vnot (bc_v2i64 (v2f64 VR128:$src1))),
-   (bc_v2i64 (v2f64 VR128:$src2];
+   (bc_v2i64 (v2f64 VR128:$src2];
 def ANDNPDrm : PDI0x55, MRMSrcMem, (ops VR128:$dst, 
VR128:$src1,f128mem:$src2),
   andnpd {$src2, $dst|$dst, $src2},
   [(set VR128:$dst,
@@ -1332,19 +1332,19 @@
 def PADDSBrm : PDI0xEC, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
paddsb {$src2, $dst|$dst, $src2},
[(set VR128:$dst, (int_x86_sse2_padds_b VR128:$src1,
-  (bc_v16i8 (loadv2i64 addr:$src2];
+  (bitconvert (loadv2i64 addr:$src2];
 def PADDSWrm : PDI0xED, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
paddsw {$src2, $dst|$dst, $src2},
[(set VR128:$dst, (int_x86_sse2_padds_w VR128:$src1,
-  (bc_v8i16 (loadv2i64 addr:$src2];
+  (bitconvert (loadv2i64 addr:$src2];
 def PADDUSBrm : PDI0xDC, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
 paddusb {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_paddus_b VR128:$src1,
-   (bc_v16i8 (loadv2i64 addr:$src2];
+   (bitconvert (loadv2i64 addr:$src2];
 def PADDUSWrm : PDI0xDD, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
paddusw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_paddus_w VR128:$src1,
-   (bc_v8i16 (loadv2i64 addr:$src2];
+   (bitconvert (loadv2i64 addr:$src2];
 
 
 def PSUBBrr : PDI0xF8, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
@@ 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.144 - 1.145
---
Log message:

simplify horizontal op definitions


---
Diffs of the changes:  (+21 -26)

 X86InstrSSE.td |   47 +--
 1 files changed, 21 insertions(+), 26 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.144 
llvm/lib/Target/X86/X86InstrSSE.td:1.145
--- llvm/lib/Target/X86/X86InstrSSE.td:1.144Sat Oct  7 01:27:03 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 01:31:41 2006
@@ -255,19 +255,22 @@
 !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
 [(set VR128:$dst, (IntId VR128:$src1, (load addr:$src2)))];
 
-class S3D_Intrrbits8 o, string asm, Intrinsic IntId
-  : S3DIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+class S3D_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
+  : S3DIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+ !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
  [(set VR128:$dst, (v4f32 (IntId VR128:$src1, VR128:$src2)))];
-class S3D_Intrmbits8 o, string asm, Intrinsic IntId
-  : S3DIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2), asm,
+class S3D_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
+  : S3DIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2),
+ !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
  [(set VR128:$dst, (v4f32 (IntId VR128:$src1, (load addr:$src2];
-class S3_Intrrbits8 o, string asm, Intrinsic IntId
-  : S3Io, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+class S3_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
+  : S3Io, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+ !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
  [(set VR128:$dst, (v2f64 (IntId VR128:$src1, VR128:$src2)))];
-class S3_Intrmbits8 o, string asm, Intrinsic IntId
-  : S3Io, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2), asm,
- [(set VR128:$dst, (v2f64 (IntId VR128:$src1,
-   (load addr:$src2];
+class S3_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
+  : S3Io, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2),
+ !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
+ [(set VR128:$dst, (v2f64 (IntId VR128:$src1, (load addr:$src2];
 
 // Some 'special' instructions
 def IMPLICIT_DEF_FR32 : I0, Pseudo, (ops FR32:$dst),
@@ -1234,22 +1237,14 @@
 
 // Horizontal ops
 let isTwoAddress = 1 in {
-def HADDPSrr : S3D_Intrr0x7C, haddps {$src2, $dst|$dst, $src2},
-  int_x86_sse3_hadd_ps;
-def HADDPSrm : S3D_Intrm0x7C, haddps {$src2, $dst|$dst, $src2},
-  int_x86_sse3_hadd_ps;
-def HADDPDrr : S3_Intrr0x7C, haddpd {$src2, $dst|$dst, $src2},
-  int_x86_sse3_hadd_pd;
-def HADDPDrm : S3_Intrm0x7C, haddpd {$src2, $dst|$dst, $src2},
-  int_x86_sse3_hadd_pd;
-def HSUBPSrr : S3D_Intrr0x7D, hsubps {$src2, $dst|$dst, $src2},
-  int_x86_sse3_hsub_ps;
-def HSUBPSrm : S3D_Intrm0x7D, hsubps {$src2, $dst|$dst, $src2},
-  int_x86_sse3_hsub_ps;
-def HSUBPDrr : S3_Intrr0x7D, hsubpd {$src2, $dst|$dst, $src2},
-  int_x86_sse3_hsub_pd;
-def HSUBPDrm : S3_Intrm0x7D, hsubpd {$src2, $dst|$dst, $src2},
-  int_x86_sse3_hsub_pd;
+def HADDPSrr : S3D_Intrr0x7C, haddps, int_x86_sse3_hadd_ps;
+def HADDPSrm : S3D_Intrm0x7C, haddps, int_x86_sse3_hadd_ps;
+def HADDPDrr : S3_Intrr 0x7C, haddpd, int_x86_sse3_hadd_pd;
+def HADDPDrm : S3_Intrm 0x7C, haddpd, int_x86_sse3_hadd_pd;
+def HSUBPSrr : S3D_Intrr0x7D, hsubps, int_x86_sse3_hsub_ps;
+def HSUBPSrm : S3D_Intrm0x7D, hsubps, int_x86_sse3_hsub_ps;
+def HSUBPDrr : S3_Intrr 0x7D, hsubpd, int_x86_sse3_hsub_pd;
+def HSUBPDrm : S3_Intrm 0x7D, hsubpd, int_x86_sse3_hsub_pd;
 }
 
 
//===--===//



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.145 - 1.146
---
Log message:

move class defns close to uses to make it easier to read


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

 X86InstrSSE.td |   35 ++-
 1 files changed, 18 insertions(+), 17 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.145 
llvm/lib/Target/X86/X86InstrSSE.td:1.146
--- llvm/lib/Target/X86/X86InstrSSE.td:1.145Sat Oct  7 01:31:41 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 01:33:36 2006
@@ -255,23 +255,6 @@
 !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
 [(set VR128:$dst, (IntId VR128:$src1, (load addr:$src2)))];
 
-class S3D_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
-  : S3DIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
- !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
- [(set VR128:$dst, (v4f32 (IntId VR128:$src1, VR128:$src2)))];
-class S3D_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
-  : S3DIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2),
- !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
- [(set VR128:$dst, (v4f32 (IntId VR128:$src1, (load addr:$src2];
-class S3_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
-  : S3Io, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
- !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
- [(set VR128:$dst, (v2f64 (IntId VR128:$src1, VR128:$src2)))];
-class S3_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
-  : S3Io, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2),
- !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
- [(set VR128:$dst, (v2f64 (IntId VR128:$src1, (load addr:$src2];
-
 // Some 'special' instructions
 def IMPLICIT_DEF_FR32 : I0, Pseudo, (ops FR32:$dst),
  #IMPLICIT_DEF $dst,
@@ -1236,6 +1219,24 @@
 }
 
 // Horizontal ops
+
+class S3D_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
+  : S3DIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+ !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
+ [(set VR128:$dst, (v4f32 (IntId VR128:$src1, VR128:$src2)))];
+class S3D_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
+  : S3DIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2),
+ !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
+ [(set VR128:$dst, (v4f32 (IntId VR128:$src1, (load addr:$src2];
+class S3_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
+  : S3Io, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+ !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
+ [(set VR128:$dst, (v2f64 (IntId VR128:$src1, VR128:$src2)))];
+class S3_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
+  : S3Io, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2),
+ !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
+ [(set VR128:$dst, (v2f64 (IntId VR128:$src1, (load addr:$src2];
+
 let isTwoAddress = 1 in {
 def HADDPSrr : S3D_Intrr0x7C, haddps, int_x86_sse3_hadd_ps;
 def HADDPSrm : S3D_Intrm0x7C, haddps, int_x86_sse3_hadd_ps;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.146 - 1.147
---
Log message:

Use a multiclass to simplify 'SSE2 Integer comparison'


---
Diffs of the changes:  (+19 -61)

 X86InstrSSE.td |   80 +
 1 files changed, 19 insertions(+), 61 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.146 
llvm/lib/Target/X86/X86InstrSSE.td:1.147
--- llvm/lib/Target/X86/X86InstrSSE.td:1.146Sat Oct  7 01:33:36 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 01:47:08 2006
@@ -1671,69 +1671,27 @@
(load addr:$src2];
 }
 
+
+let isTwoAddress = 1 in {
+multiclass PDI_binop_rmbits8 opc, string OpcodeStr, Intrinsic IntId {
+  def rr : PDIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (IntId VR128:$src1, VR128:$src2))];
+  def rm : PDIopc, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+   !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (IntId VR128:$src1,
+(bitconvert (loadv2i64 
addr:$src2];
+}
+}
+
 // SSE2 Integer comparison
 let isTwoAddress = 1 in {
-def PCMPEQBrr : PDI0x74, MRMSrcReg, 
-(ops VR128:$dst, VR128:$src1, VR128:$src2),
-pcmpeqb {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpeq_b VR128:$src1,
-   VR128:$src2))];
-def PCMPEQBrm : PDI0x74, MRMSrcMem, 
-(ops VR128:$dst, VR128:$src1, i128mem:$src2),
-pcmpeqb {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpeq_b VR128:$src1,
-   (bitconvert (loadv2i64 addr:$src2];
-def PCMPEQWrr : PDI0x75, MRMSrcReg, 
-(ops VR128:$dst, VR128:$src1, VR128:$src2),
-pcmpeqw {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpeq_w VR128:$src1,
-   VR128:$src2))];
-def PCMPEQWrm : PDI0x75, MRMSrcMem, 
-(ops VR128:$dst, VR128:$src1, i128mem:$src2),
-pcmpeqw {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpeq_w VR128:$src1,
-   (bitconvert (loadv2i64 addr:$src2];
-def PCMPEQDrr : PDI0x76, MRMSrcReg, 
-(ops VR128:$dst, VR128:$src1, VR128:$src2),
-pcmpeqd {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpeq_d VR128:$src1,
-   VR128:$src2))];
-def PCMPEQDrm : PDI0x76, MRMSrcMem, 
-(ops VR128:$dst, VR128:$src1, i128mem:$src2),
-pcmpeqd {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpeq_d VR128:$src1,
-   (bitconvert (loadv2i64 addr:$src2];
-
-def PCMPGTBrr : PDI0x64, MRMSrcReg, 
-(ops VR128:$dst, VR128:$src1, VR128:$src2),
-pcmpgtb {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpgt_b VR128:$src1,
-   VR128:$src2))];
-def PCMPGTBrm : PDI0x64, MRMSrcMem, 
-(ops VR128:$dst, VR128:$src1, i128mem:$src2),
-pcmpgtb {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpgt_b VR128:$src1,
-   (bitconvert (loadv2i64 addr:$src2];
-def PCMPGTWrr : PDI0x65, MRMSrcReg, 
-(ops VR128:$dst, VR128:$src1, VR128:$src2),
-pcmpgtw {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpgt_w VR128:$src1,
-   VR128:$src2))];
-def PCMPGTWrm : PDI0x65, MRMSrcMem, 
-(ops VR128:$dst, VR128:$src1, i128mem:$src2),
-pcmpgtw {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpgt_w VR128:$src1,
-   (bitconvert (loadv2i64 addr:$src2];
-def PCMPGTDrr : PDI0x66, MRMSrcReg, 
-(ops VR128:$dst, VR128:$src1, VR128:$src2),
-pcmpgtd {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpgt_d VR128:$src1,
-   VR128:$src2))];
-def PCMPGTDrm : PDI0x66, MRMSrcMem, 
-(ops VR128:$dst, VR128:$src1, i128mem:$src2),
-pcmpgtd {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_pcmpgt_d VR128:$src1,
-   (bitconvert (loadv2i64 addr:$src2];
+defm 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.147 - 1.148
---
Log message:

simplify pack and shift intrinsics with multiclasses


---
Diffs of the changes:  (+46 -137)

 X86InstrSSE.td |  183 ++---
 1 files changed, 46 insertions(+), 137 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.147 
llvm/lib/Target/X86/X86InstrSSE.td:1.148
--- llvm/lib/Target/X86/X86InstrSSE.td:1.147Sat Oct  7 01:47:08 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 02:06:17 2006
@@ -1516,6 +1516,35 @@
   (bitconvert (loadv2i64 addr:$src2];
 
 
+let isTwoAddress = 1 in {
+multiclass PDI_binop_rmbits8 opc, string OpcodeStr, Intrinsic IntId {
+  def rr : PDIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (IntId VR128:$src1, VR128:$src2))];
+  def rm : PDIopc, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+   !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (IntId VR128:$src1,
+(bitconvert (loadv2i64 
addr:$src2];
+}
+}
+
+let isTwoAddress = 1 in {
+multiclass PDI_binop_rmibits8 opc, bits8 opc2, Format ImmForm,
+ string OpcodeStr, Intrinsic IntId {
+  def rr : PDIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (IntId VR128:$src1, VR128:$src2))];
+  def rm : PDIopc, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+   !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (IntId VR128:$src1,
+(bitconvert (loadv2i64 
addr:$src2];
+  def ri : PDIi8opc2, ImmForm, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
+   !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (IntId VR128:$src1,
+(scalar_to_vector (i32 imm:$src2];
+}
+}
+
 let isCommutable = 1 in {
 def PSADBWrr : PDI0xE0, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
psadbw {$src2, $dst|$dst, $src2},
@@ -1528,109 +1557,25 @@
   (bitconvert (loadv2i64 addr:$src2];
 }
 
+
+defm PSLLW : PDI_binop_rmi0xF1, 0x71, MRM6r, psllw, int_x86_sse2_psll_w;
+defm PSLLD : PDI_binop_rmi0xF2, 0x72, MRM6r, pslld, int_x86_sse2_psll_d;
+defm PSLLQ : PDI_binop_rmi0xF3, 0x73, MRM6r, psllq, int_x86_sse2_psll_q;
+
+defm PSRLW : PDI_binop_rmi0xD1, 0x71, MRM2r, psrlw, int_x86_sse2_psrl_w;
+defm PSRLD : PDI_binop_rmi0xD2, 0x72, MRM2r, psrld, int_x86_sse2_psrl_d;
+defm PSRLQ : PDI_binop_rmi0xD3, 0x73, MRM2r, psrlq, int_x86_sse2_psrl_q;
+
+defm PSRAW : PDI_binop_rmi0xE1, 0x71, MRM4r, psraw, int_x86_sse2_psra_w;
+defm PSRAD : PDI_binop_rmi0xE2, 0x72, MRM4r, psrad, int_x86_sse2_psra_d;
+// PSRAQ doesn't exist in SSE[1-3].
+
 let isTwoAddress = 1 in {
-def PSLLWrr : PDI0xF1, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  psllw {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
- VR128:$src2))];
-def PSLLWrm : PDI0xF1, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-  psllw {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
- (bitconvert (loadv2i64 addr:$src2];
-def PSLLWri : PDIi80x71, MRM6r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
-psllw {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
-   (scalar_to_vector (i32 imm:$src2];
-def PSLLDrr : PDI0xF2, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  pslld {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
- VR128:$src2))];
-def PSLLDrm : PDI0xF2, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-  pslld {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
- (bitconvert (loadv2i64 addr:$src2];
-def PSLLDri : PDIi80x72, MRM6r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
-pslld {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
-   (scalar_to_vector (i32 imm:$src2];
-def PSLLQrr : PDI0xF3, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  psllq {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.148 - 1.149
---
Log message:

handle pmin/pmax with multiclasses


---
Diffs of the changes:  (+11 -51)

 X86InstrSSE.td |   62 ++---
 1 files changed, 11 insertions(+), 51 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.148 
llvm/lib/Target/X86/X86InstrSSE.td:1.149
--- llvm/lib/Target/X86/X86InstrSSE.td:1.148Sat Oct  7 02:06:17 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 02:49:33 2006
@@ -1476,51 +1476,17 @@
pavgw {$src2, $dst|$dst, $src2},
[(set VR128:$dst, (int_x86_sse2_pavg_w VR128:$src1,
   (bitconvert (loadv2i64 addr:$src2];
-
-let isCommutable = 1 in {
-def PMAXUBrr : PDI0xDE, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-   pmaxub {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, (int_x86_sse2_pmaxu_b VR128:$src1,
-  VR128:$src2))];
-def PMAXSWrr : PDI0xEE, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-   pmaxsw {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, (int_x86_sse2_pmaxs_w VR128:$src1,
-  VR128:$src2))];
-}
-def PMAXUBrm : PDI0xDE, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-   pmaxub {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, (int_x86_sse2_pmaxu_b VR128:$src1,
-  (bitconvert (loadv2i64 addr:$src2];
-def PMAXSWrm : PDI0xEE, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-   pmaxsw {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, (int_x86_sse2_pmaxs_w VR128:$src1,
-  (bitconvert (loadv2i64 addr:$src2];
-
-let isCommutable = 1 in {
-def PMINUBrr : PDI0xDA, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-   pminub {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, (int_x86_sse2_pminu_b VR128:$src1,
-  VR128:$src2))];
-def PMINSWrr : PDI0xEA, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-   pminsw {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, (int_x86_sse2_pmins_w VR128:$src1,
-  VR128:$src2))];
-}
-def PMINUBrm : PDI0xDA, MRMSrcMem, (ops VR128:$dst, 
VR128:$src1,i128mem:$src2),
-   pminub {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, (int_x86_sse2_pminu_b VR128:$src1,
-  (bitconvert (loadv2i64 addr:$src2];
-def PMINSWrm : PDI0xEA, MRMSrcMem, (ops VR128:$dst, 
VR128:$src1,i128mem:$src2),
-   pminsw {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, (int_x86_sse2_pmins_w VR128:$src1,
-  (bitconvert (loadv2i64 addr:$src2];
+}
 
 
 let isTwoAddress = 1 in {
-multiclass PDI_binop_rmbits8 opc, string OpcodeStr, Intrinsic IntId {
+multiclass PDI_binop_rmbits8 opc, string OpcodeStr, Intrinsic IntId,
+bit Commutable = 0 {
   def rr : PDIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
-   [(set VR128:$dst, (IntId VR128:$src1, VR128:$src2))];
+   [(set VR128:$dst, (IntId VR128:$src1, VR128:$src2))] {
+let isCommutable = Commutable;
+  }
   def rm : PDIopc, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
[(set VR128:$dst, (IntId VR128:$src1,
@@ -1545,17 +1511,11 @@
 }
 }
 
-let isCommutable = 1 in {
-def PSADBWrr : PDI0xE0, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-   psadbw {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, (int_x86_sse2_psad_bw VR128:$src1,
-  VR128:$src2))];
-}
-def PSADBWrm : PDI0xE0, MRMSrcMem, (ops VR128:$dst, 
VR128:$src1,i128mem:$src2),
-   psadbw {$src2, $dst|$dst, $src2},
-   [(set VR128:$dst, (int_x86_sse2_psad_bw VR128:$src1,
-  (bitconvert (loadv2i64 addr:$src2];
-}
+defm PMINUB : PDI_binop_rm0xDA, pminub, int_x86_sse2_pminu_b, 1;
+defm PMINSW : PDI_binop_rm0xEA, pminsw, int_x86_sse2_pmins_w, 1;
+defm PMAXUB : PDI_binop_rm0xDE, pmaxub, int_x86_sse2_pmaxu_b, 1;
+defm PMAXSW : PDI_binop_rm0xEE, pmaxsw, int_x86_sse2_pmaxs_w, 1;
+defm PSADBW : PDI_binop_rm0xE0, psadbw, int_x86_sse2_psad_bw, 1;
 
 
 defm PSLLW : PDI_binop_rmi0xF1, 0x71, MRM6r, psllw, int_x86_sse2_psll_w;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.152 - 1.153
---
Log message:

rename:
  PDI_binop_rm - PDI_binop_rm_int
  PDI_binop_rmi - PDI_binop_rmi_int

to make it clear that these are for use with intrinsics.



---
Diffs of the changes:  (+40 -40)

 X86InstrSSE.td |   80 -
 1 files changed, 40 insertions(+), 40 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.152 
llvm/lib/Target/X86/X86InstrSSE.td:1.153
--- llvm/lib/Target/X86/X86InstrSSE.td:1.152Sat Oct  7 13:48:46 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 14:02:31 2006
@@ -1275,8 +1275,8 @@
 
 
 let isTwoAddress = 1 in {
-multiclass PDI_binop_rmbits8 opc, string OpcodeStr, Intrinsic IntId,
-bit Commutable = 0 {
+multiclass PDI_binop_rm_intbits8 opc, string OpcodeStr, Intrinsic IntId,
+bit Commutable = 0 {
   def rr : PDIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
[(set VR128:$dst, (IntId VR128:$src1, VR128:$src2))] {
@@ -1290,8 +1290,8 @@
 }
 
 let isTwoAddress = 1 in {
-multiclass PDI_binop_rmibits8 opc, bits8 opc2, Format ImmForm,
- string OpcodeStr, Intrinsic IntId {
+multiclass PDI_binop_rmi_intbits8 opc, bits8 opc2, Format ImmForm,
+ string OpcodeStr, Intrinsic IntId {
   def rr : PDIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
[(set VR128:$dst, (IntId VR128:$src1, VR128:$src2))];
@@ -1341,10 +1341,10 @@
  (loadv2i64 addr:$src2)))];
 
 
-defm PADDSB  : PDI_binop_rm0xEC, paddsb , int_x86_sse2_padds_b, 1;
-defm PADDSW  : PDI_binop_rm0xED, paddsw , int_x86_sse2_padds_w, 1;
-defm PADDUSB : PDI_binop_rm0xDC, paddusb, int_x86_sse2_paddus_b, 1;
-defm PADDUSW : PDI_binop_rm0xDD, paddusw, int_x86_sse2_paddus_w, 1;
+defm PADDSB  : PDI_binop_rm_int0xEC, paddsb , int_x86_sse2_padds_b, 1;
+defm PADDSW  : PDI_binop_rm_int0xED, paddsw , int_x86_sse2_padds_w, 1;
+defm PADDUSB : PDI_binop_rm_int0xDC, paddusb, int_x86_sse2_paddus_b, 1;
+defm PADDUSW : PDI_binop_rm_int0xDD, paddusw, int_x86_sse2_paddus_w, 1;
 
 def PSUBBrr : PDI0xF8, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   psubb {$src2, $dst|$dst, $src2},
@@ -1376,10 +1376,10 @@
   [(set VR128:$dst, (sub VR128:$src1,
  (loadv2i64 addr:$src2)))];
 
-defm PSUBSB  : PDI_binop_rm0xE8, psubsb , int_x86_sse2_psubs_b;
-defm PSUBSW  : PDI_binop_rm0xE9, psubsw , int_x86_sse2_psubs_w;
-defm PSUBUSB : PDI_binop_rm0xD8, psubusb, int_x86_sse2_psubus_b;
-defm PSUBUSW : PDI_binop_rm0xD9, psubusw, int_x86_sse2_psubus_w;
+defm PSUBSB  : PDI_binop_rm_int0xE8, psubsb , int_x86_sse2_psubs_b;
+defm PSUBSW  : PDI_binop_rm_int0xE9, psubsw , int_x86_sse2_psubs_w;
+defm PSUBUSB : PDI_binop_rm_int0xD8, psubusb, int_x86_sse2_psubus_b;
+defm PSUBUSW : PDI_binop_rm_int0xD9, psubusw, int_x86_sse2_psubus_w;
 
 
 let isCommutable = 1 in {
@@ -1394,33 +1394,33 @@
(bitconvert (loadv2i64 
addr:$src2)];
 }
 
-defm PMULHUW : PDI_binop_rm0xE4, pmulhuw, int_x86_sse2_pmulhu_w, 1;
-defm PMULHW  : PDI_binop_rm0xE5, pmulhw , int_x86_sse2_pmulh_w , 1;
-defm PMULUDQ : PDI_binop_rm0xF4, pmuludq, int_x86_sse2_pmulu_dq, 1;
+defm PMULHUW : PDI_binop_rm_int0xE4, pmulhuw, int_x86_sse2_pmulhu_w, 1;
+defm PMULHW  : PDI_binop_rm_int0xE5, pmulhw , int_x86_sse2_pmulh_w , 1;
+defm PMULUDQ : PDI_binop_rm_int0xF4, pmuludq, int_x86_sse2_pmulu_dq, 1;
 
-defm PMADDWD : PDI_binop_rm0xF5, pmaddwd, int_x86_sse2_pmadd_wd, 1;
+defm PMADDWD : PDI_binop_rm_int0xF5, pmaddwd, int_x86_sse2_pmadd_wd, 1;
 
-defm PAVGB  : PDI_binop_rm0xE0, pavgb, int_x86_sse2_pavg_b, 1;
-defm PAVGW  : PDI_binop_rm0xE3, pavgw, int_x86_sse2_pavg_w, 1;
+defm PAVGB  : PDI_binop_rm_int0xE0, pavgb, int_x86_sse2_pavg_b, 1;
+defm PAVGW  : PDI_binop_rm_int0xE3, pavgw, int_x86_sse2_pavg_w, 1;
 
 
-defm PMINUB : PDI_binop_rm0xDA, pminub, int_x86_sse2_pminu_b, 1;
-defm PMINSW : PDI_binop_rm0xEA, pminsw, int_x86_sse2_pmins_w, 1;
-defm PMAXUB : PDI_binop_rm0xDE, pmaxub, int_x86_sse2_pmaxu_b, 1;
-defm PMAXSW : PDI_binop_rm0xEE, pmaxsw, int_x86_sse2_pmaxs_w, 1;
-defm PSADBW : PDI_binop_rm0xE0, psadbw, int_x86_sse2_psad_bw, 1;
+defm PMINUB : PDI_binop_rm_int0xDA, pminub, int_x86_sse2_pminu_b, 1;
+defm PMINSW : PDI_binop_rm_int0xEA, pminsw, int_x86_sse2_pmins_w, 1;
+defm PMAXUB : PDI_binop_rm_int0xDE, pmaxub, int_x86_sse2_pmaxu_b, 1;
+defm PMAXSW : PDI_binop_rm_int0xEE, pmaxsw, int_x86_sse2_pmaxs_w, 1;
+defm PSADBW : PDI_binop_rm_int0xE0, psadbw, int_x86_sse2_psad_bw, 1;
 
 
-defm PSLLW : PDI_binop_rmi0xF1, 0x71, MRM6r, psllw, int_x86_sse2_psll_w;
-defm PSLLD : PDI_binop_rmi0xF2, 0x72, MRM6r, pslld, int_x86_sse2_psll_d;
-defm 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.154 - 1.155
---
Log message:

Fix a bug where PADDQrm printed paddd instead of paddq.


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

 X86InstrSSE.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.154 
llvm/lib/Target/X86/X86InstrSSE.td:1.155
--- llvm/lib/Target/X86/X86InstrSSE.td:1.154Sat Oct  7 14:14:49 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 14:15:46 2006
@@ -1340,7 +1340,7 @@
   [(set VR128:$dst, (v2i64 (add VR128:$src1, VR128:$src2)))];
 }
 def PADDQrm : PDI0xD4, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-  paddd {$src2, $dst|$dst, $src2},
+  paddq {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (add VR128:$src1,
  (loadv2i64 addr:$src2)))];
 }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.153 - 1.154
---
Log message:

Add multiclass for SSE2 instructions that correspond to simple binops.


---
Diffs of the changes:  (+35 -56)

 X86InstrSSE.td |   91 +
 1 files changed, 35 insertions(+), 56 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.153 
llvm/lib/Target/X86/X86InstrSSE.td:1.154
--- llvm/lib/Target/X86/X86InstrSSE.td:1.153Sat Oct  7 14:02:31 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 14:14:49 2006
@@ -1306,93 +1306,72 @@
 }
 }
 
+
+let isTwoAddress = 1 in {
+/// PDI_binop_rm - Simple SSE2 binary operator.
+multiclass PDI_binop_rmbits8 opc, string OpcodeStr, SDNode OpNode,
+ValueType OpVT, bit Commutable = 0 {
+  def rr : PDIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (OpVT (OpNode VR128:$src1, VR128:$src2)))] {
+let isCommutable = Commutable;
+  }
+  def rm : PDIopc, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+   !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (OpVT (OpNode VR128:$src1,
+   (bitconvert (loadv2i64 
addr:$src2)];
+}
+}
+
+
 // 128-bit Integer Arithmetic
+
+defm PADDB : PDI_binop_rm0xFC, paddb, add, v16i8, 1;
+defm PADDW : PDI_binop_rm0xFD, paddw, add, v8i16, 1;
+defm PADDD : PDI_binop_rm0xFE, paddd, add, v4i32, 1;
+
+//defm PADDQ : PDI_binop_rm0xD4, paddq, add, v2i64, 1;
+
 let isTwoAddress = 1 in {
-let isCommutable = 1 in {
-def PADDBrr : PDI0xFC, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  paddb {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v16i8 (add VR128:$src1, VR128:$src2)))];
-def PADDWrr : PDI0xFD, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  paddw {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v8i16 (add VR128:$src1, VR128:$src2)))];
-def PADDDrr : PDI0xFE, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  paddd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4i32 (add VR128:$src1, VR128:$src2)))];
 
+let isCommutable = 1 in {
 def PADDQrr : PDI0xD4, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   paddq {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v2i64 (add VR128:$src1, VR128:$src2)))];
 }
-def PADDBrm : PDI0xFC, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-  paddb {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (add VR128:$src1,
- (bc_v16i8 (loadv2i64 addr:$src2];
-def PADDWrm : PDI0xFD, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-  paddw {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (add VR128:$src1,
- (bc_v8i16 (loadv2i64 addr:$src2];
-def PADDDrm : PDI0xFE, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-  paddd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (add VR128:$src1,
- (bc_v4i32 (loadv2i64 addr:$src2];
 def PADDQrm : PDI0xD4, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
   paddd {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (add VR128:$src1,
  (loadv2i64 addr:$src2)))];
-
+}
 
 defm PADDSB  : PDI_binop_rm_int0xEC, paddsb , int_x86_sse2_padds_b, 1;
 defm PADDSW  : PDI_binop_rm_int0xED, paddsw , int_x86_sse2_padds_w, 1;
 defm PADDUSB : PDI_binop_rm_int0xDC, paddusb, int_x86_sse2_paddus_b, 1;
 defm PADDUSW : PDI_binop_rm_int0xDD, paddusw, int_x86_sse2_paddus_w, 1;
 
-def PSUBBrr : PDI0xF8, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  psubb {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v16i8 (sub VR128:$src1, VR128:$src2)))];
-def PSUBWrr : PDI0xF9, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  psubw {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v8i16 (sub VR128:$src1, VR128:$src2)))];
-def PSUBDrr : PDI0xFA, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  psubd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4i32 (sub VR128:$src1, VR128:$src2)))];
+defm PSUBB : PDI_binop_rm0xF8, psubb, sub, v16i8;
+defm PSUBW : PDI_binop_rm0xF9, psubw, sub, v8i16;
+defm PSUBD : PDI_binop_rm0xFA, psubd, sub, v4i32;
+
+
+let isTwoAddress = 1 in {
 def PSUBQrr : PDI0xFB, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   psubq {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v2i64 (sub VR128:$src1, VR128:$src2)))];
 
-def PSUBBrm : PDI0xF8, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-  

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.155 - 1.156
---
Log message:

Convert some more instructions over to use a new multiclass.

Fix a bug where the asmstring for PSUBQrm was wrong.



---
Diffs of the changes:  (+19 -27)

 X86InstrSSE.td |   46 +++---
 1 files changed, 19 insertions(+), 27 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.155 
llvm/lib/Target/X86/X86InstrSSE.td:1.156
--- llvm/lib/Target/X86/X86InstrSSE.td:1.155Sat Oct  7 14:15:46 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 14:34:33 2006
@@ -1321,6 +1321,23 @@
[(set VR128:$dst, (OpVT (OpNode VR128:$src1,
(bitconvert (loadv2i64 
addr:$src2)];
 }
+
+/// PDI_binop_rm_v2i64 - Simple SSE2 binary operator whose type is v2i64.
+///
+/// FIXME: we could eliminate this and use PDI_binop_rm instead if tblgen knew
+/// to collapse (bitconvert VT to VT) into its operand.
+///
+multiclass PDI_binop_rm_v2i64bits8 opc, string OpcodeStr, SDNode OpNode,
+  bit Commutable = 0 {
+  def rr : PDIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (v2i64 (OpNode VR128:$src1, VR128:$src2)))] {
+let isCommutable = Commutable;
+  }
+  def rm : PDIopc, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+   !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (OpNode VR128:$src1,(loadv2i64 
addr:$src2)))];
+}
 }
 
 
@@ -1329,21 +1346,7 @@
 defm PADDB : PDI_binop_rm0xFC, paddb, add, v16i8, 1;
 defm PADDW : PDI_binop_rm0xFD, paddw, add, v8i16, 1;
 defm PADDD : PDI_binop_rm0xFE, paddd, add, v4i32, 1;
-
-//defm PADDQ : PDI_binop_rm0xD4, paddq, add, v2i64, 1;
-
-let isTwoAddress = 1 in {
-
-let isCommutable = 1 in {
-def PADDQrr : PDI0xD4, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  paddq {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2i64 (add VR128:$src1, VR128:$src2)))];
-}
-def PADDQrm : PDI0xD4, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-  paddq {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (add VR128:$src1,
- (loadv2i64 addr:$src2)))];
-}
+defm PADDQ : PDI_binop_rm_v2i640xD4, paddq, add, 1;
 
 defm PADDSB  : PDI_binop_rm_int0xEC, paddsb , int_x86_sse2_padds_b, 1;
 defm PADDSW  : PDI_binop_rm_int0xED, paddsw , int_x86_sse2_padds_w, 1;
@@ -1353,18 +1356,7 @@
 defm PSUBB : PDI_binop_rm0xF8, psubb, sub, v16i8;
 defm PSUBW : PDI_binop_rm0xF9, psubw, sub, v8i16;
 defm PSUBD : PDI_binop_rm0xFA, psubd, sub, v4i32;
-
-
-let isTwoAddress = 1 in {
-def PSUBQrr : PDI0xFB, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  psubq {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2i64 (sub VR128:$src1, VR128:$src2)))];
-
-def PSUBQrm : PDI0xFB, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-  psubd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (sub VR128:$src1,
- (loadv2i64 addr:$src2)))];
-}
+defm PSUBQ : PDI_binop_rm_v2i640xFB, psubq, sub;
 
 defm PSUBSB  : PDI_binop_rm_int0xE8, psubsb , int_x86_sse2_psubs_b;
 defm PSUBSW  : PDI_binop_rm_int0xE9, psubsw , int_x86_sse2_psubs_w;



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.156 - 1.157
---
Log message:

Convert pand/por/pxor to use multiclass


---
Diffs of the changes:  (+4 -25)

 X86InstrSSE.td |   29 -
 1 files changed, 4 insertions(+), 25 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.156 
llvm/lib/Target/X86/X86InstrSSE.td:1.157
--- llvm/lib/Target/X86/X86InstrSSE.td:1.156Sat Oct  7 14:34:33 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 14:37:30 2006
@@ -1403,32 +1403,11 @@
 }
 
 // Logical
-let isTwoAddress = 1 in {
-let isCommutable = 1 in {
-def PANDrr : PDI0xDB, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
- pand {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v2i64 (and VR128:$src1, VR128:$src2)))];
-def PORrr  : PDI0xEB, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
- por {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v2i64 (or VR128:$src1, VR128:$src2)))];
-def PXORrr : PDI0xEF, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
- pxor {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v2i64 (xor VR128:$src1, VR128:$src2)))];
-}
-
-def PANDrm : PDI0xDB, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
- pand {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v2i64 (and VR128:$src1,
-   (load addr:$src2];
-def PORrm  : PDI0xEB, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
- por {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v2i64 (or VR128:$src1,
-   (load addr:$src2];
-def PXORrm : PDI0xEF, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
- pxor {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v2i64 (xor VR128:$src1,
-   (load addr:$src2];
+defm PAND : PDI_binop_rm_v2i640xDB, pand, and, 1;
+defm POR  : PDI_binop_rm_v2i640xEB, por , or , 1;
+defm PXOR : PDI_binop_rm_v2i640xEF, pxor, xor, 1;
 
+let isTwoAddress = 1 in {
 def PANDNrr : PDI0xDF, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   pandn {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v2i64 (and (vnot VR128:$src1),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.157 - 1.158
---
Log message:

Random acts of shrinkage


---
Diffs of the changes:  (+24 -34)

 X86InstrSSE.td |   58 +++--
 1 files changed, 24 insertions(+), 34 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.157 
llvm/lib/Target/X86/X86InstrSSE.td:1.158
--- llvm/lib/Target/X86/X86InstrSSE.td:1.157Sat Oct  7 14:37:30 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 14:49:05 2006
@@ -17,10 +17,8 @@
 // SSE specific DAG Nodes.
 
//===--===//
 
-def X86loadp   : SDNodeX86ISD::LOAD_PACK, SDTLoad, 
-[SDNPHasChain];
-def X86loadu   : SDNodeX86ISD::LOAD_UA,   SDTLoad, 
-[SDNPHasChain];
+def X86loadp   : SDNodeX86ISD::LOAD_PACK, SDTLoad, [SDNPHasChain];
+def X86loadu   : SDNodeX86ISD::LOAD_UA,   SDTLoad, [SDNPHasChain];
 def X86fand: SDNodeX86ISD::FAND,  SDTFPBinOp,
 [SDNPCommutative, SDNPAssociative];
 def X86fxor: SDNodeX86ISD::FXOR,  SDTFPBinOp,
@@ -29,12 +27,9 @@
 [SDNPHasChain, SDNPOutFlag];
 def X86ucomi   : SDNodeX86ISD::UCOMI, SDTX86CmpTest,
 [SDNPHasChain, SDNPOutFlag];
-def X86s2vec   : SDNodeX86ISD::S2VEC,
-SDTypeProfile1, 1, [], [];
-def X86pextrw  : SDNodeX86ISD::PEXTRW,
-SDTypeProfile1, 2, [], [];
-def X86pinsrw  : SDNodeX86ISD::PINSRW,
-SDTypeProfile1, 3, [], [];
+def X86s2vec   : SDNodeX86ISD::S2VEC,  SDTypeProfile1, 1, [], [];
+def X86pextrw  : SDNodeX86ISD::PEXTRW, SDTypeProfile1, 2, [], [];
+def X86pinsrw  : SDNodeX86ISD::PINSRW, SDTypeProfile1, 3, [], [];
 
 
//===--===//
 // SSE pattern fragments
@@ -1394,6 +1389,8 @@
 defm PSRAD : PDI_binop_rmi_int0xE2, 0x72, MRM4r, psrad, 
int_x86_sse2_psra_d;
 // PSRAQ doesn't exist in SSE[1-3].
 
+
+// 128-bit logical shifts.
 let isTwoAddress = 1 in {
 def PSLLDQri : PDIi80x73, MRM7r, (ops VR128:$dst, VR128:$src1, 
i32i8imm:$src2),
  pslldq {$src2, $dst|$dst, $src2}, [];
@@ -1402,6 +1399,13 @@
 // PSRADQri doesn't exist in SSE[1-3].
 }
 
+let Predicates = [HasSSE2] in {
+  def : Pat(int_x86_sse2_psll_dq VR128:$src1, imm:$src2),
+(v2i64 (PSLLDQri VR128:$src1, (PSxLDQ_imm imm:$src2)));
+  def : Pat(int_x86_sse2_psrl_dq VR128:$src1, imm:$src2),
+(v2i64 (PSRLDQri VR128:$src1, (PSxLDQ_imm imm:$src2)));
+}
+
 // Logical
 defm PAND : PDI_binop_rm_v2i640xDB, pand, and, 1;
 defm POR  : PDI_binop_rm_v2i640xEB, por , or , 1;
@@ -1632,15 +1636,12 @@
  [(int_x86_sse2_maskmov_dqu VR128:$src, VR128:$mask, 
EDI)],
  Imp[EDI],[];
 
-// Prefetching loads
-def PREFETCHT0   : PSI0x18, MRM1m, (ops i8mem:$src),
-   prefetcht0 $src, [];
-def PREFETCHT1   : PSI0x18, MRM2m, (ops i8mem:$src),
-   prefetcht1 $src, [];
-def PREFETCHT2   : PSI0x18, MRM3m, (ops i8mem:$src),
-   prefetcht2 $src, [];
-def PREFETCHTNTA : PSI0x18, MRM0m, (ops i8mem:$src),
-   prefetchtnta $src, [];
+// Prefetching loads.
+// TODO: no intrinsics for these?
+def PREFETCHT0   : PSI0x18, MRM1m, (ops i8mem:$src), prefetcht0 $src, [];
+def PREFETCHT1   : PSI0x18, MRM2m, (ops i8mem:$src), prefetcht1 $src, [];
+def PREFETCHT2   : PSI0x18, MRM3m, (ops i8mem:$src), prefetcht2 $src, [];
+def PREFETCHTNTA : PSI0x18, MRM0m, (ops i8mem:$src), prefetchtnta $src, [];
 
 // Non-temporal stores
 def MOVNTPSmr : PSI0x2B, MRMDestMem, (ops i128mem:$dst, VR128:$src),
@@ -1663,8 +1664,7 @@
   TB, Requires[HasSSE2];
 
 // Load, store, and memory fence
-def SFENCE : I0xAE, MRM7m, (ops),
-   sfence, [(int_x86_sse_sfence)], TB, Requires[HasSSE1];
+def SFENCE : PSI0xAE, MRM7m, (ops), sfence, [(int_x86_sse_sfence)];
 def LFENCE : I0xAE, MRM5m, (ops),
lfence, [(int_x86_sse2_lfence)], TB, Requires[HasSSE2];
 def MFENCE : I0xAE, MRM6m, (ops),
@@ -1680,11 +1680,9 @@
 
 // Thread synchronization
 def MONITOR : I0xC8, RawFrm, (ops), monitor,
-[(int_x86_sse3_monitor EAX, ECX, EDX)],
-  TB, Requires[HasSSE3];
-def MWAIT : I0xC9, RawFrm, (ops), mwait,
-[(int_x86_sse3_mwait ECX, EAX)],
-  TB, Requires[HasSSE3];
+[(int_x86_sse3_monitor EAX, ECX, EDX)],TB, 
Requires[HasSSE3];
+def MWAIT   : I0xC9, RawFrm, (ops), mwait,
+[(int_x86_sse3_mwait ECX, EAX)], TB, Requires[HasSSE3];
 
 
//===--===//
 // Alias Instructions
@@ -2090,14 +2088,6 @@
 def : Pat(int_x86_sse2_punpckl_qdq VR128:$src1, (load addr:$src2)),
   (PUNPCKLQDQrm VR128:$src1, addr:$src2), 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.159 - 1.160
---
Log message:

one multiclass now defines all 8 variants of binary-scalar-sse-fp operations.


---
Diffs of the changes:  (+66 -51)

 X86InstrSSE.td |  117 -
 1 files changed, 66 insertions(+), 51 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.159 
llvm/lib/Target/X86/X86InstrSSE.td:1.160
--- llvm/lib/Target/X86/X86InstrSSE.td:1.159Sat Oct  7 15:35:44 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 15:55:57 2006
@@ -199,23 +199,6 @@
   [(set VR128:$dst, (v2f64 (IntId (load addr:$src];
 }
 
-class SS_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
-  : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
-[(set VR128:$dst, (v4f32 (IntId VR128:$src1, VR128:$src2)))];
-class SS_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
-  : SSIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f32mem:$src2),
-!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
-[(set VR128:$dst, (v4f32 (IntId VR128:$src1, (load addr:$src2];
-class SD_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
-  : SDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
-[(set VR128:$dst, (v2f64 (IntId VR128:$src1, VR128:$src2)))];
-class SD_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
-  : SDIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f64mem:$src2),
-!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
-[(set VR128:$dst, (v2f64 (IntId VR128:$src1, (load addr:$src2];
-
 class PS_Intrbits8 o, string OpcodeStr, Intrinsic IntId
   : PSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src),
 !strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
@@ -306,9 +289,20 @@
 [(store FR64:$src, addr:$dst)];
 
 let isTwoAddress = 1 in {
-/// scalar_sse12_fp_binop_rm - Define 4 scalar sse instructions.
+
+/// scalar_sse12_fp_binop_rm - Scalar SSE binops come in four basic forms:
+///  1. f32 vs f64 - These come in SSE1/SSE2 forms for float/doubles.
+///  2. rr vs rm - They include a reg+reg form and a ref+mem form.
+///
+/// In addition, scalar SSE ops have an intrinsic form.  This form is unlike 
the
+/// normal form, in that they take an entire vector (instead of a scalar) and
+/// leave the top elements undefined.  This adds another two variants of the
+/// above permutations, giving us 8 forms for 'instruction'.
+///
 multiclass scalar_sse12_fp_binop_rmbits8 opc, string OpcodeStr,
-SDNode OpNode, bit Commutable = 0 {
+SDNode OpNode, Intrinsic F32Int,
+Intrinsic F64Int, bit Commutable = 0 {
+  // Scalar operation, reg+reg.
   def SSrr : SSIopc, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
!strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2),
[(set FR32:$dst, (OpNode FR32:$src1, FR32:$src2))] {
@@ -319,21 +313,47 @@
[(set FR64:$dst, (OpNode FR64:$src1, FR64:$src2))] {
 let isCommutable = Commutable;
   }
+  // Scalar operation, reg+mem.
   def SSrm : SSIopc, MRMSrcMem, (ops FR32:$dst, FR32:$src1, f32mem:$src2),
  !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2),
  [(set FR32:$dst, (OpNode FR32:$src1, (loadf32 addr:$src2)))];
   def SDrm : SDIopc, MRMSrcMem, (ops FR64:$dst, FR64:$src1, f64mem:$src2),
  !strconcat(OpcodeStr, sd {$src2, $dst|$dst, $src2),
  [(set FR64:$dst, (OpNode FR64:$src1, (loadf64 addr:$src2)))];
+ 
+  // Vector intrinsic operation, reg+reg.
+  def SSrr_Int : SSIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+ !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2),
+ [(set VR128:$dst, (F32Int VR128:$src1, VR128:$src2))] {
+let isCommutable = Commutable;
+  }
+  def SDrr_Int : SDIopc, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+   !strconcat(OpcodeStr, sd {$src2, $dst|$dst, $src2),
+   [(set VR128:$dst, (F64Int VR128:$src1, VR128:$src2))] {
+let isCommutable = Commutable;
+  }
+  // Vector intrinsic operation, reg+mem.
+  def SSrm_Int : SSIopc, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f32mem:$src2),
+ !strconcat(OpcodeStr, ss {$src2, $dst|$dst, $src2),
+ [(set VR128:$dst, (F32Int VR128:$src1,
+   (load addr:$src2)))];
+  def SDrm_Int : SDIopc, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
+ !strconcat(OpcodeStr, sd {$src2, $dst|$dst, $src2),
+ [(set VR128:$dst, (F64Int VR128:$src1,
+   (load addr:$src2)))];
 }
 }
 
 // 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-07 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.160 - 1.161
---
Log message:

convert packed FP add/sub/mul/div to use a multiclass.


---
Diffs of the changes:  (+34 -65)

 X86InstrSSE.td |   99 +++--
 1 files changed, 34 insertions(+), 65 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.160 
llvm/lib/Target/X86/X86InstrSSE.td:1.161
--- llvm/lib/Target/X86/X86InstrSSE.td:1.160Sat Oct  7 15:55:57 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 16:17:13 2006
@@ -288,8 +288,6 @@
 movsd {$src, $dst|$dst, $src},
 [(store FR64:$src, addr:$dst)];
 
-let isTwoAddress = 1 in {
-
 /// scalar_sse12_fp_binop_rm - Scalar SSE binops come in four basic forms:
 ///  1. f32 vs f64 - These come in SSE1/SSE2 forms for float/doubles.
 ///  2. rr vs rm - They include a reg+reg form and a ref+mem form.
@@ -299,6 +297,7 @@
 /// leave the top elements undefined.  This adds another two variants of the
 /// above permutations, giving us 8 forms for 'instruction'.
 ///
+let isTwoAddress = 1 in {
 multiclass scalar_sse12_fp_binop_rmbits8 opc, string OpcodeStr,
 SDNode OpNode, Intrinsic F32Int,
 Intrinsic F64Int, bit Commutable = 0 {
@@ -573,7 +572,6 @@
 // start with 'Fs'.
 
 // Alias instructions that map fld0 to pxor for sse.
-// FIXME: remove when we can teach regalloc that xor reg, reg is ok.
 def FsFLD0SS : I0xEF, MRMInitReg, (ops FR32:$dst),
  pxor $dst, $dst, [(set FR32:$dst, fp32imm0)],
Requires[HasSSE1], TB, OpSize;
@@ -912,70 +910,41 @@
 Requires[HasSSE2];
 }
 
-// Arithmetic
+/// packed_sse12_fp_binop_rm - Packed SSE binops come in four basic forms:
+///  1. v4f32 vs v2f64 - These come in SSE1/SSE2 forms for float/doubles.
+///  2. rr vs rm - They include a reg+reg form and a ref+mem form.
+///
 let isTwoAddress = 1 in {
-let isCommutable = 1 in {
-def ADDPSrr : PSI0x58, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  addps {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4f32 (fadd VR128:$src1, VR128:$src2)))];
-def ADDPDrr : PDI0x58, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  addpd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2f64 (fadd VR128:$src1, VR128:$src2)))];
-def MULPSrr : PSI0x59, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  mulps {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4f32 (fmul VR128:$src1, VR128:$src2)))];
-def MULPDrr : PDI0x59, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  mulpd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2f64 (fmul VR128:$src1, VR128:$src2)))];
-}
-
-def ADDPSrm : PSI0x58, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
-  addps {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4f32 (fadd VR128:$src1,
-(load addr:$src2];
-def ADDPDrm : PDI0x58, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
-  addpd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2f64 (fadd VR128:$src1,
-(load addr:$src2];
-def MULPSrm : PSI0x59, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
-  mulps {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4f32 (fmul VR128:$src1,
-(load addr:$src2];
-def MULPDrm : PDI0x59, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
-  mulpd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2f64 (fmul VR128:$src1,
-(load addr:$src2];
-
-def DIVPSrr : PSI0x5E, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-  divps {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4f32 (fdiv VR128:$src1, VR128:$src2)))];
-def DIVPSrm : PSI0x5E, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
-  divps {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4f32 (fdiv VR128:$src1,
-(load addr:$src2];
-def DIVPDrr : PDI0x5E, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
-divpd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2f64 (fdiv VR128:$src1, VR128:$src2)))];
-def DIVPDrm : PDI0x5E, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
-divpd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2f64 (fdiv VR128:$src1,
-(load addr:$src2];
-
-def SUBPSrr : PSI0x5C, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-06 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.133 - 1.134
---
Log message:

eliminate redundancy


---
Diffs of the changes:  (+32 -60)

 X86InstrSSE.td |   92 +++--
 1 files changed, 32 insertions(+), 60 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.133 
llvm/lib/Target/X86/X86InstrSSE.td:1.134
--- llvm/lib/Target/X86/X86InstrSSE.td:1.133Tue Oct  3 01:55:11 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Fri Oct  6 23:52:09 2006
@@ -2289,66 +2289,38 @@
   Requires[HasSSE2];
 
 // bit_convert
-def : Pat(v2i64 (bitconvert (v4i32 VR128:$src))), (v2i64 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v2i64 (bitconvert (v8i16 VR128:$src))), (v2i64 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v2i64 (bitconvert (v16i8 VR128:$src))), (v2i64 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v2i64 (bitconvert (v2f64 VR128:$src))), (v2i64 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v2i64 (bitconvert (v4f32 VR128:$src))), (v2i64 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v4i32 (bitconvert (v2i64 VR128:$src))), (v4i32 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v4i32 (bitconvert (v8i16 VR128:$src))), (v4i32 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v4i32 (bitconvert (v16i8 VR128:$src))), (v4i32 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v4i32 (bitconvert (v2f64 VR128:$src))), (v4i32 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v4i32 (bitconvert (v4f32 VR128:$src))), (v4i32 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v8i16 (bitconvert (v2i64 VR128:$src))), (v8i16 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v8i16 (bitconvert (v4i32 VR128:$src))), (v8i16 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v8i16 (bitconvert (v16i8 VR128:$src))), (v8i16 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v8i16 (bitconvert (v2f64 VR128:$src))), (v8i16 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v8i16 (bitconvert (v4f32 VR128:$src))), (v8i16 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v16i8 (bitconvert (v2i64 VR128:$src))), (v16i8 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v16i8 (bitconvert (v4i32 VR128:$src))), (v16i8 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v16i8 (bitconvert (v8i16 VR128:$src))), (v16i8 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v16i8 (bitconvert (v2f64 VR128:$src))), (v16i8 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v16i8 (bitconvert (v4f32 VR128:$src))), (v16i8 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v4f32 (bitconvert (v2i64 VR128:$src))), (v4f32 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v4f32 (bitconvert (v4i32 VR128:$src))), (v4f32 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v4f32 (bitconvert (v8i16 VR128:$src))), (v4f32 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v4f32 (bitconvert (v16i8 VR128:$src))), (v4f32 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v4f32 (bitconvert (v2f64 VR128:$src))), (v4f32 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v2f64 (bitconvert (v2i64 VR128:$src))), (v2f64 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v2f64 (bitconvert (v4i32 VR128:$src))), (v2f64 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v2f64 (bitconvert (v8i16 VR128:$src))), (v2f64 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v2f64 (bitconvert (v16i8 VR128:$src))), (v2f64 VR128:$src),
-  Requires[HasSSE2];
-def : Pat(v2f64 (bitconvert (v4f32 VR128:$src))), (v2f64 VR128:$src),
-  Requires[HasSSE2];
+let Predicates = [HasSSE2] in {
+  def : Pat(v2i64 (bitconvert (v4i32 VR128:$src))), (v2i64 VR128:$src);
+  def : Pat(v2i64 (bitconvert (v8i16 VR128:$src))), (v2i64 VR128:$src);
+  def : Pat(v2i64 (bitconvert (v16i8 VR128:$src))), (v2i64 VR128:$src);
+  def : Pat(v2i64 (bitconvert (v2f64 VR128:$src))), (v2i64 VR128:$src);
+  def : Pat(v2i64 (bitconvert (v4f32 VR128:$src))), (v2i64 VR128:$src);
+  def : Pat(v4i32 (bitconvert (v2i64 VR128:$src))), (v4i32 VR128:$src);
+  def : Pat(v4i32 (bitconvert (v8i16 VR128:$src))), (v4i32 VR128:$src);
+  def : Pat(v4i32 (bitconvert (v16i8 VR128:$src))), (v4i32 VR128:$src);
+  def : Pat(v4i32 (bitconvert (v2f64 VR128:$src))), (v4i32 VR128:$src);
+  def : Pat(v4i32 (bitconvert (v4f32 VR128:$src))), (v4i32 VR128:$src);
+  def : Pat(v8i16 (bitconvert (v2i64 VR128:$src))), (v8i16 VR128:$src);
+  def : Pat(v8i16 (bitconvert (v4i32 VR128:$src))), (v8i16 VR128:$src);
+  def : Pat(v8i16 (bitconvert (v16i8 VR128:$src))), (v8i16 VR128:$src);
+  def : Pat(v8i16 (bitconvert (v2f64 VR128:$src))), (v8i16 VR128:$src);
+  def : Pat(v8i16 (bitconvert (v4f32 VR128:$src))), (v8i16 VR128:$src);
+  def : Pat(v16i8 (bitconvert (v2i64 VR128:$src))), (v16i8 VR128:$src);
+  def : Pat(v16i8 (bitconvert (v4i32 VR128:$src))), (v16i8 VR128:$src);
+  def : Pat(v16i8 (bitconvert (v8i16 VR128:$src))), (v16i8 VR128:$src);
+  def : Pat(v16i8 (bitconvert (v2f64 VR128:$src))), (v16i8 VR128:$src);
+  def : Pat(v16i8 (bitconvert 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-06 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.134 - 1.135
---
Log message:

Remove RSQRTSS[rm] RCPSS[rm], which are dead.

Introduce SS_IntUnary, a multiclass to replace SS_Int[rm].



---
Diffs of the changes:  (+16 -21)

 X86InstrSSE.td |   37 -
 1 files changed, 16 insertions(+), 21 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.134 
llvm/lib/Target/X86/X86InstrSSE.td:1.135
--- llvm/lib/Target/X86/X86InstrSSE.td:1.134Fri Oct  6 23:52:09 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 00:09:48 2006
@@ -194,6 +194,15 @@
 class SS_Intmbits8 o, string asm, Intrinsic IntId
   : SSIo, MRMSrcMem, (ops VR128:$dst, f32mem:$src), asm,
 [(set VR128:$dst, (v4f32 (IntId (load addr:$src];
+
+
+multiclass SS_IntUnarybits8 o, string asm, Intrinsic IntId {
+  def r : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
+  [(set VR128:$dst, (v4f32 (IntId VR128:$src)))];
+  def m : SSIo, MRMSrcMem, (ops VR128:$dst, f32mem:$src), asm,
+  [(set VR128:$dst, (v4f32 (IntId (load addr:$src];
+}
+
 class SD_Intrbits8 o, string asm, Intrinsic IntId
   : SDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
 [(set VR128:$dst, (v2f64 (IntId VR128:$src)))];
@@ -380,15 +389,6 @@
  sqrtsd {$src, $dst|$dst, $src},
  [(set FR64:$dst, (fsqrt (loadf64 addr:$src)))];
 
-def RSQRTSSr : SSI0x52, MRMSrcReg, (ops FR32:$dst, FR32:$src),
-   rsqrtss {$src, $dst|$dst, $src}, [];
-def RSQRTSSm : SSI0x52, MRMSrcMem, (ops FR32:$dst, f32mem:$src),
-   rsqrtss {$src, $dst|$dst, $src}, [];
-def RCPSSr : SSI0x53, MRMSrcReg, (ops FR32:$dst, FR32:$src),
- rcpss {$src, $dst|$dst, $src}, [];
-def RCPSSm : SSI0x53, MRMSrcMem, (ops FR32:$dst, f32mem:$src),
- rcpss {$src, $dst|$dst, $src}, [];
-
 let isTwoAddress = 1 in {
 let isCommutable = 1 in {
 def MAXSSrr : SSI0x5F, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
@@ -451,23 +451,18 @@
int_x86_sse2_sub_sd;
 }
 
-def Int_SQRTSSr : SS_Intr0x51, sqrtss {$src, $dst|$dst, $src},
-  int_x86_sse_sqrt_ss;
-def Int_SQRTSSm : SS_Intm0x51, sqrtss {$src, $dst|$dst, $src},
-  int_x86_sse_sqrt_ss;
+defm Int_SQRTSS : SS_IntUnary0x51, sqrtss {$src, $dst|$dst, $src},
+  int_x86_sse_sqrt_ss;
+
 def Int_SQRTSDr : SD_Intr0x51, sqrtsd {$src, $dst|$dst, $src},
   int_x86_sse2_sqrt_sd;
 def Int_SQRTSDm : SD_Intm0x51, sqrtsd {$src, $dst|$dst, $src},
   int_x86_sse2_sqrt_sd;
 
-def Int_RSQRTSSr : SS_Intr0x52, rsqrtss {$src, $dst|$dst, $src},
-   int_x86_sse_rsqrt_ss;
-def Int_RSQRTSSm : SS_Intm0x52, rsqrtss {$src, $dst|$dst, $src},
-   int_x86_sse_rsqrt_ss;
-def Int_RCPSSr   : SS_Intr0x53, rcpss {$src, $dst|$dst, $src},
-   int_x86_sse_rcp_ss;
-def Int_RCPSSm   : SS_Intm0x53, rcpss {$src, $dst|$dst, $src},
-   int_x86_sse_rcp_ss;
+defm Int_RSQRTSS : SS_IntUnary0x52, rsqrtss {$src, $dst|$dst, $src},
+   int_x86_sse_rsqrt_ss;
+defm Int_RCPSS   : SS_IntUnary0x53, rcpss {$src, $dst|$dst, $src},
+   int_x86_sse_rcp_ss;
 
 let isTwoAddress = 1 in {
 let isCommutable = 1 in {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-06 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.135 - 1.136
---
Log message:

pull operand string into the multiclass 


---
Diffs of the changes:  (+9 -10)

 X86InstrSSE.td |   19 +--
 1 files changed, 9 insertions(+), 10 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.135 
llvm/lib/Target/X86/X86InstrSSE.td:1.136
--- llvm/lib/Target/X86/X86InstrSSE.td:1.135Sat Oct  7 00:09:48 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 00:13:26 2006
@@ -196,10 +196,12 @@
 [(set VR128:$dst, (v4f32 (IntId (load addr:$src];
 
 
-multiclass SS_IntUnarybits8 o, string asm, Intrinsic IntId {
-  def r : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
+multiclass SS_IntUnarybits8 o, string OpcodeStr, Intrinsic IntId {
+  def r : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src),
+  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src),
   [(set VR128:$dst, (v4f32 (IntId VR128:$src)))];
-  def m : SSIo, MRMSrcMem, (ops VR128:$dst, f32mem:$src), asm,
+  def m : SSIo, MRMSrcMem, (ops VR128:$dst, f32mem:$src),
+  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src),
   [(set VR128:$dst, (v4f32 (IntId (load addr:$src];
 }
 
@@ -451,19 +453,16 @@
int_x86_sse2_sub_sd;
 }
 
-defm Int_SQRTSS : SS_IntUnary0x51, sqrtss {$src, $dst|$dst, $src},
-  int_x86_sse_sqrt_ss;
+defm Int_SQRTSS  : SS_IntUnary0x51, sqrtss , int_x86_sse_sqrt_ss;
+defm Int_RSQRTSS : SS_IntUnary0x52, rsqrtss, int_x86_sse_rsqrt_ss;
+defm Int_RCPSS   : SS_IntUnary0x53, rcpss  , int_x86_sse_rcp_ss;
+
 
 def Int_SQRTSDr : SD_Intr0x51, sqrtsd {$src, $dst|$dst, $src},
   int_x86_sse2_sqrt_sd;
 def Int_SQRTSDm : SD_Intm0x51, sqrtsd {$src, $dst|$dst, $src},
   int_x86_sse2_sqrt_sd;
 
-defm Int_RSQRTSS : SS_IntUnary0x52, rsqrtss {$src, $dst|$dst, $src},
-   int_x86_sse_rsqrt_ss;
-defm Int_RCPSS   : SS_IntUnary0x53, rcpss {$src, $dst|$dst, $src},
-   int_x86_sse_rcp_ss;
-
 let isTwoAddress = 1 in {
 let isCommutable = 1 in {
 def Int_MAXSSrr : SS_Intrr0x5F, maxss {$src2, $dst|$dst, $src2},



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-06 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.136 - 1.137
---
Log message:

convert the sole sd unary intrinsic to a multiclass for consistency


---
Diffs of the changes:  (+9 -19)

 X86InstrSSE.td |   28 +---
 1 files changed, 9 insertions(+), 19 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.136 
llvm/lib/Target/X86/X86InstrSSE.td:1.137
--- llvm/lib/Target/X86/X86InstrSSE.td:1.136Sat Oct  7 00:13:26 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 00:19:31 2006
@@ -188,13 +188,6 @@
 
 
//===--===//
 // Helpers for defining instructions that directly correspond to intrinsics.
-class SS_Intrbits8 o, string asm, Intrinsic IntId
-  : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
-[(set VR128:$dst, (v4f32 (IntId VR128:$src)))];
-class SS_Intmbits8 o, string asm, Intrinsic IntId
-  : SSIo, MRMSrcMem, (ops VR128:$dst, f32mem:$src), asm,
-[(set VR128:$dst, (v4f32 (IntId (load addr:$src];
-
 
 multiclass SS_IntUnarybits8 o, string OpcodeStr, Intrinsic IntId {
   def r : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src),
@@ -205,12 +198,14 @@
   [(set VR128:$dst, (v4f32 (IntId (load addr:$src];
 }
 
-class SD_Intrbits8 o, string asm, Intrinsic IntId
-  : SDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
-[(set VR128:$dst, (v2f64 (IntId VR128:$src)))];
-class SD_Intmbits8 o, string asm, Intrinsic IntId
-  : SDIo, MRMSrcMem, (ops VR128:$dst, f64mem:$src), asm,
-[(set VR128:$dst, (v2f64 (IntId (load addr:$src];
+multiclass SD_IntUnarybits8 o, string OpcodeStr, Intrinsic IntId {
+  def r : SDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src),
+  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src),
+  [(set VR128:$dst, (v2f64 (IntId VR128:$src)))];
+  def m : SDIo, MRMSrcMem, (ops VR128:$dst, f64mem:$src),
+  !strconcat(OpcodeStr,  {$src, $dst|$dst, $src),
+  [(set VR128:$dst, (v2f64 (IntId (load addr:$src];
+}
 
 class SS_Intrrbits8 o, string asm, Intrinsic IntId
   : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
@@ -454,15 +449,10 @@
 }
 
 defm Int_SQRTSS  : SS_IntUnary0x51, sqrtss , int_x86_sse_sqrt_ss;
+defm Int_SQRTSD  : SD_IntUnary0x51, sqrtsd , int_x86_sse2_sqrt_sd;
 defm Int_RSQRTSS : SS_IntUnary0x52, rsqrtss, int_x86_sse_rsqrt_ss;
 defm Int_RCPSS   : SS_IntUnary0x53, rcpss  , int_x86_sse_rcp_ss;
 
-
-def Int_SQRTSDr : SD_Intr0x51, sqrtsd {$src, $dst|$dst, $src},
-  int_x86_sse2_sqrt_sd;
-def Int_SQRTSDm : SD_Intm0x51, sqrtsd {$src, $dst|$dst, $src},
-  int_x86_sse2_sqrt_sd;
-
 let isTwoAddress = 1 in {
 let isCommutable = 1 in {
 def Int_MAXSSrr : SS_Intrr0x5F, maxss {$src2, $dst|$dst, $src2},



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-06 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.137 - 1.138
---
Log message:

Pull operand info up into parent class for scalar sse intrinsics.


---
Diffs of the changes:  (+41 -61)

 X86InstrSSE.td |  102 ++---
 1 files changed, 41 insertions(+), 61 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.137 
llvm/lib/Target/X86/X86InstrSSE.td:1.138
--- llvm/lib/Target/X86/X86InstrSSE.td:1.137Sat Oct  7 00:19:31 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 00:26:13 2006
@@ -207,17 +207,21 @@
   [(set VR128:$dst, (v2f64 (IntId (load addr:$src];
 }
 
-class SS_Intrrbits8 o, string asm, Intrinsic IntId
-  : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+class SS_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
+  : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
 [(set VR128:$dst, (v4f32 (IntId VR128:$src1, VR128:$src2)))];
-class SS_Intrmbits8 o, string asm, Intrinsic IntId
-  : SSIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f32mem:$src2), asm,
+class SS_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
+  : SSIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f32mem:$src2),
+!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
 [(set VR128:$dst, (v4f32 (IntId VR128:$src1, (load addr:$src2];
-class SD_Intrrbits8 o, string asm, Intrinsic IntId
-  : SDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+class SD_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
+  : SDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
 [(set VR128:$dst, (v2f64 (IntId VR128:$src1, VR128:$src2)))];
-class SD_Intrmbits8 o, string asm, Intrinsic IntId
-  : SDIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f64mem:$src2), asm,
+class SD_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
+  : SDIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f64mem:$src2),
+!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
 [(set VR128:$dst, (v2f64 (IntId VR128:$src1, (load addr:$src2];
 
 class PS_Intrbits8 o, string asm, Intrinsic IntId
@@ -410,42 +414,26 @@
 // Aliases to match intrinsics which expect XMM operand(s).
 let isTwoAddress = 1 in {
 let isCommutable = 1 in {
-def Int_ADDSSrr : SS_Intrr0x58, addss {$src2, $dst|$dst, $src2},
-   int_x86_sse_add_ss;
-def Int_ADDSDrr : SD_Intrr0x58, addsd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_add_sd;
-def Int_MULSSrr : SS_Intrr0x59, mulss {$src2, $dst|$dst, $src2},
-   int_x86_sse_mul_ss;
-def Int_MULSDrr : SD_Intrr0x59, mulsd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_mul_sd;
-}
-
-def Int_ADDSSrm : SS_Intrm0x58, addss {$src2, $dst|$dst, $src2},
-   int_x86_sse_add_ss;
-def Int_ADDSDrm : SD_Intrm0x58, addsd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_add_sd;
-def Int_MULSSrm : SS_Intrm0x59, mulss {$src2, $dst|$dst, $src2},
-   int_x86_sse_mul_ss;
-def Int_MULSDrm : SD_Intrm0x59, mulsd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_mul_sd;
-
-def Int_DIVSSrr : SS_Intrr0x5E, divss {$src2, $dst|$dst, $src2},
-   int_x86_sse_div_ss;
-def Int_DIVSSrm : SS_Intrm0x5E, divss {$src2, $dst|$dst, $src2},
-   int_x86_sse_div_ss;
-def Int_DIVSDrr : SD_Intrr0x5E, divsd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_div_sd;
-def Int_DIVSDrm : SD_Intrm0x5E, divsd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_div_sd;
-
-def Int_SUBSSrr : SS_Intrr0x5C, subss {$src2, $dst|$dst, $src2},
-   int_x86_sse_sub_ss;
-def Int_SUBSSrm : SS_Intrm0x5C, subss {$src2, $dst|$dst, $src2},
-   int_x86_sse_sub_ss;
-def Int_SUBSDrr : SD_Intrr0x5C, subsd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_sub_sd;
-def Int_SUBSDrm : SD_Intrm0x5C, subsd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_sub_sd;
+def Int_ADDSSrr : SS_Intrr0x58, addss, int_x86_sse_add_ss;
+def Int_ADDSDrr : SD_Intrr0x58, addsd, int_x86_sse2_add_sd;
+def Int_MULSSrr : SS_Intrr0x59, mulss, int_x86_sse_mul_ss;
+def Int_MULSDrr : SD_Intrr0x59, mulsd, int_x86_sse2_mul_sd;
+}
+
+def Int_ADDSSrm : SS_Intrm0x58, addss, int_x86_sse_add_ss;
+def Int_ADDSDrm : SD_Intrm0x58, addsd, int_x86_sse2_add_sd;
+def Int_MULSSrm : SS_Intrm0x59, mulss, int_x86_sse_mul_ss;
+def Int_MULSDrm : SD_Intrm0x59, mulsd, int_x86_sse2_mul_sd;
+
+def Int_DIVSSrr : SS_Intrr0x5E, divss, int_x86_sse_div_ss;
+def Int_DIVSSrm : SS_Intrm0x5E, divss, int_x86_sse_div_ss;
+def Int_DIVSDrr : SD_Intrr0x5E, divsd, int_x86_sse2_div_sd;
+def Int_DIVSDrm : SD_Intrm0x5E, divsd, 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-06 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.138 - 1.139
---
Log message:

remove dead/duplicate instructions



---
Diffs of the changes:  (+0 -21)

 X86InstrSSE.td |   21 -
 1 files changed, 21 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.138 
llvm/lib/Target/X86/X86InstrSSE.td:1.139
--- llvm/lib/Target/X86/X86InstrSSE.td:1.138Sat Oct  7 00:26:13 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 00:41:52 2006
@@ -390,27 +390,6 @@
  sqrtsd {$src, $dst|$dst, $src},
  [(set FR64:$dst, (fsqrt (loadf64 addr:$src)))];
 
-let isTwoAddress = 1 in {
-let isCommutable = 1 in {
-def MAXSSrr : SSI0x5F, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
-  maxss {$src2, $dst|$dst, $src2}, [];
-def MAXSDrr : SDI0x5F, MRMSrcReg, (ops FR64:$dst, FR32:$src1, FR64:$src2),
-  maxsd {$src2, $dst|$dst, $src2}, [];
-def MINSSrr : SSI0x5D, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
-  minss {$src2, $dst|$dst, $src2}, [];
-def MINSDrr : SDI0x5D, MRMSrcReg, (ops FR64:$dst, FR32:$src1, FR64:$src2),
-  minsd {$src2, $dst|$dst, $src2}, [];
-}
-def MAXSSrm : SSI0x5F, MRMSrcMem, (ops FR32:$dst, FR32:$src1, f32mem:$src2),
-  maxss {$src2, $dst|$dst, $src2}, [];
-def MAXSDrm : SDI0x5F, MRMSrcMem, (ops FR64:$dst, FR32:$src1, f64mem:$src2),
-  maxsd {$src2, $dst|$dst, $src2}, [];
-def MINSSrm : SSI0x5D, MRMSrcMem, (ops FR32:$dst, FR32:$src1, f32mem:$src2),
-  minss {$src2, $dst|$dst, $src2}, [];
-def MINSDrm : SDI0x5D, MRMSrcMem, (ops FR64:$dst, FR32:$src1, f64mem:$src2),
-  minsd {$src2, $dst|$dst, $src2}, [];
-}
-
 // Aliases to match intrinsics which expect XMM operand(s).
 let isTwoAddress = 1 in {
 let isCommutable = 1 in {



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-06 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.139 - 1.140
---
Log message:

Factor operands into packed unary classes


---
Diffs of the changes:  (+21 -25)

 X86InstrSSE.td |   46 +-
 1 files changed, 21 insertions(+), 25 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.139 
llvm/lib/Target/X86/X86InstrSSE.td:1.140
--- llvm/lib/Target/X86/X86InstrSSE.td:1.139Sat Oct  7 00:41:52 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 00:47:20 2006
@@ -237,17 +237,21 @@
   : PDIo, MRMSrcMem, (ops VR128:$dst, f64mem:$src), asm,
 [(set VR128:$dst, (IntId (loadv2f64 addr:$src)))];
 
-class PS_Intrrbits8 o, string asm, Intrinsic IntId
-  : PSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+class PS_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
+  : PSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
 [(set VR128:$dst, (IntId VR128:$src1, VR128:$src2))];
-class PS_Intrmbits8 o, string asm, Intrinsic IntId
-  : PSIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f32mem:$src2), asm,
+class PS_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
+  : PSIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f32mem:$src2),
+!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
 [(set VR128:$dst, (IntId VR128:$src1, (loadv4f32 addr:$src2)))];
-class PD_Intrrbits8 o, string asm, Intrinsic IntId
-  : PDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+class PD_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
+  : PDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
 [(set VR128:$dst, (IntId VR128:$src1, VR128:$src2))];
-class PD_Intrmbits8 o, string asm, Intrinsic IntId
-  : PDIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f64mem:$src2), asm,
+class PD_Intrmbits8 o, string OpcodeStr, Intrinsic IntId
+  : PDIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f64mem:$src2),
+!strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
 [(set VR128:$dst, (IntId VR128:$src1, (loadv2f64 addr:$src2)))];
 
 class S3D_Intrrbits8 o, string asm, Intrinsic IntId
@@ -1045,23 +1049,15 @@
 
 let isTwoAddress = 1 in {
 let isCommutable = 1 in {
-def MAXPSrr : PS_Intrr0x5F, maxps {$src2, $dst|$dst, $src2},
-   int_x86_sse_max_ps;
-def MAXPDrr : PD_Intrr0x5F, maxpd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_max_pd;
-def MINPSrr : PS_Intrr0x5D, minps {$src2, $dst|$dst, $src2},
-   int_x86_sse_min_ps;
-def MINPDrr : PD_Intrr0x5D, minpd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_min_pd;
-}
-def MAXPSrm : PS_Intrm0x5F, maxps {$src2, $dst|$dst, $src2},
-   int_x86_sse_max_ps;
-def MAXPDrm : PD_Intrm0x5F, maxpd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_max_pd;
-def MINPSrm : PS_Intrm0x5D, minps {$src2, $dst|$dst, $src2},
-   int_x86_sse_min_ps;
-def MINPDrm : PD_Intrm0x5D, minpd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_min_pd;
+def MAXPSrr : PS_Intrr0x5F, maxps, int_x86_sse_max_ps;
+def MAXPDrr : PD_Intrr0x5F, maxpd, int_x86_sse2_max_pd;
+def MINPSrr : PS_Intrr0x5D, minps, int_x86_sse_min_ps;
+def MINPDrr : PD_Intrr0x5D, minpd, int_x86_sse2_min_pd;
+}
+def MAXPSrm : PS_Intrm0x5F, maxps, int_x86_sse_max_ps;
+def MAXPDrm : PD_Intrm0x5F, maxpd, int_x86_sse2_max_pd;
+def MINPSrm : PS_Intrm0x5D, minps, int_x86_sse_min_ps;
+def MINPDrm : PD_Intrm0x5D, minpd, int_x86_sse2_min_pd;
 }
 
 // Logical



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-06 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.140 - 1.141
---
Log message:

simplify patterns by merging in operand info


---
Diffs of the changes:  (+30 -34)

 X86InstrSSE.td |   64 ++---
 1 files changed, 30 insertions(+), 34 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.140 
llvm/lib/Target/X86/X86InstrSSE.td:1.141
--- llvm/lib/Target/X86/X86InstrSSE.td:1.140Sat Oct  7 00:47:20 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Oct  7 00:50:25 2006
@@ -224,17 +224,21 @@
 !strconcat(OpcodeStr,  {$src2, $dst|$dst, $src2}),
 [(set VR128:$dst, (v2f64 (IntId VR128:$src1, (load addr:$src2];
 
-class PS_Intrbits8 o, string asm, Intrinsic IntId
-  : PSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
+class PS_Intrbits8 o, string OpcodeStr, Intrinsic IntId
+  : PSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src),
+!strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
 [(set VR128:$dst, (IntId VR128:$src))];
-class PS_Intmbits8 o, string asm, Intrinsic IntId
-  : PSIo, MRMSrcMem, (ops VR128:$dst, f32mem:$src), asm,
+class PS_Intmbits8 o, string OpcodeStr, Intrinsic IntId
+  : PSIo, MRMSrcMem, (ops VR128:$dst, f32mem:$src),
+!strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
 [(set VR128:$dst, (IntId (loadv4f32 addr:$src)))];
-class PD_Intrbits8 o, string asm, Intrinsic IntId
-  : PDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
+class PD_Intrbits8 o, string OpcodeStr, Intrinsic IntId
+  : PDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src),
+!strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
 [(set VR128:$dst, (IntId VR128:$src))];
-class PD_Intmbits8 o, string asm, Intrinsic IntId
-  : PDIo, MRMSrcMem, (ops VR128:$dst, f64mem:$src), asm,
+class PD_Intmbits8 o, string OpcodeStr, Intrinsic IntId
+  : PDIo, MRMSrcMem, (ops VR128:$dst, f64mem:$src),
+!strconcat(OpcodeStr,  {$src, $dst|$dst, $src}),
 [(set VR128:$dst, (IntId (loadv2f64 addr:$src)))];
 
 class PS_Intrrbits8 o, string OpcodeStr, Intrinsic IntId
@@ -1029,35 +1033,27 @@
  (loadv2f64 addr:$src2)))];
 }
 
-def SQRTPSr : PS_Intr0x51, sqrtps {$src, $dst|$dst, $src},
-  int_x86_sse_sqrt_ps;
-def SQRTPSm : PS_Intm0x51, sqrtps {$src, $dst|$dst, $src},
-  int_x86_sse_sqrt_ps;
-def SQRTPDr : PD_Intr0x51, sqrtpd {$src, $dst|$dst, $src},
-  int_x86_sse2_sqrt_pd;
-def SQRTPDm : PD_Intm0x51, sqrtpd {$src, $dst|$dst, $src},
-  int_x86_sse2_sqrt_pd;
-
-def RSQRTPSr : PS_Intr0x52, rsqrtps {$src, $dst|$dst, $src},
-   int_x86_sse_rsqrt_ps;
-def RSQRTPSm : PS_Intm0x52, rsqrtps {$src, $dst|$dst, $src},
-   int_x86_sse_rsqrt_ps;
-def RCPPSr : PS_Intr0x53, rcpps {$src, $dst|$dst, $src},
- int_x86_sse_rcp_ps;
-def RCPPSm : PS_Intm0x53, rcpps {$src, $dst|$dst, $src},
- int_x86_sse_rcp_ps;
+def SQRTPSr  : PS_Intr0x51, sqrtps, int_x86_sse_sqrt_ps;
+def SQRTPSm  : PS_Intm0x51, sqrtps, int_x86_sse_sqrt_ps;
+def SQRTPDr  : PD_Intr0x51, sqrtpd, int_x86_sse2_sqrt_pd;
+def SQRTPDm  : PD_Intm0x51, sqrtpd, int_x86_sse2_sqrt_pd;
+
+def RSQRTPSr : PS_Intr0x52, rsqrtps, int_x86_sse_rsqrt_ps;
+def RSQRTPSm : PS_Intm0x52, rsqrtps, int_x86_sse_rsqrt_ps;
+def RCPPSr   : PS_Intr0x53, rcpps, int_x86_sse_rcp_ps;
+def RCPPSm   : PS_Intm0x53, rcpps, int_x86_sse_rcp_ps;
 
 let isTwoAddress = 1 in {
 let isCommutable = 1 in {
-def MAXPSrr : PS_Intrr0x5F, maxps, int_x86_sse_max_ps;
-def MAXPDrr : PD_Intrr0x5F, maxpd, int_x86_sse2_max_pd;
-def MINPSrr : PS_Intrr0x5D, minps, int_x86_sse_min_ps;
-def MINPDrr : PD_Intrr0x5D, minpd, int_x86_sse2_min_pd;
-}
-def MAXPSrm : PS_Intrm0x5F, maxps, int_x86_sse_max_ps;
-def MAXPDrm : PD_Intrm0x5F, maxpd, int_x86_sse2_max_pd;
-def MINPSrm : PS_Intrm0x5D, minps, int_x86_sse_min_ps;
-def MINPDrm : PD_Intrm0x5D, minpd, int_x86_sse2_min_pd;
+def MAXPSrr  : PS_Intrr0x5F, maxps, int_x86_sse_max_ps;
+def MAXPDrr  : PD_Intrr0x5F, maxpd, int_x86_sse2_max_pd;
+def MINPSrr  : PS_Intrr0x5D, minps, int_x86_sse_min_ps;
+def MINPDrr  : PD_Intrr0x5D, minpd, int_x86_sse2_min_pd;
+}
+def MAXPSrm  : PS_Intrm0x5F, maxps, int_x86_sse_max_ps;
+def MAXPDrm  : PD_Intrm0x5F, maxpd, int_x86_sse2_max_pd;
+def MINPSrm  : PS_Intrm0x5D, minps, int_x86_sse_min_ps;
+def MINPDrm  : PD_Intrm0x5D, minpd, int_x86_sse2_min_pd;
 }
 
 // Logical



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-10-03 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.132 - 1.133
---
Log message:

These don't have immediate operands.

---
Diffs of the changes:  (+64 -64)

 X86InstrSSE.td |  128 -
 1 files changed, 64 insertions(+), 64 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.132 
llvm/lib/Target/X86/X86InstrSSE.td:1.133
--- llvm/lib/Target/X86/X86InstrSSE.td:1.132Sun Sep 10 21:19:56 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Oct  3 01:55:11 2006
@@ -1603,38 +1603,38 @@
 }
 
 let isTwoAddress = 1 in {
-def PSLLWrr : PDIi80xF1, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
-psllw {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
-   VR128:$src2))];
-def PSLLWrm : PDIi80xF1, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-psllw {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
-   (bc_v4i32 (loadv2i64 addr:$src2];
+def PSLLWrr : PDI0xF1, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+  psllw {$src2, $dst|$dst, $src2},
+  [(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
+ VR128:$src2))];
+def PSLLWrm : PDI0xF1, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+  psllw {$src2, $dst|$dst, $src2},
+  [(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
+ (bc_v4i32 (loadv2i64 addr:$src2];
 def PSLLWri : PDIi80x71, MRM6r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
 psllw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
(scalar_to_vector (i32 imm:$src2];
-def PSLLDrr : PDIi80xF2, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
-pslld {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
-   VR128:$src2))];
-def PSLLDrm : PDIi80xF2, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-pslld {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
-   (bc_v4i32 (loadv2i64 addr:$src2];
+def PSLLDrr : PDI0xF2, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+  pslld {$src2, $dst|$dst, $src2},
+  [(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
+ VR128:$src2))];
+def PSLLDrm : PDI0xF2, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+  pslld {$src2, $dst|$dst, $src2},
+  [(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
+ (bc_v4i32 (loadv2i64 addr:$src2];
 def PSLLDri : PDIi80x72, MRM6r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
 pslld {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
(scalar_to_vector (i32 imm:$src2];
-def PSLLQrr : PDIi80xF3, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
-psllq {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_psll_q VR128:$src1,
-   VR128:$src2))];
-def PSLLQrm : PDIi80xF3, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
-psllq {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_psll_q VR128:$src1,
-   (bc_v4i32 (loadv2i64 addr:$src2];
+def PSLLQrr : PDI0xF3, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+  psllq {$src2, $dst|$dst, $src2},
+  [(set VR128:$dst, (int_x86_sse2_psll_q VR128:$src1,
+ VR128:$src2))];
+def PSLLQrm : PDI0xF3, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+  psllq {$src2, $dst|$dst, $src2},
+  [(set VR128:$dst, (int_x86_sse2_psll_q VR128:$src1,
+ (bc_v4i32 (loadv2i64 addr:$src2];
 def PSLLQri : PDIi80x73, MRM6r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
 psllq {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psll_q VR128:$src1,
@@ -1642,38 +1642,38 @@
 def PSLLDQri : PDIi80x73, MRM7r, (ops VR128:$dst, VR128:$src1, 
i32i8imm:$src2),
  pslldq {$src2, $dst|$dst, $src2}, [];
 
-def PSRLWrr : PDIi80xD1, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
-psrlw {$src2, $dst|$dst, $src2},
-   

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-06-29 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.127 - 1.128
---
Log message:

Should just use xorps to clear XMM registers for all data types. pxor is also 
one byte longer.

---
Diffs of the changes:  (+10 -14)

 X86InstrSSE.td |   24 ++--
 1 files changed, 10 insertions(+), 14 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.127 
llvm/lib/Target/X86/X86InstrSSE.td:1.128
--- llvm/lib/Target/X86/X86InstrSSE.td:1.127Wed Jun 28 19:34:23 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Thu Jun 29 13:04:54 2006
@@ -2109,15 +2109,9 @@
 
 // Alias instructions that map zero vector to pxor / xorp* for sse.
 // FIXME: remove when we can teach regalloc that xor reg, reg is ok.
-def V_SET0_PI : PDI0xEF, MRMInitReg, (ops VR128:$dst),
-pxor $dst, $dst,
-[(set VR128:$dst, (v2i64 immAllZerosV))];
-def V_SET0_PS : PSI0x57, MRMInitReg, (ops VR128:$dst),
-xorps $dst, $dst,
-[(set VR128:$dst, (v4f32 immAllZerosV))];
-def V_SET0_PD : PDI0x57, MRMInitReg, (ops VR128:$dst),
-xorps $dst, $dst,
-[(set VR128:$dst, (v2f64 immAllZerosV))];
+def V_SET0 : PSI0x57, MRMInitReg, (ops VR128:$dst),
+ xorps $dst, $dst,
+ [(set VR128:$dst, (v4f32 immAllZerosV))];
 
 def V_SETALLONES : PDI0x76, MRMInitReg, (ops VR128:$dst),
pcmpeqd $dst, $dst,
@@ -2265,9 +2259,11 @@
 def : Pat(v2i64 (undef)), (IMPLICIT_DEF_VR128), Requires[HasSSE2];
 
 // 128-bit vector all zero's.
-def : Pat(v16i8 immAllZerosV), (V_SET0_PI), Requires[HasSSE2];
-def : Pat(v8i16 immAllZerosV), (V_SET0_PI), Requires[HasSSE2];
-def : Pat(v4i32 immAllZerosV), (V_SET0_PI), Requires[HasSSE2];
+def : Pat(v16i8 immAllZerosV), (V_SET0), Requires[HasSSE2];
+def : Pat(v8i16 immAllZerosV), (V_SET0), Requires[HasSSE2];
+def : Pat(v4i32 immAllZerosV), (V_SET0), Requires[HasSSE2];
+def : Pat(v2i64 immAllZerosV), (V_SET0), Requires[HasSSE2];
+def : Pat(v2f64 immAllZerosV), (V_SET0), Requires[HasSSE2];
 
 // 128-bit vector all one's.
 def : Pat(v16i8 immAllOnesV), (V_SETALLONES), Requires[HasSSE2];
@@ -2365,10 +2361,10 @@
 // Zeroing a VR128 then do a MOVS{S|D} to the lower bits.
 def : Pat(v2f64 (vector_shuffle immAllZerosV,
   (v2f64 (scalar_to_vector FR64:$src)), MOVL_shuffle_mask)),
-  (MOVLSD2PDrr (V_SET0_PD), FR64:$src), Requires[HasSSE2];
+  (MOVLSD2PDrr (V_SET0), FR64:$src), Requires[HasSSE2];
 def : Pat(v4f32 (vector_shuffle immAllZerosV,
   (v4f32 (scalar_to_vector FR32:$src)), MOVL_shuffle_mask)),
-  (MOVLSS2PSrr (V_SET0_PS), FR32:$src), Requires[HasSSE2];
+  (MOVLSS2PSrr (V_SET0), FR32:$src), Requires[HasSSE2];
 }
 
 // Splat v2f64 / v2i64



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-06-28 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.126 - 1.127
---
Log message:

Always use xorps to clear XMM registers.

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

 X86InstrSSE.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.126 
llvm/lib/Target/X86/X86InstrSSE.td:1.127
--- llvm/lib/Target/X86/X86InstrSSE.td:1.126Mon Jun 19 19:25:29 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Jun 28 19:34:23 2006
@@ -2116,7 +2116,7 @@
 xorps $dst, $dst,
 [(set VR128:$dst, (v4f32 immAllZerosV))];
 def V_SET0_PD : PDI0x57, MRMInitReg, (ops VR128:$dst),
-xorpd $dst, $dst,
+xorps $dst, $dst,
 [(set VR128:$dst, (v2f64 immAllZerosV))];
 
 def V_SETALLONES : PDI0x76, MRMInitReg, (ops VR128:$dst),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-06-19 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.123 - 1.124
---
Log message:

Minor clean up.

---
Diffs of the changes:  (+3 -6)

 X86InstrSSE.td |9 +++--
 1 files changed, 3 insertions(+), 6 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.123 
llvm/lib/Target/X86/X86InstrSSE.td:1.124
--- llvm/lib/Target/X86/X86InstrSSE.td:1.123Thu Jun 15 03:14:54 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Jun 19 14:25:30 2006
@@ -173,13 +173,10 @@
 class PDIbits8 o, Format F, dag ops, string asm, listdag pattern
   : Io, F, ops, asm, pattern, TB, OpSize, Requires[HasSSE2];
 class PSIi8bits8 o, Format F, dag ops, string asm, listdag pattern
-  : X86Insto, F, Imm8, ops, asm, TB, Requires[HasSSE1] {
-  let Pattern = pattern;
-}
+  : Ii8o, F, ops, asm, pattern, TB, Requires[HasSSE1];
 class PDIi8bits8 o, Format F, dag ops, string asm, listdag pattern
-  : X86Insto, F, Imm8, ops, asm, TB, OpSize, Requires[HasSSE2] {
-  let Pattern = pattern;
-}
+  : Ii8o, F, ops, asm, pattern, TB, OpSize, Requires[HasSSE2];
+
 class S3SIbits8 o, Format F, dag ops, string asm, listdag pattern
   : Io, F, ops, asm, pattern, XS, Requires[HasSSE3];
 class S3DIbits8 o, Format F, dag ops, string asm, listdag pattern



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-06-19 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.124 - 1.125
---
Log message:

Fix some mismatched type constraints


---
Diffs of the changes:  (+6 -6)

 X86InstrSSE.td |   12 ++--
 1 files changed, 6 insertions(+), 6 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.124 
llvm/lib/Target/X86/X86InstrSSE.td:1.125
--- llvm/lib/Target/X86/X86InstrSSE.td:1.124Mon Jun 19 14:25:30 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Jun 19 19:12:37 2006
@@ -2312,21 +2312,21 @@
   Requires[HasSSE2];
 def : Pat(v4i32 (bitconvert (v4f32 VR128:$src))), (v4i32 VR128:$src),
   Requires[HasSSE2];
-def : Pat(v8i16 (bitconvert (v2i64 VR128:$src))), (v4i32 VR128:$src),
+def : Pat(v8i16 (bitconvert (v2i64 VR128:$src))), (v8i16 VR128:$src),
   Requires[HasSSE2];
-def : Pat(v8i16 (bitconvert (v4i32 VR128:$src))), (v4i32 VR128:$src),
+def : Pat(v8i16 (bitconvert (v4i32 VR128:$src))), (v8i16 VR128:$src),
   Requires[HasSSE2];
-def : Pat(v8i16 (bitconvert (v16i8 VR128:$src))), (v4i32 VR128:$src),
+def : Pat(v8i16 (bitconvert (v16i8 VR128:$src))), (v8i16 VR128:$src),
   Requires[HasSSE2];
 def : Pat(v8i16 (bitconvert (v2f64 VR128:$src))), (v8i16 VR128:$src),
   Requires[HasSSE2];
 def : Pat(v8i16 (bitconvert (v4f32 VR128:$src))), (v8i16 VR128:$src),
   Requires[HasSSE2];
-def : Pat(v16i8 (bitconvert (v2i64 VR128:$src))), (v4i32 VR128:$src),
+def : Pat(v16i8 (bitconvert (v2i64 VR128:$src))), (v16i8 VR128:$src),
   Requires[HasSSE2];
-def : Pat(v16i8 (bitconvert (v4i32 VR128:$src))), (v4i32 VR128:$src),
+def : Pat(v16i8 (bitconvert (v4i32 VR128:$src))), (v16i8 VR128:$src),
   Requires[HasSSE2];
-def : Pat(v16i8 (bitconvert (v8i16 VR128:$src))), (v4i32 VR128:$src),
+def : Pat(v16i8 (bitconvert (v8i16 VR128:$src))), (v16i8 VR128:$src),
   Requires[HasSSE2];
 def : Pat(v16i8 (bitconvert (v2f64 VR128:$src))), (v16i8 VR128:$src),
   Requires[HasSSE2];



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-06-19 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.125 - 1.126
---
Log message:

Remove some ugly now-redundant casts.


---
Diffs of the changes:  (+54 -54)

 X86InstrSSE.td |  108 -
 1 files changed, 54 insertions(+), 54 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.125 
llvm/lib/Target/X86/X86InstrSSE.td:1.126
--- llvm/lib/Target/X86/X86InstrSSE.td:1.125Mon Jun 19 19:12:37 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Jun 19 19:25:29 2006
@@ -2265,16 +2265,16 @@
 def : Pat(v2i64 (undef)), (IMPLICIT_DEF_VR128), Requires[HasSSE2];
 
 // 128-bit vector all zero's.
-def : Pat(v16i8 immAllZerosV), (v16i8 (V_SET0_PI)), Requires[HasSSE2];
-def : Pat(v8i16 immAllZerosV), (v8i16 (V_SET0_PI)), Requires[HasSSE2];
-def : Pat(v4i32 immAllZerosV), (v4i32 (V_SET0_PI)), Requires[HasSSE2];
+def : Pat(v16i8 immAllZerosV), (V_SET0_PI), Requires[HasSSE2];
+def : Pat(v8i16 immAllZerosV), (V_SET0_PI), Requires[HasSSE2];
+def : Pat(v4i32 immAllZerosV), (V_SET0_PI), Requires[HasSSE2];
 
 // 128-bit vector all one's.
-def : Pat(v16i8 immAllOnesV), (v16i8 (V_SETALLONES)), Requires[HasSSE2];
-def : Pat(v8i16 immAllOnesV), (v8i16 (V_SETALLONES)), Requires[HasSSE2];
-def : Pat(v4i32 immAllOnesV), (v4i32 (V_SETALLONES)), Requires[HasSSE2];
-def : Pat(v2i64 immAllOnesV), (v2i64 (V_SETALLONES)), Requires[HasSSE2];
-def : Pat(v4f32 immAllOnesV), (v4f32 (V_SETALLONES)), Requires[HasSSE1];
+def : Pat(v16i8 immAllOnesV), (V_SETALLONES), Requires[HasSSE2];
+def : Pat(v8i16 immAllOnesV), (V_SETALLONES), Requires[HasSSE2];
+def : Pat(v4i32 immAllOnesV), (V_SETALLONES), Requires[HasSSE2];
+def : Pat(v2i64 immAllOnesV), (V_SETALLONES), Requires[HasSSE2];
+def : Pat(v4f32 immAllOnesV), (V_SETALLONES), Requires[HasSSE1];
 
 // Store 128-bit integer vector values.
 def : Pat(store (v16i8 VR128:$src), addr:$dst),
@@ -2286,9 +2286,9 @@
 
 // Scalar to v8i16 / v16i8. The source may be a GR32, but only the lower 8 or
 // 16-bits matter.
-def : Pat(v8i16 (X86s2vec GR32:$src)), (v8i16 (MOVDI2PDIrr GR32:$src)),
+def : Pat(v8i16 (X86s2vec GR32:$src)), (MOVDI2PDIrr GR32:$src),
   Requires[HasSSE2];
-def : Pat(v16i8 (X86s2vec GR32:$src)), (v16i8 (MOVDI2PDIrr GR32:$src)),
+def : Pat(v16i8 (X86s2vec GR32:$src)), (MOVDI2PDIrr GR32:$src),
   Requires[HasSSE2];
 
 // bit_convert
@@ -2358,155 +2358,155 @@
 let AddedComplexity = 20 in {
 def : Pat(v8i16 (vector_shuffle immAllZerosV,
   (v8i16 (X86s2vec GR32:$src)), MOVL_shuffle_mask)),
-  (v8i16 (MOVZDI2PDIrr GR32:$src)), Requires[HasSSE2];
+  (MOVZDI2PDIrr GR32:$src), Requires[HasSSE2];
 def : Pat(v16i8 (vector_shuffle immAllZerosV,
   (v16i8 (X86s2vec GR32:$src)), MOVL_shuffle_mask)),
-  (v16i8 (MOVZDI2PDIrr GR32:$src)), Requires[HasSSE2];
+  (MOVZDI2PDIrr GR32:$src), Requires[HasSSE2];
 // Zeroing a VR128 then do a MOVS{S|D} to the lower bits.
 def : Pat(v2f64 (vector_shuffle immAllZerosV,
   (v2f64 (scalar_to_vector FR64:$src)), MOVL_shuffle_mask)),
-  (v2f64 (MOVLSD2PDrr (V_SET0_PD), FR64:$src)), Requires[HasSSE2];
+  (MOVLSD2PDrr (V_SET0_PD), FR64:$src), Requires[HasSSE2];
 def : Pat(v4f32 (vector_shuffle immAllZerosV,
   (v4f32 (scalar_to_vector FR32:$src)), MOVL_shuffle_mask)),
-  (v4f32 (MOVLSS2PSrr (V_SET0_PS), FR32:$src)), Requires[HasSSE2];
+  (MOVLSS2PSrr (V_SET0_PS), FR32:$src), Requires[HasSSE2];
 }
 
 // Splat v2f64 / v2i64
 let AddedComplexity = 10 in {
 def : Pat(vector_shuffle (v2f64 VR128:$src), (undef), SSE_splat_v2_mask:$sm),
-  (v2f64 (UNPCKLPDrr VR128:$src, VR128:$src)),   Requires[HasSSE2];
+  (UNPCKLPDrr VR128:$src, VR128:$src),   Requires[HasSSE2];
 def : Pat(vector_shuffle (v2i64 VR128:$src), (undef), SSE_splat_v2_mask:$sm),
-  (v2i64 (PUNPCKLQDQrr VR128:$src, VR128:$src)), Requires[HasSSE2];
+  (PUNPCKLQDQrr VR128:$src, VR128:$src), Requires[HasSSE2];
 }
 
 // Splat v4f32
 def : Pat(vector_shuffle (v4f32 VR128:$src), (undef), SSE_splat_mask:$sm),
-  (v4f32 (SHUFPSrri VR128:$src, VR128:$src, SSE_splat_mask:$sm)),
+  (SHUFPSrri VR128:$src, VR128:$src, SSE_splat_mask:$sm),
   Requires[HasSSE1];
 
 // Special unary SHUFPSrri case.
 // FIXME: when we want non two-address code, then we should use PSHUFD?
 def : Pat(vector_shuffle (v4f32 VR128:$src1), (undef),
SHUFP_unary_shuffle_mask:$sm),
-   (v4f32 (SHUFPSrri VR128:$src1, VR128:$src1, 
SHUFP_unary_shuffle_mask:$sm)),
+  (SHUFPSrri VR128:$src1, VR128:$src1, SHUFP_unary_shuffle_mask:$sm),
   Requires[HasSSE1];
 // Unary v4f32 shuffle with PSHUF* in order to fold a load.
 def : Pat(vector_shuffle (loadv4f32 addr:$src1), (undef),
SHUFP_unary_shuffle_mask:$sm),
-  (v4f32 (PSHUFDmi addr:$src1, SHUFP_unary_shuffle_mask:$sm)),
+  (PSHUFDmi addr:$src1, 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td X86RegisterInfo.cpp

2006-05-31 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.121 - 1.122
X86RegisterInfo.cpp updated: 1.154 - 1.155
---
Log message:

Rename instructions for consistency sake.


---
Diffs of the changes:  (+102 -92)

 X86InstrSSE.td  |  164 ++--
 X86RegisterInfo.cpp |   30 ++---
 2 files changed, 102 insertions(+), 92 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.121 
llvm/lib/Target/X86/X86InstrSSE.td:1.122
--- llvm/lib/Target/X86/X86InstrSSE.td:1.121Tue May 30 19:51:37 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed May 31 14:00:07 2006
@@ -534,20 +534,20 @@
 Requires[HasSSE2];
 
 // Match intrinsics which expect XMM operand(s).
-def CVTSS2SIrr: SSI0x2D, MRMSrcReg, (ops GR32:$dst, VR128:$src),
-cvtss2si {$src, $dst|$dst, $src},
-[(set GR32:$dst, (int_x86_sse_cvtss2si VR128:$src))];
-def CVTSS2SIrm: SSI0x2D, MRMSrcMem, (ops GR32:$dst, f32mem:$src),
-cvtss2si {$src, $dst|$dst, $src},
-[(set GR32:$dst, (int_x86_sse_cvtss2si
- (loadv4f32 addr:$src)))];
-def CVTSD2SIrr: SDI0x2D, MRMSrcReg, (ops GR32:$dst, VR128:$src),
-cvtsd2si {$src, $dst|$dst, $src},
-[(set GR32:$dst, (int_x86_sse2_cvtsd2si VR128:$src))];
-def CVTSD2SIrm: SDI0x2D, MRMSrcMem, (ops GR32:$dst, f128mem:$src),
-cvtsd2si {$src, $dst|$dst, $src},
-[(set GR32:$dst, (int_x86_sse2_cvtsd2si
- (loadv2f64 addr:$src)))];
+def Int_CVTSS2SIrr: SSI0x2D, MRMSrcReg, (ops GR32:$dst, VR128:$src),
+cvtss2si {$src, $dst|$dst, $src},
+[(set GR32:$dst, (int_x86_sse_cvtss2si VR128:$src))];
+def Int_CVTSS2SIrm: SSI0x2D, MRMSrcMem, (ops GR32:$dst, f32mem:$src),
+cvtss2si {$src, $dst|$dst, $src},
+[(set GR32:$dst, (int_x86_sse_cvtss2si
+  (loadv4f32 addr:$src)))];
+def Int_CVTSD2SIrr: SDI0x2D, MRMSrcReg, (ops GR32:$dst, VR128:$src),
+cvtsd2si {$src, $dst|$dst, $src},
+[(set GR32:$dst, (int_x86_sse2_cvtsd2si VR128:$src))];
+def Int_CVTSD2SIrm: SDI0x2D, MRMSrcMem, (ops GR32:$dst, f128mem:$src),
+cvtsd2si {$src, $dst|$dst, $src},
+[(set GR32:$dst, (int_x86_sse2_cvtsd2si
+  (loadv2f64 addr:$src)))];
 
 // Aliases for intrinsics
 def Int_CVTTSS2SIrr: SSI0x2C, MRMSrcReg, (ops GR32:$dst, VR128:$src),
@@ -884,81 +884,81 @@
 SSE_splat_v2_mask)))];
 
 // SSE2 instructions without OpSize prefix
-def CVTDQ2PSrr : I0x5B, MRMSrcReg, (ops VR128:$dst, VR128:$src),
-   cvtdq2ps {$src, $dst|$dst, $src},
-   [(set VR128:$dst, (int_x86_sse2_cvtdq2ps VR128:$src))],
- TB, Requires[HasSSE2];
-def CVTDQ2PSrm : I0x5B, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
-  cvtdq2ps {$src, $dst|$dst, $src},
-  [(set VR128:$dst, (int_x86_sse2_cvtdq2ps
- (bc_v4i32 (loadv2i64 addr:$src],
- TB, Requires[HasSSE2];
+def Int_CVTDQ2PSrr : I0x5B, MRMSrcReg, (ops VR128:$dst, VR128:$src),
+   cvtdq2ps {$src, $dst|$dst, $src},
+   [(set VR128:$dst, (int_x86_sse2_cvtdq2ps VR128:$src))],
+ TB, Requires[HasSSE2];
+def Int_CVTDQ2PSrm : I0x5B, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
+   cvtdq2ps {$src, $dst|$dst, $src},
+   [(set VR128:$dst, (int_x86_sse2_cvtdq2ps
+  (bc_v4i32 (loadv2i64 addr:$src],
+ TB, Requires[HasSSE2];
 
 // SSE2 instructions with XS prefix
-def CVTDQ2PDrr : I0xE6, MRMSrcReg, (ops VR128:$dst, VR128:$src),
-   cvtdq2pd {$src, $dst|$dst, $src},
-   [(set VR128:$dst, (int_x86_sse2_cvtdq2pd VR128:$src))],
- XS, Requires[HasSSE2];
-def CVTDQ2PDrm : I0xE6, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
-   cvtdq2pd {$src, $dst|$dst, $src},
-   [(set VR128:$dst, (int_x86_sse2_cvtdq2pd
-  (bc_v4i32 (loadv2i64 addr:$src],
- XS, Requires[HasSSE2];
-
-def CVTPS2DQrr : PDI0x5B, MRMSrcReg, (ops VR128:$dst, VR128:$src),
- cvtps2dq {$src, $dst|$dst, $src},
- [(set VR128:$dst, (int_x86_sse2_cvtps2dq VR128:$src))];
-def CVTPS2DQrm : PDI0x5B, MRMSrcMem, (ops VR128:$dst, f128mem:$src),
- cvtps2dq {$src, $dst|$dst, $src},
- [(set VR128:$dst, (int_x86_sse2_cvtps2dq
-(loadv4f32 addr:$src)))];
+def 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-05-30 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.119 - 1.120
---
Log message:

MAXP{D|S} and MINP{D|S} are commutable.


---
Diffs of the changes:  (+24 -18)

 X86InstrSSE.td |   42 --
 1 files changed, 24 insertions(+), 18 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.119 
llvm/lib/Target/X86/X86InstrSSE.td:1.120
--- llvm/lib/Target/X86/X86InstrSSE.td:1.119Tue May 30 18:34:30 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue May 30 18:47:30 2006
@@ -391,20 +391,22 @@
  rcpss {$src, $dst|$dst, $src}, [];
 
 let isTwoAddress = 1 in {
+let isCommutable = 1 in {
 def MAXSSrr : SSI0x5F, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
   maxss {$src2, $dst|$dst, $src2}, [];
-def MAXSSrm : SSI0x5F, MRMSrcMem, (ops FR32:$dst, FR32:$src1, f32mem:$src2),
-  maxss {$src2, $dst|$dst, $src2}, [];
 def MAXSDrr : SDI0x5F, MRMSrcReg, (ops FR64:$dst, FR32:$src1, FR64:$src2),
   maxsd {$src2, $dst|$dst, $src2}, [];
-def MAXSDrm : SDI0x5F, MRMSrcMem, (ops FR64:$dst, FR32:$src1, f64mem:$src2),
-  maxsd {$src2, $dst|$dst, $src2}, [];
 def MINSSrr : SSI0x5D, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
   minss {$src2, $dst|$dst, $src2}, [];
-def MINSSrm : SSI0x5D, MRMSrcMem, (ops FR32:$dst, FR32:$src1, f32mem:$src2),
-  minss {$src2, $dst|$dst, $src2}, [];
 def MINSDrr : SDI0x5D, MRMSrcReg, (ops FR64:$dst, FR32:$src1, FR64:$src2),
   minsd {$src2, $dst|$dst, $src2}, [];
+}
+def MAXSSrm : SSI0x5F, MRMSrcMem, (ops FR32:$dst, FR32:$src1, f32mem:$src2),
+  maxss {$src2, $dst|$dst, $src2}, [];
+def MAXSDrm : SDI0x5F, MRMSrcMem, (ops FR64:$dst, FR32:$src1, f64mem:$src2),
+  maxsd {$src2, $dst|$dst, $src2}, [];
+def MINSSrm : SSI0x5D, MRMSrcMem, (ops FR32:$dst, FR32:$src1, f32mem:$src2),
+  minss {$src2, $dst|$dst, $src2}, [];
 def MINSDrm : SDI0x5D, MRMSrcMem, (ops FR64:$dst, FR32:$src1, f64mem:$src2),
   minsd {$src2, $dst|$dst, $src2}, [];
 }
@@ -469,20 +471,22 @@
int_x86_sse_rcp_ss;
 
 let isTwoAddress = 1 in {
+let isCommutable = 1 in {
 def Int_MAXSSrr : SS_Intrr0x5F, maxss {$src2, $dst|$dst, $src2},
int_x86_sse_max_ss;
-def Int_MAXSSrm : SS_Intrm0x5F, maxss {$src2, $dst|$dst, $src2},
-   int_x86_sse_max_ss;
 def Int_MAXSDrr : SD_Intrr0x5F, maxsd {$src2, $dst|$dst, $src2},
int_x86_sse2_max_sd;
-def Int_MAXSDrm : SD_Intrm0x5F, maxsd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_max_sd;
 def Int_MINSSrr : SS_Intrr0x5D, minss {$src2, $dst|$dst, $src2},
int_x86_sse_min_ss;
-def Int_MINSSrm : SS_Intrm0x5D, minss {$src2, $dst|$dst, $src2},
-   int_x86_sse_min_ss;
 def Int_MINSDrr : SD_Intrr0x5D, minsd {$src2, $dst|$dst, $src2},
int_x86_sse2_min_sd;
+}
+def Int_MAXSSrm : SS_Intrm0x5F, maxss {$src2, $dst|$dst, $src2},
+   int_x86_sse_max_ss;
+def Int_MAXSDrm : SD_Intrm0x5F, maxsd {$src2, $dst|$dst, $src2},
+   int_x86_sse2_max_sd;
+def Int_MINSSrm : SS_Intrm0x5D, minss {$src2, $dst|$dst, $src2},
+   int_x86_sse_min_ss;
 def Int_MINSDrm : SD_Intrm0x5D, minsd {$src2, $dst|$dst, $src2},
int_x86_sse2_min_sd;
 }
@@ -1098,20 +1102,22 @@
  int_x86_sse_rcp_ps;
 
 let isTwoAddress = 1 in {
+let isCommutable = 1 in {
 def MAXPSrr : PS_Intrr0x5F, maxps {$src2, $dst|$dst, $src2},
int_x86_sse_max_ps;
-def MAXPSrm : PS_Intrm0x5F, maxps {$src2, $dst|$dst, $src2},
-   int_x86_sse_max_ps;
 def MAXPDrr : PD_Intrr0x5F, maxpd {$src2, $dst|$dst, $src2},
int_x86_sse2_max_pd;
-def MAXPDrm : PD_Intrm0x5F, maxpd {$src2, $dst|$dst, $src2},
-   int_x86_sse2_max_pd;
 def MINPSrr : PS_Intrr0x5D, minps {$src2, $dst|$dst, $src2},
int_x86_sse_min_ps;
-def MINPSrm : PS_Intrm0x5D, minps {$src2, $dst|$dst, $src2},
-   int_x86_sse_min_ps;
 def MINPDrr : PD_Intrr0x5D, minpd {$src2, $dst|$dst, $src2},
int_x86_sse2_min_pd;
+}
+def MAXPSrm : PS_Intrm0x5F, maxps {$src2, $dst|$dst, $src2},
+   int_x86_sse_max_ps;
+def MAXPDrm : PD_Intrm0x5F, maxpd {$src2, $dst|$dst, $src2},
+   int_x86_sse2_max_pd;
+def MINPSrm : PS_Intrm0x5D, minps {$src2, $dst|$dst, $src2},
+   int_x86_sse_min_ps;
 def MINPDrm : PD_Intrm0x5D, minpd {$src2, $dst|$dst, $src2},
int_x86_sse2_min_pd;
 }



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-05-30 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.120 - 1.121
---
Log message:

Select vector_shuffle v1, undef 2, 3, ?, ? to MOVHLPS.


---
Diffs of the changes:  (+8 -0)

 X86InstrSSE.td |8 
 1 files changed, 8 insertions(+)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.120 
llvm/lib/Target/X86/X86InstrSSE.td:1.121
--- llvm/lib/Target/X86/X86InstrSSE.td:1.120Tue May 30 18:47:30 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue May 30 19:51:37 2006
@@ -2453,6 +2453,14 @@
   MOVHLPS_shuffle_mask)),
   (v4i32 (MOVHLPSrr VR128:$src1, VR128:$src2));
 
+// vector_shuffle v1, undef 2, 3, ?, ? using MOVHLPS
+def : Pat(v4f32 (vector_shuffle VR128:$src1, (undef),
+  UNPCKH_shuffle_mask)),
+  (v4f32 (MOVHLPSrr VR128:$src1, VR128:$src1));
+def : Pat(v4i32 (vector_shuffle VR128:$src1, (undef),
+  UNPCKH_shuffle_mask)),
+  (v4i32 (MOVHLPSrr VR128:$src1, VR128:$src1));
+
 // vector_shuffle v1, (load v2) 4, 5, 2, 3 using MOVLPS
 // vector_shuffle v1, (load v2) 0, 1, 4, 5 using MOVHPS
 def : Pat(v4f32 (vector_shuffle VR128:$src1, (loadv4f32 addr:$src2),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-25 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.113 - 1.114
---
Log message:

Fix a typo.


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

 X86InstrSSE.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.113 
llvm/lib/Target/X86/X86InstrSSE.td:1.114
--- llvm/lib/Target/X86/X86InstrSSE.td:1.113Mon Apr 24 19:50:01 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Apr 25 12:48:41 2006
@@ -1988,7 +1988,7 @@
 UNPCKH_shuffle_mask)))];
 def PUNPCKHQDQrr : PDI0x6D, MRMSrcReg, 
(ops VR128:$dst, VR128:$src1, VR128:$src2),
-   punpckhdq {$src2, $dst|$dst, $src2},
+   punpckhqdq {$src2, $dst|$dst, $src2},
   [(set VR128:$dst,
 (v2i64 (vector_shuffle VR128:$src1, VR128:$src2,
 UNPCKH_shuffle_mask)))];



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-24 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.111 - 1.112
---
Log message:

Added X86 SSE2 intrinsics which can be represented as vector_shuffles. This is
a temporary workaround for the 2-wide vector_shuffle problem (i.e. its mask
would have type v2i32 which is not legal).


---
Diffs of the changes:  (+44 -12)

 X86InstrSSE.td |   56 
 1 files changed, 44 insertions(+), 12 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.111 
llvm/lib/Target/X86/X86InstrSSE.td:1.112
--- llvm/lib/Target/X86/X86InstrSSE.td:1.111Mon Apr 24 16:58:20 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Apr 24 18:34:56 2006
@@ -2212,11 +2212,6 @@
  movq {$src, $dst|$dst, $src},
  [(int_x86_sse2_storel_dq addr:$dst, VR128:$src)];
 
-// FIXME: Temporary workaround since 2-wide shuffle is broken.
-def MOVLQ128rr : PDI0xD6, MRMSrcReg, (ops VR128:$dst, VR128:$src),
- movq {$src, $dst|$dst, $src},
- [(set VR128:$dst, (int_x86_sse2_movl_dq VR128:$src))];
-
 // Move to lower bits of a VR128 and zeroing upper bits.
 // Loading from memory automatically zeroing upper bits.
 let AddedComplexity = 20 in {
@@ -2241,13 +2236,16 @@
   [(set VR128:$dst, (v4i32 (vector_shuffle immAllZerosV,
  (v4i32 (scalar_to_vector (loadi32 
addr:$src))),
 MOVL_shuffle_mask)))];
-def MOVZQI2PQIrr : PDI0x7E, MRMSrcMem, (ops VR128:$dst, VR64:$src),
-   movq {$src, $dst|$dst, $src}, [];
-def MOVZQI2PQIrm : PDI0x7E, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
-   movq {$src, $dst|$dst, $src},
-   [(set VR128:$dst, (bc_v2i64 (vector_shuffle 
immAllZerosV,
- (v2f64 (scalar_to_vector (loadf64 
addr:$src))),
-   MOVL_shuffle_mask)))];
+// Moving from XMM to XMM but still clear upper 64 bits.
+def MOVZQI2PQIrr : I0x7E, MRMSrcReg, (ops VR128:$dst, VR128:$src),
+ movq {$src, $dst|$dst, $src},
+ [(set VR128:$dst, (int_x86_sse2_movl_dq VR128:$src))],
+   XS, Requires[HasSSE2];
+def MOVZQI2PQIrm : I0x7E, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
+ movq {$src, $dst|$dst, $src},
+   [(set VR128:$dst, (int_x86_sse2_movl_dq
+  (bc_v4i32 (loadv2i64 addr:$src],
+   XS, Requires[HasSSE2];
 }
 
 
//===--===//
@@ -2482,8 +2480,42 @@
 def : Pat(v2i64 (vector_shuffle VR128:$src1, VR128:$src2,
   MOVL_shuffle_mask)),
   (MOVLPDrr VR128:$src1, VR128:$src2), Requires[HasSSE2];
+
+// Set lowest element and zero upper elements.
+def : Pat(bc_v2i64 (vector_shuffle immAllZerosV,
+ (v2f64 (scalar_to_vector (loadf64 addr:$src))),
+ MOVL_shuffle_mask)),
+  (MOVZQI2PQIrm addr:$src), Requires[HasSSE2];
 }
 
+// FIXME: Temporary workaround since 2-wide shuffle is broken.
+def : Pat(int_x86_sse2_movs_d  VR128:$src1, VR128:$src2),
+  (MOVLPDrr VR128:$src1, VR128:$src2), Requires[HasSSE2];
+def : Pat(int_x86_sse2_loadh_pd VR128:$src1, addr:$src2),
+  (MOVHPDrm VR128:$src1, addr:$src2), Requires[HasSSE2];
+def : Pat(int_x86_sse2_loadl_pd VR128:$src1, addr:$src2),
+  (MOVLPDrm VR128:$src1, addr:$src2), Requires[HasSSE2];
+def : Pat(int_x86_sse2_shuf_pd VR128:$src1, VR128:$src2, imm:$src3),
+  (SHUFPDrri VR128:$src1, VR128:$src2, imm:$src3), 
Requires[HasSSE2];
+def : Pat(int_x86_sse2_shuf_pd VR128:$src1, (load addr:$src2), imm:$src3),
+  (SHUFPDrmi VR128:$src1, addr:$src2, imm:$src3), Requires[HasSSE2];
+def : Pat(int_x86_sse2_unpckh_pd VR128:$src1, VR128:$src2),
+  (UNPCKHPDrr VR128:$src1, VR128:$src2), Requires[HasSSE2];
+def : Pat(int_x86_sse2_unpckh_pd VR128:$src1, (load addr:$src2)),
+  (UNPCKHPDrm VR128:$src1, addr:$src2), Requires[HasSSE2];
+def : Pat(int_x86_sse2_unpckl_pd VR128:$src1, VR128:$src2),
+  (UNPCKLPDrr VR128:$src1, VR128:$src2), Requires[HasSSE2];
+def : Pat(int_x86_sse2_unpckl_pd VR128:$src1, (load addr:$src2)),
+  (UNPCKLPDrm VR128:$src1, addr:$src2), Requires[HasSSE2];
+def : Pat(int_x86_sse2_punpckh_qdq VR128:$src1, VR128:$src2),
+  (PUNPCKHQDQrr VR128:$src1, VR128:$src2), Requires[HasSSE2];
+def : Pat(int_x86_sse2_punpckh_qdq VR128:$src1, (load addr:$src2)),
+  (PUNPCKHQDQrm VR128:$src1, addr:$src2), Requires[HasSSE2];
+def : Pat(int_x86_sse2_punpckl_qdq VR128:$src1, VR128:$src2),
+  (PUNPCKLQDQrr VR128:$src1, VR128:$src2), Requires[HasSSE2];
+def : Pat(int_x86_sse2_punpckl_qdq VR128:$src1, (load addr:$src2)),
+  (PUNPCKLQDQrm VR128:$src1, addr:$src2), 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-24 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.112 - 1.113
---
Log message:

Explicitly specify result type for def : Pat patterns (if it produces a vector
result). Otherwise tblgen will pick the default (v16i8 for 128-bit vector).


---
Diffs of the changes:  (+47 -45)

 X86InstrSSE.td |   92 +
 1 files changed, 47 insertions(+), 45 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.112 
llvm/lib/Target/X86/X86InstrSSE.td:1.113
--- llvm/lib/Target/X86/X86InstrSSE.td:1.112Mon Apr 24 18:34:56 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Apr 24 19:50:01 2006
@@ -2281,9 +2281,9 @@
 
 // Scalar to v8i16 / v16i8. The source may be a R32, but only the lower 8 or
 // 16-bits matter.
-def : Pat(v8i16 (X86s2vec R32:$src)), (MOVDI2PDIrr R32:$src),
+def : Pat(v8i16 (X86s2vec R32:$src)), (v8i16 (MOVDI2PDIrr R32:$src)),
   Requires[HasSSE2];
-def : Pat(v16i8 (X86s2vec R32:$src)), (MOVDI2PDIrr R32:$src),
+def : Pat(v16i8 (X86s2vec R32:$src)), (v16i8 (MOVDI2PDIrr R32:$src)),
   Requires[HasSSE2];
 
 // bit_convert
@@ -2353,17 +2353,17 @@
 let AddedComplexity = 20 in {
 def : Pat(v8i16 (vector_shuffle immAllZerosV,
   (v8i16 (X86s2vec R32:$src)), MOVL_shuffle_mask)),
-  (MOVZDI2PDIrr R32:$src), Requires[HasSSE2];
+  (v8i16 (MOVZDI2PDIrr R32:$src)), Requires[HasSSE2];
 def : Pat(v16i8 (vector_shuffle immAllZerosV,
   (v16i8 (X86s2vec R32:$src)), MOVL_shuffle_mask)),
-  (MOVZDI2PDIrr R32:$src), Requires[HasSSE2];
+  (v16i8 (MOVZDI2PDIrr R32:$src)), Requires[HasSSE2];
 // Zeroing a VR128 then do a MOVS{S|D} to the lower bits.
 def : Pat(v2f64 (vector_shuffle immAllZerosV,
   (v2f64 (scalar_to_vector FR64:$src)), MOVL_shuffle_mask)),
-  (MOVLSD2PDrr (V_SET0_PD), FR64:$src), Requires[HasSSE2];
+  (v2f64 (MOVLSD2PDrr (V_SET0_PD), FR64:$src)), Requires[HasSSE2];
 def : Pat(v4f32 (vector_shuffle immAllZerosV,
   (v4f32 (scalar_to_vector FR32:$src)), MOVL_shuffle_mask)),
-  (MOVLSS2PSrr (V_SET0_PS), FR32:$src), Requires[HasSSE2];
+  (v4f32 (MOVLSS2PSrr (V_SET0_PS), FR32:$src)), Requires[HasSSE2];
 }
 
 // Splat v2f64 / v2i64
@@ -2404,115 +2404,117 @@
 let AddedComplexity = 10 in {
 def : Pat(v4f32 (vector_shuffle VR128:$src, (undef),
   UNPCKL_v_undef_shuffle_mask)),
-  (UNPCKLPSrr VR128:$src, VR128:$src), Requires[HasSSE2];
+  (v4f32 (UNPCKLPSrr VR128:$src, VR128:$src)), Requires[HasSSE2];
 def : Pat(v16i8 (vector_shuffle VR128:$src, (undef),
   UNPCKL_v_undef_shuffle_mask)),
-  (PUNPCKLBWrr VR128:$src, VR128:$src), Requires[HasSSE2];
+  (v16i8 (PUNPCKLBWrr VR128:$src, VR128:$src)), Requires[HasSSE2];
 def : Pat(v8i16 (vector_shuffle VR128:$src, (undef),
   UNPCKL_v_undef_shuffle_mask)),
-  (PUNPCKLWDrr VR128:$src, VR128:$src), Requires[HasSSE2];
+  (v8i16 (PUNPCKLWDrr VR128:$src, VR128:$src)), Requires[HasSSE2];
 def : Pat(v4i32 (vector_shuffle VR128:$src, (undef),
   UNPCKL_v_undef_shuffle_mask)),
-  (PUNPCKLDQrr VR128:$src, VR128:$src), Requires[HasSSE1];
+  (v4i32 (PUNPCKLDQrr VR128:$src, VR128:$src)), Requires[HasSSE1];
 }
 
 let AddedComplexity = 20 in {
 // vector_shuffle v1, undef 1, 1, 3, 3
 def : Pat(v4i32 (vector_shuffle VR128:$src, (undef),
   MOVSHDUP_shuffle_mask)),
-  (MOVSHDUPrr VR128:$src), Requires[HasSSE3];
+  (v4i32 (MOVSHDUPrr VR128:$src)), Requires[HasSSE3];
 def : Pat(v4i32 (vector_shuffle (bc_v4i32 (loadv2i64 addr:$src)), (undef),
   MOVSHDUP_shuffle_mask)),
-  (MOVSHDUPrm addr:$src), Requires[HasSSE3];
+  (v4i32 (MOVSHDUPrm addr:$src)), Requires[HasSSE3];
 
 // vector_shuffle v1, undef 0, 0, 2, 2
 def : Pat(v4i32 (vector_shuffle VR128:$src, (undef),
   MOVSLDUP_shuffle_mask)),
-  (MOVSLDUPrr VR128:$src), Requires[HasSSE3];
+  (v4i32 (MOVSLDUPrr VR128:$src)), Requires[HasSSE3];
 def : Pat(v4i32 (vector_shuffle (bc_v4i32 (loadv2i64 addr:$src)), (undef),
   MOVSLDUP_shuffle_mask)),
-  (MOVSLDUPrm addr:$src), Requires[HasSSE3];
+  (v4i32 (MOVSLDUPrm addr:$src)), Requires[HasSSE3];
 }
 
 let AddedComplexity = 20 in {
 // vector_shuffle v1, v2 0, 1, 4, 5 using MOVLHPS
 def : Pat(v4i32 (vector_shuffle VR128:$src1, VR128:$src2,
   MOVHP_shuffle_mask)),
-  (MOVLHPSrr VR128:$src1, VR128:$src2);
+  (v4i32 (MOVLHPSrr VR128:$src1, VR128:$src2));
 
 // vector_shuffle v1, v2 6, 7, 2, 3 using MOVHLPS
 def : Pat(v4i32 (vector_shuffle VR128:$src1, VR128:$src2,
   MOVHLPS_shuffle_mask)),
-  (MOVHLPSrr VR128:$src1, VR128:$src2);
+  (v4i32 (MOVHLPSrr VR128:$src1, VR128:$src2));
 
 // vector_shuffle v1, (load v2) 4, 5, 2, 3 using MOVLPS
 // 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-19 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.105 - 1.106
---
Log message:

- More mov{h|l}ps patterns.
- Increase cost (complexity) of patterns which match mov{h|l}ps ops. These
  are preferred over shufps in most cases.


---
Diffs of the changes:  (+25 -2)

 X86InstrSSE.td |   27 +--
 1 files changed, 25 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.105 
llvm/lib/Target/X86/X86InstrSSE.td:1.106
--- llvm/lib/Target/X86/X86InstrSSE.td:1.105Tue Apr 18 16:59:43 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Apr 19 13:11:52 2006
@@ -782,12 +782,13 @@
[(int_x86_sse2_storeu_pd addr:$dst, VR128:$src)];
 
 let isTwoAddress = 1 in {
+let AddedCost = 10 in {
 def MOVLPSrm : PSI0x12, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
movlps {$src2, $dst|$dst, $src2},
[(set VR128:$dst, 
  (v4f32 (vector_shuffle VR128:$src1,
  (bc_v4f32 (v2f64 (scalar_to_vector (loadf64 
addr:$src2,
- MOVLP_shuffle_mask)))];
+ MOVLP_shuffle_mask)))], Cost20;
 def MOVLPDrm : PDI0x12, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
movlpd {$src2, $dst|$dst, $src2},
[(set VR128:$dst, 
@@ -799,13 +800,14 @@
[(set VR128:$dst, 
  (v4f32 (vector_shuffle VR128:$src1,
  (bc_v4f32 (v2f64 (scalar_to_vector (loadf64 
addr:$src2,
- MOVHP_shuffle_mask)))];
+ MOVHP_shuffle_mask)))], Cost20;
 def MOVHPDrm : PDI0x16, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
movhpd {$src2, $dst|$dst, $src2},
[(set VR128:$dst, 
  (v2f64 (vector_shuffle VR128:$src1,
  (scalar_to_vector (loadf64 addr:$src2)),
  MOVHP_shuffle_mask)))];
+} // AddedCost
 }
 
 def MOVLPSmr : PSI0x13, MRMDestMem, (ops f64mem:$dst, VR128:$src),
@@ -834,6 +836,7 @@
  addr:$dst)];
 
 let isTwoAddress = 1 in {
+let AddedCost = 10 in {
 def MOVLHPSrr : PSI0x16, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
 movlhps {$src2, $dst|$dst, $src2},
 [(set VR128:$dst,
@@ -845,6 +848,7 @@
 [(set VR128:$dst,
   (v4f32 (vector_shuffle VR128:$src1, VR128:$src2,
   MOVHLPS_shuffle_mask)))];
+} // AddedCost
 }
 
 def MOVSHDUPrr : S3SI0x16, MRMSrcReg, (ops VR128:$dst, VR128:$src),
@@ -2349,6 +2353,22 @@
 def : Pat(v16i8 (X86zexts2vec R8:$src)),
  (MOVLDI2PDIrr (V_SET0_PI), (MOVZX32rr8 R8:$src)), 
Requires[HasSSE2];
 
+// MOVLP{S|D}rm / MOVHP{S|D}rm.
+let AddedCost = 10 in {
+def : Pat(v4f32 (vector_shuffle VR128:$src1, (loadv4f32 addr:$src2),
+  MOVLP_shuffle_mask)),
+  (MOVLPSrm VR128:$src1, addr:$src2), Requires[HasSSE1];
+def : Pat(v2f64 (vector_shuffle VR128:$src1, (loadv2f64 addr:$src2),
+  MOVLP_shuffle_mask)),
+  (MOVLPDrm VR128:$src1, addr:$src2), Requires[HasSSE2];
+def : Pat(v4f32 (vector_shuffle VR128:$src1, (loadv4f32 addr:$src2),
+  MOVHP_shuffle_mask)),
+  (MOVHPSrm VR128:$src1, addr:$src2), Requires[HasSSE1];
+def : Pat(v2f64 (vector_shuffle VR128:$src1, (loadv2f64 addr:$src2),
+  MOVHP_shuffle_mask)),
+  (MOVHPDrm VR128:$src1, addr:$src2), Requires[HasSSE2];
+}
+
 // Splat v2f64 / v2i64
 def : Pat(vector_shuffle (v2f64 VR128:$src), (undef), SSE_splat_v2_mask:$sm),
   (v2f64 (UNPCKLPDrr VR128:$src, VR128:$src)),   Requires[HasSSE2];
@@ -2415,6 +2435,9 @@
 def : Pat(v4i32 (vector_shuffle VR128:$src1, VR128:$src2,
   MOVS_shuffle_mask)),
   (MOVLPSrr VR128:$src1, VR128:$src2);
+def : Pat(v2i64 (vector_shuffle VR128:$src1, VR128:$src2,
+  MOVS_shuffle_mask)),
+  (MOVLPDrr VR128:$src1, VR128:$src2);
 
 // 128-bit logical shifts
 def : Pat(int_x86_sse2_psll_dq VR128:$src1, imm:$src2),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-19 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.106 - 1.107
---
Log message:

More mov{h|l}p{d|s} patterns.


---
Diffs of the changes:  (+26 -21)

 X86InstrSSE.td |   47 ++-
 1 files changed, 26 insertions(+), 21 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.106 
llvm/lib/Target/X86/X86InstrSSE.td:1.107
--- llvm/lib/Target/X86/X86InstrSSE.td:1.106Wed Apr 19 13:11:52 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Apr 19 13:20:17 2006
@@ -788,7 +788,7 @@
[(set VR128:$dst, 
  (v4f32 (vector_shuffle VR128:$src1,
  (bc_v4f32 (v2f64 (scalar_to_vector (loadf64 
addr:$src2,
- MOVLP_shuffle_mask)))], Cost20;
+ MOVLP_shuffle_mask)))];
 def MOVLPDrm : PDI0x12, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
movlpd {$src2, $dst|$dst, $src2},
[(set VR128:$dst, 
@@ -800,7 +800,7 @@
[(set VR128:$dst, 
  (v4f32 (vector_shuffle VR128:$src1,
  (bc_v4f32 (v2f64 (scalar_to_vector (loadf64 
addr:$src2,
- MOVHP_shuffle_mask)))], Cost20;
+ MOVHP_shuffle_mask)))];
 def MOVHPDrm : PDI0x16, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
movhpd {$src2, $dst|$dst, $src2},
[(set VR128:$dst, 
@@ -2353,22 +2353,6 @@
 def : Pat(v16i8 (X86zexts2vec R8:$src)),
  (MOVLDI2PDIrr (V_SET0_PI), (MOVZX32rr8 R8:$src)), 
Requires[HasSSE2];
 
-// MOVLP{S|D}rm / MOVHP{S|D}rm.
-let AddedCost = 10 in {
-def : Pat(v4f32 (vector_shuffle VR128:$src1, (loadv4f32 addr:$src2),
-  MOVLP_shuffle_mask)),
-  (MOVLPSrm VR128:$src1, addr:$src2), Requires[HasSSE1];
-def : Pat(v2f64 (vector_shuffle VR128:$src1, (loadv2f64 addr:$src2),
-  MOVLP_shuffle_mask)),
-  (MOVLPDrm VR128:$src1, addr:$src2), Requires[HasSSE2];
-def : Pat(v4f32 (vector_shuffle VR128:$src1, (loadv4f32 addr:$src2),
-  MOVHP_shuffle_mask)),
-  (MOVHPSrm VR128:$src1, addr:$src2), Requires[HasSSE1];
-def : Pat(v2f64 (vector_shuffle VR128:$src1, (loadv2f64 addr:$src2),
-  MOVHP_shuffle_mask)),
-  (MOVHPDrm VR128:$src1, addr:$src2), Requires[HasSSE2];
-}
-
 // Splat v2f64 / v2i64
 def : Pat(vector_shuffle (v2f64 VR128:$src), (undef), SSE_splat_v2_mask:$sm),
   (v2f64 (UNPCKLPDrr VR128:$src, VR128:$src)),   Requires[HasSSE2];
@@ -2431,13 +2415,34 @@
   MOVSLDUP_shuffle_mask)),
   (MOVSLDUPrm addr:$src), Requires[HasSSE3];
 
-// vector_shuffle v1, v2 4, 1, 2, 3
+// vector_shuffle v1, v2 4, 1, 2, 3 using MOV{H|L}P{S|D}
+let AddedCost = 10 in {
+def : Pat(v4f32 (vector_shuffle VR128:$src1, (loadv4f32 addr:$src2),
+  MOVLP_shuffle_mask)),
+  (MOVLPSrm VR128:$src1, addr:$src2), Requires[HasSSE1];
+def : Pat(v2f64 (vector_shuffle VR128:$src1, (loadv2f64 addr:$src2),
+  MOVLP_shuffle_mask)),
+  (MOVLPDrm VR128:$src1, addr:$src2), Requires[HasSSE2];
+def : Pat(v4f32 (vector_shuffle VR128:$src1, (loadv4f32 addr:$src2),
+  MOVHP_shuffle_mask)),
+  (MOVHPSrm VR128:$src1, addr:$src2), Requires[HasSSE1];
+def : Pat(v2f64 (vector_shuffle VR128:$src1, (loadv2f64 addr:$src2),
+  MOVHP_shuffle_mask)),
+  (MOVHPDrm VR128:$src1, addr:$src2), Requires[HasSSE2];
+
 def : Pat(v4i32 (vector_shuffle VR128:$src1, VR128:$src2,
   MOVS_shuffle_mask)),
-  (MOVLPSrr VR128:$src1, VR128:$src2);
+  (MOVLPSrr VR128:$src1, VR128:$src2), Requires[HasSSE2];
+def : Pat(v4i32 (vector_shuffle VR128:$src1, (bc_v4i32 (loadv2i64 
addr:$src2)),
+  MOVLP_shuffle_mask)),
+  (MOVLPSrm VR128:$src1, addr:$src2), Requires[HasSSE2];
 def : Pat(v2i64 (vector_shuffle VR128:$src1, VR128:$src2,
   MOVS_shuffle_mask)),
-  (MOVLPDrr VR128:$src1, VR128:$src2);
+  (MOVLPDrr VR128:$src1, VR128:$src2), Requires[HasSSE2];
+def : Pat(v2i64 (vector_shuffle VR128:$src1, (loadv2i64 addr:$src2),
+  MOVHP_shuffle_mask)),
+  (MOVHPDrm VR128:$src1, addr:$src2), Requires[HasSSE2];
+}
 
 // 128-bit logical shifts
 def : Pat(int_x86_sse2_psll_dq VR128:$src1, imm:$src2),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-19 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.107 - 1.108
---
Log message:

- Renamed AddedCost to AddedComplexity.
- Added more movhlps and movlhps patterns.


---
Diffs of the changes:  (+18 -11)

 X86InstrSSE.td |   29 ++---
 1 files changed, 18 insertions(+), 11 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.107 
llvm/lib/Target/X86/X86InstrSSE.td:1.108
--- llvm/lib/Target/X86/X86InstrSSE.td:1.107Wed Apr 19 13:20:17 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Apr 19 15:37:34 2006
@@ -92,10 +92,6 @@
   return X86::isSplatMask(N);
 }];
 
-def MOVLHPS_shuffle_mask : PatLeaf(build_vector), [{
-  return X86::isMOVLHPSMask(N);
-}];
-
 def MOVHLPS_shuffle_mask : PatLeaf(build_vector), [{
   return X86::isMOVHLPSMask(N);
 }];
@@ -782,7 +778,7 @@
[(int_x86_sse2_storeu_pd addr:$dst, VR128:$src)];
 
 let isTwoAddress = 1 in {
-let AddedCost = 10 in {
+let AddedComplexity = 10 in {
 def MOVLPSrm : PSI0x12, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
movlps {$src2, $dst|$dst, $src2},
[(set VR128:$dst, 
@@ -807,7 +803,7 @@
  (v2f64 (vector_shuffle VR128:$src1,
  (scalar_to_vector (loadf64 addr:$src2)),
  MOVHP_shuffle_mask)))];
-} // AddedCost
+} // AddedComplexity
 }
 
 def MOVLPSmr : PSI0x13, MRMDestMem, (ops f64mem:$dst, VR128:$src),
@@ -836,19 +832,19 @@
  addr:$dst)];
 
 let isTwoAddress = 1 in {
-let AddedCost = 10 in {
+let AddedComplexity = 10 in {
 def MOVLHPSrr : PSI0x16, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
 movlhps {$src2, $dst|$dst, $src2},
 [(set VR128:$dst,
   (v4f32 (vector_shuffle VR128:$src1, VR128:$src2,
-  MOVLHPS_shuffle_mask)))];
+  MOVHP_shuffle_mask)))];
 
 def MOVHLPSrr : PSI0x12, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
 movhlps {$src2, $dst|$dst, $src2},
 [(set VR128:$dst,
   (v4f32 (vector_shuffle VR128:$src1, VR128:$src2,
   MOVHLPS_shuffle_mask)))];
-} // AddedCost
+} // AddedComplexity
 }
 
 def MOVSHDUPrr : S3SI0x16, MRMSrcReg, (ops VR128:$dst, VR128:$src),
@@ -2415,8 +2411,19 @@
   MOVSLDUP_shuffle_mask)),
   (MOVSLDUPrm addr:$src), Requires[HasSSE3];
 
-// vector_shuffle v1, v2 4, 1, 2, 3 using MOV{H|L}P{S|D}
-let AddedCost = 10 in {
+let AddedComplexity = 10 in {
+// vector_shuffle v1, v2 0, 1, 4, 5 using MOVLHPS
+def : Pat(v4i32 (vector_shuffle VR128:$src1, VR128:$src2,
+  MOVHP_shuffle_mask)),
+  (MOVLHPSrr VR128:$src1, VR128:$src2);
+
+// vector_shuffle v1, v2 6, 7, 2, 3 using MOVHLPS
+def : Pat(v4i32 (vector_shuffle VR128:$src1, VR128:$src2,
+  MOVHLPS_shuffle_mask)),
+  (MOVHLPSrr VR128:$src1, VR128:$src2);
+
+// vector_shuffle v1, (load v2) 4, 5, 2, 3 using MOVLPS
+// vector_shuffle v1, (load v2) 0, 1, 4, 5 using MOVHPS
 def : Pat(v4f32 (vector_shuffle VR128:$src1, (loadv4f32 addr:$src2),
   MOVLP_shuffle_mask)),
   (MOVLPSrm VR128:$src1, addr:$src2), Requires[HasSSE1];



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-18 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.100 - 1.101
---
Log message:

Fixed an encoding bug: movd from XMM to R32.

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

 X86InstrSSE.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.100 
llvm/lib/Target/X86/X86InstrSSE.td:1.101
--- llvm/lib/Target/X86/X86InstrSSE.td:1.100Mon Apr 17 17:45:49 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Apr 18 13:19:00 2006
@@ -2179,7 +2179,7 @@
  movsd {$src, $dst|$dst, $src},
  [(set FR64:$dst, (vector_extract (v2f64 VR128:$src),
(i32 0)))];
-def MOVPDI2DIrr  : PDI0x7E, MRMSrcReg, (ops R32:$dst, VR128:$src),
+def MOVPDI2DIrr  : PDI0x7E, MRMDestReg, (ops R32:$dst, VR128:$src),
movd {$src, $dst|$dst, $src},
[(set R32:$dst, (vector_extract (v4i32 VR128:$src),
 (i32 0)))];



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-18 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.101 - 1.102
---
Log message:

Left a pattern out

---
Diffs of the changes:  (+4 -0)

 X86InstrSSE.td |4 
 1 files changed, 4 insertions(+)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.101 
llvm/lib/Target/X86/X86InstrSSE.td:1.102
--- llvm/lib/Target/X86/X86InstrSSE.td:1.101Tue Apr 18 13:19:00 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Apr 18 16:29:08 2006
@@ -2179,6 +2179,10 @@
  movsd {$src, $dst|$dst, $src},
  [(set FR64:$dst, (vector_extract (v2f64 VR128:$src),
(i32 0)))];
+def MOVPD2SDmr : SDI0x11, MRMDestMem, (ops f64mem:$dst, VR128:$src),
+ movsd {$src, $dst|$dst, $src},
+ [(store (f64 (vector_extract (v2f64 VR128:$src),
+   (i32 0))), addr:$dst)];
 def MOVPDI2DIrr  : PDI0x7E, MRMDestReg, (ops R32:$dst, VR128:$src),
movd {$src, $dst|$dst, $src},
[(set R32:$dst, (vector_extract (v4i32 VR128:$src),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-18 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.102 - 1.103
---
Log message:

Name change for clarity sake

---
Diffs of the changes:  (+4 -4)

 X86InstrSSE.td |8 
 1 files changed, 4 insertions(+), 4 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.102 
llvm/lib/Target/X86/X86InstrSSE.td:1.103
--- llvm/lib/Target/X86/X86InstrSSE.td:1.102Tue Apr 18 16:29:08 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Apr 18 16:29:50 2006
@@ -1196,22 +1196,22 @@
 }
 
 let isTwoAddress = 1 in {
-def CMPPSrr : PSIi80xC2, MRMSrcReg, 
+def CMPPSrri : PSIi80xC2, MRMSrcReg, 
 (ops VR128:$dst, VR128:$src1, VR128:$src, SSECC:$cc),
 cmp${cc}ps {$src, $dst|$dst, $src},
 [(set VR128:$dst, (int_x86_sse_cmp_ps VR128:$src1,
VR128:$src, imm:$cc))];
-def CMPPSrm : PSIi80xC2, MRMSrcMem, 
+def CMPPSrmi : PSIi80xC2, MRMSrcMem, 
 (ops VR128:$dst, VR128:$src1, f128mem:$src, SSECC:$cc),
 cmp${cc}ps {$src, $dst|$dst, $src},
 [(set VR128:$dst, (int_x86_sse_cmp_ps VR128:$src1,
(load addr:$src), imm:$cc))];
-def CMPPDrr : PDIi80xC2, MRMSrcReg, 
+def CMPPDrri : PDIi80xC2, MRMSrcReg, 
 (ops VR128:$dst, VR128:$src1, VR128:$src, SSECC:$cc),
 cmp${cc}pd {$src, $dst|$dst, $src},
 [(set VR128:$dst, (int_x86_sse2_cmp_pd VR128:$src1,
VR128:$src, imm:$cc))];
-def CMPPDrm : PDIi80xC2, MRMSrcMem, 
+def CMPPDrmi : PDIi80xC2, MRMSrcMem, 
 (ops VR128:$dst, VR128:$src1, f128mem:$src, SSECC:$cc),
 cmp${cc}pd {$src, $dst|$dst, $src},
 [(set VR128:$dst, (int_x86_sse2_cmp_pd VR128:$src1,



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-18 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.103 - 1.104
---
Log message:

Name change for clarity sake

---
Diffs of the changes:  (+9 -9)

 X86InstrSSE.td |   18 +-
 1 files changed, 9 insertions(+), 9 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.103 
llvm/lib/Target/X86/X86InstrSSE.td:1.104
--- llvm/lib/Target/X86/X86InstrSSE.td:1.103Tue Apr 18 16:29:50 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Apr 18 16:55:35 2006
@@ -1220,25 +1220,25 @@
 
 // Shuffle and unpack instructions
 let isTwoAddress = 1 in {
-def SHUFPSrr : PSIi80xC6, MRMSrcReg, 
+def SHUFPSrri : PSIi80xC6, MRMSrcReg, 
  (ops VR128:$dst, VR128:$src1, VR128:$src2, 
i32i8imm:$src3),
  shufps {$src3, $src2, $dst|$dst, $src2, $src3},
  [(set VR128:$dst, (v4f32 (vector_shuffle
VR128:$src1, VR128:$src2,
SHUFP_shuffle_mask:$src3)))];
-def SHUFPSrm : PSIi80xC6, MRMSrcMem, 
+def SHUFPSrmi : PSIi80xC6, MRMSrcMem, 
(ops VR128:$dst, VR128:$src1, f128mem:$src2, 
i32i8imm:$src3),
  shufps {$src3, $src2, $dst|$dst, $src2, $src3},
  [(set VR128:$dst, (v4f32 (vector_shuffle
VR128:$src1, (load addr:$src2),
SHUFP_shuffle_mask:$src3)))];
-def SHUFPDrr : PDIi80xC6, MRMSrcReg, 
+def SHUFPDrri : PDIi80xC6, MRMSrcReg, 
  (ops VR128:$dst, VR128:$src1, VR128:$src2, i8imm:$src3),
  shufpd {$src3, $src2, $dst|$dst, $src2, $src3},
  [(set VR128:$dst, (v2f64 (vector_shuffle
VR128:$src1, VR128:$src2,
SHUFP_shuffle_mask:$src3)))];
-def SHUFPDrm : PDIi80xC6, MRMSrcMem, 
+def SHUFPDrmi : PDIi80xC6, MRMSrcMem, 
  (ops VR128:$dst, VR128:$src1, f128mem:$src2, i8imm:$src3),
  shufpd {$src3, $src2, $dst|$dst, $src2, $src3},
  [(set VR128:$dst, (v2f64 (vector_shuffle
@@ -2364,14 +2364,14 @@
 
 // Splat v4f32
 def : Pat(vector_shuffle (v4f32 VR128:$src), (undef), SSE_splat_mask:$sm),
-  (v4f32 (SHUFPSrr VR128:$src, VR128:$src, SSE_splat_mask:$sm)),
+  (v4f32 (SHUFPSrri VR128:$src, VR128:$src, SSE_splat_mask:$sm)),
   Requires[HasSSE1];
 
-// Special unary SHUFPSrr case.
+// Special unary SHUFPSrri case.
 // FIXME: when we want non two-address code, then we should use PSHUFD?
 def : Pat(vector_shuffle (v4f32 VR128:$src1), (undef),
SHUFP_unary_shuffle_mask:$sm),
-   (v4f32 (SHUFPSrr VR128:$src1, VR128:$src1, 
SHUFP_unary_shuffle_mask:$sm)),
+   (v4f32 (SHUFPSrri VR128:$src1, VR128:$src1, 
SHUFP_unary_shuffle_mask:$sm)),
   Requires[HasSSE1];
 // Unary v4f32 shuffle with PSHUF* in order to fold a load.
 def : Pat(vector_shuffle (loadv4f32 addr:$src1), (undef),
@@ -2381,11 +2381,11 @@
 // Special binary v4i32 shuffle cases with SHUFPS.
 def : Pat(vector_shuffle (v4i32 VR128:$src1), (v4i32 VR128:$src2),
PSHUFD_binary_shuffle_mask:$sm),
-  (v4i32 (SHUFPSrr VR128:$src1, VR128:$src2,
+  (v4i32 (SHUFPSrri VR128:$src1, VR128:$src2,
   PSHUFD_binary_shuffle_mask:$sm)), Requires[HasSSE2];
 def : Pat(vector_shuffle (v4i32 VR128:$src1),
(bc_v4i32 (loadv2i64 addr:$src2)), PSHUFD_binary_shuffle_mask:$sm),
-  (v4i32 (SHUFPSrm VR128:$src1, addr:$src2,
+  (v4i32 (SHUFPSrmi VR128:$src1, addr:$src2,
   PSHUFD_binary_shuffle_mask:$sm)), Requires[HasSSE2];
 
 // vector_shuffle v1, undef, 0, 0, 1, 1, ...



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-17 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.98 - 1.99
---
Log message:

Encoding bug

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

 X86InstrSSE.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.98 
llvm/lib/Target/X86/X86InstrSSE.td:1.99
--- llvm/lib/Target/X86/X86InstrSSE.td:1.98 Mon Apr 17 13:05:01 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Apr 17 16:33:57 2006
@@ -2179,7 +2179,7 @@
  movsd {$src, $dst|$dst, $src},
  [(set FR64:$dst, (vector_extract (v2f64 VR128:$src),
(i32 0)))];
-def MOVPDI2DIrr  : PDI0x6E, MRMSrcReg, (ops R32:$dst, VR128:$src),
+def MOVPDI2DIrr  : PDI0x7E, MRMSrcReg, (ops R32:$dst, VR128:$src),
movd {$src, $dst|$dst, $src},
[(set R32:$dst, (vector_extract (v4i32 VR128:$src),
 (i32 0)))];



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-16 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.96 - 1.97
---
Log message:

movduprm, movshduprm bugs

---
Diffs of the changes:  (+5 -4)

 X86InstrSSE.td |9 +
 1 files changed, 5 insertions(+), 4 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.96 
llvm/lib/Target/X86/X86InstrSSE.td:1.97
--- llvm/lib/Target/X86/X86InstrSSE.td:1.96 Sun Apr 16 02:02:22 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sun Apr 16 13:11:28 2006
@@ -852,7 +852,7 @@
   [(set VR128:$dst, (v4f32 (vector_shuffle
 VR128:$src, (undef),
 MOVSHDUP_shuffle_mask)))];
-def MOVSHDUPrm : S3SI0x16, MRMSrcReg, (ops VR128:$dst, f128mem:$src),
+def MOVSHDUPrm : S3SI0x16, MRMSrcMem, (ops VR128:$dst, f128mem:$src),
   movshdup {$src, $dst|$dst, $src},
   [(set VR128:$dst, (v4f32 (vector_shuffle
 (loadv4f32 addr:$src), (undef),
@@ -863,7 +863,7 @@
   [(set VR128:$dst, (v4f32 (vector_shuffle
 VR128:$src, (undef),
 MOVSLDUP_shuffle_mask)))];
-def MOVSLDUPrm : S3SI0x12, MRMSrcReg, (ops VR128:$dst, f128mem:$src),
+def MOVSLDUPrm : S3SI0x12, MRMSrcMem, (ops VR128:$dst, f128mem:$src),
   movsldup {$src, $dst|$dst, $src},
   [(set VR128:$dst, (v4f32 (vector_shuffle
 (loadv4f32 addr:$src), (undef),
@@ -874,10 +874,11 @@
   [(set VR128:$dst, (v2f64 (vector_shuffle
 VR128:$src, (undef),
 SSE_splat_v2_mask)))];
-def MOVDDUPrm : S3DI0x12, MRMSrcReg, (ops VR128:$dst, f64mem:$src),
+def MOVDDUPrm : S3DI0x12, MRMSrcMem, (ops VR128:$dst, f64mem:$src),
   movddup {$src, $dst|$dst, $src},
   [(set VR128:$dst, (v2f64 (vector_shuffle
-(loadv2f64 addr:$src), (undef),
+ (scalar_to_vector (loadf64 
addr:$src)),
+ (undef),
 SSE_splat_v2_mask)))];
 
 // SSE2 instructions without OpSize prefix



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-15 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.93 - 1.94
---
Log message:

pslldrm, psrawrm, etc. encoding bug

---
Diffs of the changes:  (+8 -8)

 X86InstrSSE.td |   16 
 1 files changed, 8 insertions(+), 8 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.93 
llvm/lib/Target/X86/X86InstrSSE.td:1.94
--- llvm/lib/Target/X86/X86InstrSSE.td:1.93 Sat Apr 15 00:52:42 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Apr 15 00:59:08 2006
@@ -1600,7 +1600,7 @@
 psllw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
VR128:$src2))];
-def PSLLWrm : PDIi80xF1, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSLLWrm : PDIi80xF1, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
 psllw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
(bc_v4i32 (loadv2i64 addr:$src2];
@@ -1612,7 +1612,7 @@
 pslld {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
VR128:$src2))];
-def PSLLDrm : PDIi80xF2, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSLLDrm : PDIi80xF2, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
 pslld {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
(bc_v4i32 (loadv2i64 addr:$src2];
@@ -1624,7 +1624,7 @@
 psllq {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psll_q VR128:$src1,
VR128:$src2))];
-def PSLLQrm : PDIi80xF3, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSLLQrm : PDIi80xF3, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
 psllq {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psll_q VR128:$src1,
(bc_v4i32 (loadv2i64 addr:$src2];
@@ -1639,7 +1639,7 @@
 psrlw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psrl_w VR128:$src1,
VR128:$src2))];
-def PSRLWrm : PDIi80xD1, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSRLWrm : PDIi80xD1, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
 psrlw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psrl_w VR128:$src1,
(bc_v4i32 (loadv2i64 addr:$src2];
@@ -1651,7 +1651,7 @@
 psrld {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psrl_d VR128:$src1,
VR128:$src2))];
-def PSRLDrm : PDIi80xD2, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSRLDrm : PDIi80xD2, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
 psrld {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psrl_d VR128:$src1,
(bc_v4i32 (loadv2i64 addr:$src2];
@@ -1663,7 +1663,7 @@
 psrlq {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psrl_q VR128:$src1,
VR128:$src2))];
-def PSRLQrm : PDIi80xD3, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSRLQrm : PDIi80xD3, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
 psrlq {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psrl_q VR128:$src1,
(bc_v4i32 (loadv2i64 addr:$src2];
@@ -1678,7 +1678,7 @@
 psraw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psra_w VR128:$src1,
VR128:$src2))];
-def PSRAWrm : PDIi80xE1, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSRAWrm : PDIi80xE1, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
 psraw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psra_w VR128:$src1,
(bc_v4i32 (loadv2i64 addr:$src2];
@@ -1690,7 +1690,7 @@
 psrad {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psra_d VR128:$src1,
VR128:$src2))];
-def PSRADrm : PDIi80xE2, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSRADrm : PDIi80xE2, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
 psrad {$src2, $dst|$dst, 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-15 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.94 - 1.95
---
Log message:

More encoding bugs

---
Diffs of the changes:  (+8 -8)

 X86InstrSSE.td |   16 
 1 files changed, 8 insertions(+), 8 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.94 
llvm/lib/Target/X86/X86InstrSSE.td:1.95
--- llvm/lib/Target/X86/X86InstrSSE.td:1.94 Sat Apr 15 00:59:08 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Apr 15 01:10:09 2006
@@ -1745,7 +1745,7 @@
 pcmpeqb {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpeq_b VR128:$src1,
VR128:$src2))];
-def PCMPEQBrm : PDI0x74, MRMSrcReg, 
+def PCMPEQBrm : PDI0x74, MRMSrcMem, 
 (ops VR128:$dst, VR128:$src1, i128mem:$src2),
 pcmpeqb {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpeq_b VR128:$src1,
@@ -1755,7 +1755,7 @@
 pcmpeqw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpeq_w VR128:$src1,
VR128:$src2))];
-def PCMPEQWrm : PDI0x75, MRMSrcReg, 
+def PCMPEQWrm : PDI0x75, MRMSrcMem, 
 (ops VR128:$dst, VR128:$src1, i128mem:$src2),
 pcmpeqw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpeq_w VR128:$src1,
@@ -1765,7 +1765,7 @@
 pcmpeqd {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpeq_d VR128:$src1,
VR128:$src2))];
-def PCMPEQDrm : PDI0x76, MRMSrcReg, 
+def PCMPEQDrm : PDI0x76, MRMSrcMem, 
 (ops VR128:$dst, VR128:$src1, i128mem:$src2),
 pcmpeqd {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpeq_d VR128:$src1,
@@ -1776,7 +1776,7 @@
 pcmpgtb {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpgt_b VR128:$src1,
VR128:$src2))];
-def PCMPGTBrm : PDI0x64, MRMSrcReg, 
+def PCMPGTBrm : PDI0x64, MRMSrcMem, 
 (ops VR128:$dst, VR128:$src1, i128mem:$src2),
 pcmpgtb {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpgt_b VR128:$src1,
@@ -1786,7 +1786,7 @@
 pcmpgtw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpgt_w VR128:$src1,
VR128:$src2))];
-def PCMPGTWrm : PDI0x65, MRMSrcReg, 
+def PCMPGTWrm : PDI0x65, MRMSrcMem, 
 (ops VR128:$dst, VR128:$src1, i128mem:$src2),
 pcmpgtw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpgt_w VR128:$src1,
@@ -1796,7 +1796,7 @@
 pcmpgtd {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpgt_d VR128:$src1,
VR128:$src2))];
-def PCMPGTDrm : PDI0x66, MRMSrcReg, 
+def PCMPGTDrm : PDI0x66, MRMSrcMem, 
 (ops VR128:$dst, VR128:$src1, i128mem:$src2),
 pcmpgtd {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pcmpgt_d VR128:$src1,
@@ -1823,7 +1823,7 @@
  [(set VR128:$dst, (v4i32 (int_x86_sse2_packssdw_128
VR128:$src1,
VR128:$src2)))];
-def PACKSSDWrm : PDI0x6B, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
+def PACKSSDWrm : PDI0x6B, MRMSrcMem, (ops VR128:$dst, VR128:$src1,
i128mem:$src2),
  packssdw {$src2, $dst|$dst, $src2},
  [(set VR128:$dst, (v4i32 (int_x86_sse2_packssdw_128
@@ -1835,7 +1835,7 @@
  [(set VR128:$dst, (v8i16 (int_x86_sse2_packuswb_128
VR128:$src1,
VR128:$src2)))];
-def PACKUSWBrm : PDI0x67, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
+def PACKUSWBrm : PDI0x67, MRMSrcMem, (ops VR128:$dst, VR128:$src1,
i128mem:$src2),
  packuswb {$src2, $dst|$dst, $src2},
  [(set VR128:$dst, (v8i16 (int_x86_sse2_packuswb_128



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-14 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.88 - 1.89
---
Log message:

Misc. SSE2 intrinsics: clflush, lfench, mfence

---
Diffs of the changes:  (+11 -2)

 X86InstrSSE.td |   13 +++--
 1 files changed, 11 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.88 
llvm/lib/Target/X86/X86InstrSSE.td:1.89
--- llvm/lib/Target/X86/X86InstrSSE.td:1.88 Thu Apr 13 20:39:53 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Fri Apr 14 02:43:12 2006
@@ -2002,12 +2002,21 @@
 [(int_x86_sse2_movnt_i addr:$dst, R32:$src)], 
   TB, Requires[HasSSE2];
 
-// Store fence
+// Flush cache
+def CLFLUSH : I0xAE, MRM7m, (ops i8mem:$src),
+   clflush $src, [(int_x86_sse2_clflush addr:$src)],
+  TB, Requires[HasSSE2];
+
+// Load, store, and memory fence
 def SFENCE : I0xAE, MRM7m, (ops),
sfence, [(int_x86_sse_sfence)], TB, Requires[HasSSE1];
+def LFENCE : I0xAE, MRM5m, (ops),
+   lfence, [(int_x86_sse2_lfence)], TB, Requires[HasSSE2];
+def MFENCE : I0xAE, MRM6m, (ops),
+   mfence, [(int_x86_sse2_mfence)], TB, Requires[HasSSE2];
 
 // MXCSR register
-def LDMXCSR : I0xAE, MRM2m, (ops i32mem:$src),
+def LDMXCSR : I0xAE, MRM5m, (ops i32mem:$src),
 ldmxcsr $src,
 [(int_x86_sse_ldmxcsr addr:$src)], TB, Requires[HasSSE1];
 def STMXCSR : I0xAE, MRM3m, (ops i32mem:$dst),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-14 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.92 - 1.93
---
Log message:

hsubp{s|d} encoding bug

---
Diffs of the changes:  (+4 -4)

 X86InstrSSE.td |8 
 1 files changed, 4 insertions(+), 4 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.92 
llvm/lib/Target/X86/X86InstrSSE.td:1.93
--- llvm/lib/Target/X86/X86InstrSSE.td:1.92 Sat Apr 15 00:37:34 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Sat Apr 15 00:52:42 2006
@@ -1305,13 +1305,13 @@
   int_x86_sse3_hadd_pd;
 def HADDPDrm : S3_Intrm0x7C, haddpd {$src2, $dst|$dst, $src2},
   int_x86_sse3_hadd_pd;
-def HSUBPSrr : S3D_Intrr0x7C, hsubps {$src2, $dst|$dst, $src2},
+def HSUBPSrr : S3D_Intrr0x7D, hsubps {$src2, $dst|$dst, $src2},
   int_x86_sse3_hsub_ps;
-def HSUBPSrm : S3D_Intrm0x7C, hsubps {$src2, $dst|$dst, $src2},
+def HSUBPSrm : S3D_Intrm0x7D, hsubps {$src2, $dst|$dst, $src2},
   int_x86_sse3_hsub_ps;
-def HSUBPDrr : S3_Intrr0x7C, hsubpd {$src2, $dst|$dst, $src2},
+def HSUBPDrr : S3_Intrr0x7D, hsubpd {$src2, $dst|$dst, $src2},
   int_x86_sse3_hsub_pd;
-def HSUBPDrm : S3_Intrm0x7C, hsubpd {$src2, $dst|$dst, $src2},
+def HSUBPDrm : S3_Intrm0x7D, hsubpd {$src2, $dst|$dst, $src2},
   int_x86_sse3_hsub_pd;
 }
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-13 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.84 - 1.85
---
Log message:

psad, pmax, pmin intrinsics.


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

 X86InstrSSE.td |   55 ++-
 1 files changed, 54 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.84 
llvm/lib/Target/X86/X86InstrSSE.td:1.85
--- llvm/lib/Target/X86/X86InstrSSE.td:1.84 Thu Apr 13 00:24:54 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Thu Apr 13 01:11:45 2006
@@ -1421,7 +1421,6 @@
 [(set VR128:$dst, (int_x86_sse2_pmulu_dq VR128:$src1,
VR128:$src2))];
 }
-
 def PMULHUWrm : PDI0xE4, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
 pmulhuw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pmulhu_w VR128:$src1,
@@ -1440,16 +1439,19 @@
 [(set VR128:$dst, (int_x86_sse2_pmulu_dq VR128:$src1,
   (bc_v4i32 (loadv2i64 
addr:$src2];
 
+let isCommutable = 1 in {
 def PMADDWDrr : PDI0xF5, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
 pmaddwd {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pmadd_wd VR128:$src1,
VR128:$src2))];
+}
 def PMADDWDrm : PDI0xF5, MRMSrcMem,
 (ops VR128:$dst, VR128:$src1, i128mem:$src2),
 pmaddwd {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_pmadd_wd VR128:$src1,
(bc_v8i16 (loadv2i64 addr:$src2];
 
+let isCommutable = 1 in {
 def PAVGBrr : PDI0xE0, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
pavgb {$src2, $dst|$dst, $src2},
[(set VR128:$dst, (int_x86_sse2_pavg_b VR128:$src1,
@@ -1458,6 +1460,7 @@
pavgw {$src2, $dst|$dst, $src2},
[(set VR128:$dst, (int_x86_sse2_pavg_w VR128:$src1,
   VR128:$src2))];
+}
 def PAVGBrm : PDI0xE0, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
pavgb {$src2, $dst|$dst, $src2},
[(set VR128:$dst, (int_x86_sse2_pavg_b VR128:$src1,
@@ -1466,6 +1469,56 @@
pavgw {$src2, $dst|$dst, $src2},
[(set VR128:$dst, (int_x86_sse2_pavg_w VR128:$src1,
   (bc_v8i16 (loadv2i64 addr:$src2];
+
+let isCommutable = 1 in {
+def PMAXUBrr : PDI0xDE, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   pmaxub {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_pmaxu_b VR128:$src1,
+  VR128:$src2))];
+def PMAXSWrr : PDI0xEE, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   pmaxsw {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_pmaxs_w VR128:$src1,
+  VR128:$src2))];
+}
+def PMAXUBrm : PDI0xDE, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+   pmaxub {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_pmaxu_b VR128:$src1,
+  (bc_v16i8 (loadv2i64 addr:$src2];
+def PMAXSWrm : PDI0xEE, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+   pmaxsw {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_pmaxs_w VR128:$src1,
+  (bc_v8i16 (loadv2i64 addr:$src2];
+
+let isCommutable = 1 in {
+def PMINUBrr : PDI0xDA, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   pminub {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_pminu_b VR128:$src1,
+  VR128:$src2))];
+def PMINSWrr : PDI0xEA, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   pminsw {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_pmins_w VR128:$src1,
+  VR128:$src2))];
+}
+def PMINUBrm : PDI0xDA, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+   pminub {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_pminu_b VR128:$src1,
+  (bc_v16i8 (loadv2i64 addr:$src2];
+def PMINSWrm : PDI0xEA, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+   pminsw {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_pmins_w VR128:$src1,
+  (bc_v8i16 (loadv2i64 addr:$src2];
+
+
+let isCommutable = 1 in {
+def PSADBWrr : PDI0xE0, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-13 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.86 - 1.87
---
Log message:

psll*, psrl*, and psra* intrinsics.


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

 X86InstrSSE.td |  100 -
 1 files changed, 99 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.86 
llvm/lib/Target/X86/X86InstrSSE.td:1.87
--- llvm/lib/Target/X86/X86InstrSSE.td:1.86 Thu Apr 13 13:11:28 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Thu Apr 13 19:14:05 2006
@@ -1522,10 +1522,108 @@
 }
 
 let isTwoAddress = 1 in {
+def PSLLWrr : PDIi80xF1, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+psllw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
+   VR128:$src2))];
+def PSLLWrm : PDIi80xF1, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+psllw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
+   (bc_v4i32 (loadv2i64 addr:$src2];
+def PSLLWri : PDIi80x71, MRM6r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
+psllw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psll_w VR128:$src1,
+   (scalar_to_vector (i32 imm:$src2];
+def PSLLDrr : PDIi80xF2, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+pslld {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
+   VR128:$src2))];
+def PSLLDrm : PDIi80xF2, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+pslld {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
+   (bc_v4i32 (loadv2i64 addr:$src2];
+def PSLLDri : PDIi80x72, MRM6r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
+pslld {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psll_d VR128:$src1,
+   (scalar_to_vector (i32 imm:$src2];
+def PSLLQrr : PDIi80xF3, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+psllq {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psll_q VR128:$src1,
+   VR128:$src2))];
+def PSLLQrm : PDIi80xF3, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+psllq {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psll_q VR128:$src1,
+   (bc_v4i32 (loadv2i64 addr:$src2];
+def PSLLQri : PDIi80x73, MRM6r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
+psllq {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psll_q VR128:$src1,
+   (scalar_to_vector (i32 imm:$src2];
 def PSLLDQri : PDIi80x73, MRM7r, (ops VR128:$dst, VR128:$src1, 
i32i8imm:$src2),
  pslldq {$src2, $dst|$dst, $src2}, [];
-def PSRLDQri : PDIi80x73, MRM7r, (ops VR128:$dst, VR128:$src1, 
i32i8imm:$src2),
+
+def PSRLWrr : PDIi80xD1, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+psrlw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psrl_w VR128:$src1,
+   VR128:$src2))];
+def PSRLWrm : PDIi80xD1, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+psrlw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psrl_w VR128:$src1,
+   (bc_v4i32 (loadv2i64 addr:$src2];
+def PSRLWri : PDIi80x71, MRM2r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
+psrlw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psrl_w VR128:$src1,
+   (scalar_to_vector (i32 imm:$src2];
+def PSRLDrr : PDIi80xD2, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+psrld {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psrl_d VR128:$src1,
+   VR128:$src2))];
+def PSRLDrm : PDIi80xD2, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+psrld {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psrl_d VR128:$src1,
+   (bc_v4i32 (loadv2i64 addr:$src2];
+def PSRLDri : PDIi80x72, MRM2r, (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
+psrld {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_psrl_d VR128:$src1,
+  

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-13 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.87 - 1.88
---
Log message:

pcmpeq* and pcmpgt* intrinsics.


---
Diffs of the changes:  (+68 -2)

 X86InstrSSE.td |   70 +++--
 1 files changed, 68 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.87 
llvm/lib/Target/X86/X86InstrSSE.td:1.88
--- llvm/lib/Target/X86/X86InstrSSE.td:1.87 Thu Apr 13 19:14:05 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Thu Apr 13 20:39:53 2006
@@ -1148,10 +1148,76 @@
(load addr:$src), imm:$cc))];
 def CMPPDrr : PDIi80xC2, MRMSrcReg, 
 (ops VR128:$dst, VR128:$src1, VR128:$src, SSECC:$cc),
-cmp${cc}pd {$src, $dst|$dst, $src}, [];
+cmp${cc}pd {$src, $dst|$dst, $src},
+[(set VR128:$dst, (int_x86_sse2_cmp_pd VR128:$src1,
+   VR128:$src, imm:$cc))];
 def CMPPDrm : PDIi80xC2, MRMSrcMem, 
 (ops VR128:$dst, VR128:$src1, f128mem:$src, SSECC:$cc),
-cmp${cc}pd {$src, $dst|$dst, $src}, [];
+cmp${cc}pd {$src, $dst|$dst, $src},
+[(set VR128:$dst, (int_x86_sse2_cmp_pd VR128:$src1,
+   (load addr:$src), imm:$cc))];
+
+def PCMPEQBrr : PDI0x74, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, VR128:$src2),
+pcmpeqb {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpeq_b VR128:$src1,
+   VR128:$src2))];
+def PCMPEQBrm : PDI0x74, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, i128mem:$src2),
+pcmpeqb {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpeq_b VR128:$src1,
+   (bc_v16i8 (loadv2i64 addr:$src2];
+def PCMPEQWrr : PDI0x75, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, VR128:$src2),
+pcmpeqw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpeq_w VR128:$src1,
+   VR128:$src2))];
+def PCMPEQWrm : PDI0x75, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, i128mem:$src2),
+pcmpeqw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpeq_w VR128:$src1,
+   (bc_v8i16 (loadv2i64 addr:$src2];
+def PCMPEQDrr : PDI0x76, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, VR128:$src2),
+pcmpeqd {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpeq_d VR128:$src1,
+   VR128:$src2))];
+def PCMPEQDrm : PDI0x76, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, i128mem:$src2),
+pcmpeqd {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpeq_d VR128:$src1,
+   (bc_v4i32 (loadv2i64 addr:$src2];
+
+def PCMPGTBrr : PDI0x64, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, VR128:$src2),
+pcmpgtb {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpgt_b VR128:$src1,
+   VR128:$src2))];
+def PCMPGTBrm : PDI0x64, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, i128mem:$src2),
+pcmpgtb {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpgt_b VR128:$src1,
+   (bc_v16i8 (loadv2i64 addr:$src2];
+def PCMPGTWrr : PDI0x65, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, VR128:$src2),
+pcmpgtw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpgt_w VR128:$src1,
+   VR128:$src2))];
+def PCMPGTWrm : PDI0x65, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, i128mem:$src2),
+pcmpgtw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpgt_w VR128:$src1,
+   (bc_v8i16 (loadv2i64 addr:$src2];
+def PCMPGTDrr : PDI0x66, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, VR128:$src2),
+pcmpgtd {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpgt_d VR128:$src1,
+   VR128:$src2))];
+def PCMPGTDrm : PDI0x66, MRMSrcReg, 
+(ops VR128:$dst, VR128:$src1, i128mem:$src2),
+pcmpgtd {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pcmpgt_d VR128:$src1,
+ 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-12 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.81 - 1.82
---
Log message:

Naming inconsistency.


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

 X86InstrSSE.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.81 
llvm/lib/Target/X86/X86InstrSSE.td:1.82
--- llvm/lib/Target/X86/X86InstrSSE.td:1.81 Wed Apr 12 18:42:44 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Apr 12 19:00:23 2006
@@ -1613,7 +1613,7 @@
  [(set R32:$dst, (int_x86_sse_movmsk_ps VR128:$src))];
 def MOVMSKPDrr : PSI0x50, MRMSrcReg, (ops R32:$dst, VR128:$src),
  movmskpd {$src, $dst|$dst, $src},
- [(set R32:$dst, (int_x86_sse2_movmskpd VR128:$src))];
+ [(set R32:$dst, (int_x86_sse2_movmsk_pd VR128:$src))];
 
 def PMOVMSKBrr : PDI0xD7, MRMSrcReg, (ops R32:$dst, VR128:$src),
  pmovmskb {$src, $dst|$dst, $src},



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-12 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.82 - 1.83
---
Log message:

padds{b|w}, paddus{b|w}, psubs{b|w}, psubus{b|w} intrinsics.


---
Diffs of the changes:  (+78 -8)

 X86InstrSSE.td |   86 +++--
 1 files changed, 78 insertions(+), 8 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.82 
llvm/lib/Target/X86/X86InstrSSE.td:1.83
--- llvm/lib/Target/X86/X86InstrSSE.td:1.82 Wed Apr 12 19:00:23 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Apr 12 19:43:35 2006
@@ -1283,23 +1283,59 @@
   paddq {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v2i64 (add VR128:$src1, VR128:$src2)))];
 }
-def PADDBrm : PDI0xFC, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
+def PADDBrm : PDI0xFC, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
   paddb {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v16i8 (add VR128:$src1,
 (load addr:$src2];
-def PADDWrm : PDI0xFD, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
+def PADDWrm : PDI0xFD, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
   paddw {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v8i16 (add VR128:$src1,
 (load addr:$src2];
-def PADDDrm : PDI0xFE, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
+def PADDDrm : PDI0xFE, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
   paddd {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v4i32 (add VR128:$src1,
 (load addr:$src2];
-def PADDQrm : PDI0xD4, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
+def PADDQrm : PDI0xD4, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
   paddd {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v2i64 (add VR128:$src1,
 (load addr:$src2];
 
+let isCommutable = 1 in {
+def PADDSBrr : PDI0xEC, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   paddsb {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_padds_b VR128:$src1,
+  VR128:$src2))];
+def PADDSWrr : PDI0xED, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+   paddsw {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_padds_w VR128:$src1,
+  VR128:$src2))];
+def PADDUSBrr : PDI0xDC, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+paddusb {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_paddus_b VR128:$src1,
+   VR128:$src2))];
+def PADDUSWrr : PDI0xDD, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+   paddusw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_paddus_w VR128:$src1,
+   VR128:$src2))];
+}
+def PADDSBrm : PDI0xEC, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+   paddsb {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_padds_b VR128:$src1,
+  (bc_v16i8 (loadv2i64 addr:$src2];
+def PADDSWrm : PDI0xED, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+   paddsw {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (int_x86_sse2_padds_w VR128:$src1,
+  (bc_v8i16 (loadv2i64 addr:$src2];
+def PADDUSBrm : PDI0xDC, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+paddusb {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_paddus_b VR128:$src1,
+   (bc_v16i8 (loadv2i64 addr:$src2];
+def PADDUSWrm : PDI0xDD, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+   paddusw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_paddus_w VR128:$src1,
+   (bc_v8i16 (loadv2i64 addr:$src2];
+
+
 def PSUBBrr : PDI0xF8, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   psubb {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v16i8 (sub VR128:$src1, VR128:$src2)))];
@@ -1313,22 +1349,56 @@
   psubq {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v2i64 (sub VR128:$src1, VR128:$src2)))];
 
-def PSUBBrm : PDI0xF8, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
+def PSUBBrm : PDI0xF8, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
   psubb {$src2, $dst|$dst, $src2},
   [(set VR128:$dst, (v16i8 (sub VR128:$src1,
  

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-12 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.83 - 1.84
---
Log message:

Various SSE2 packed integer intrinsics: pmulhuw, pavgw, etc.


---
Diffs of the changes:  (+71 -4)

 X86InstrSSE.td |   75 +
 1 files changed, 71 insertions(+), 4 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.83 
llvm/lib/Target/X86/X86InstrSSE.td:1.84
--- llvm/lib/Target/X86/X86InstrSSE.td:1.83 Wed Apr 12 19:43:35 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Thu Apr 13 00:24:54 2006
@@ -1383,22 +1383,89 @@
 [(set VR128:$dst, (int_x86_sse2_psubus_w VR128:$src1,
VR128:$src2))];
 
-def PSUBSBrm : PDI0xE8, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSUBSBrm : PDI0xE8, MRMSrcMem,
+   (ops VR128:$dst, VR128:$src1, i128mem:$src2),
psubsb {$src2, $dst|$dst, $src2},
[(set VR128:$dst, (int_x86_sse2_psubs_b VR128:$src1,
   (bc_v16i8 (loadv2i64 addr:$src2];
-def PSUBSWrm : PDI0xE9, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSUBSWrm : PDI0xE9, MRMSrcMem,
+   (ops VR128:$dst, VR128:$src1, i128mem:$src2),
psubsw {$src2, $dst|$dst, $src2},
[(set VR128:$dst, (int_x86_sse2_psubs_w VR128:$src1,
   (bc_v8i16 (loadv2i64 addr:$src2];
-def PSUBUSBrm : PDI0xD8, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSUBUSBrm : PDI0xD8, MRMSrcMem,
+(ops VR128:$dst, VR128:$src1, i128mem:$src2),
 psubusb {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psubus_b VR128:$src1,
(bc_v16i8 (loadv2i64 addr:$src2];
-def PSUBUSWrm : PDI0xD9, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+def PSUBUSWrm : PDI0xD9, MRMSrcMem,
+(ops VR128:$dst, VR128:$src1, i128mem:$src2),
psubusw {$src2, $dst|$dst, $src2},
 [(set VR128:$dst, (int_x86_sse2_psubus_w VR128:$src1,
(bc_v8i16 (loadv2i64 addr:$src2];
+
+let isCommutable = 1 in {
+def PMULHUWrr : PDI0xE4, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+pmulhuw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pmulhu_w VR128:$src1,
+   VR128:$src2))];
+def PMULHWrr : PDI0xE5, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+pmulhw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pmulh_w VR128:$src1,
+   VR128:$src2))];
+def PMULLWrr : PDI0xD5, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+  pmullw {$src2, $dst|$dst, $src2},
+  [(set VR128:$dst, (v8i16 (mul VR128:$src1, VR128:$src2)))];
+def PMULUDQrr : PDI0xF4, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+pmuludq {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pmulu_dq VR128:$src1,
+   VR128:$src2))];
+}
+
+def PMULHUWrm : PDI0xE4, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+pmulhuw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pmulhu_w VR128:$src1,
+   (bc_v8i16 (loadv2i64 addr:$src2];
+def PMULHWrm : PDI0xE5, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+pmulhw {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pmulh_w VR128:$src1,
+   (bc_v8i16 (loadv2i64 addr:$src2];
+def PMULLWrm : PDI0xD5, MRMSrcMem,
+   (ops VR128:$dst, VR128:$src1, i128mem:$src2),
+   pmullw {$src2, $dst|$dst, $src2},
+   [(set VR128:$dst, (v8i16 (mul VR128:$src1,
+ (bc_v8i16 (loadv2i64 
addr:$src2)];
+def PMULUDQrm : PDI0xF4, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
i128mem:$src2),
+pmuludq {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pmulu_dq VR128:$src1,
+  (bc_v4i32 (loadv2i64 
addr:$src2];
+
+def PMADDWDrr : PDI0xF5, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
+pmaddwd {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_pmadd_wd VR128:$src1,
+   VR128:$src2))];
+def PMADDWDrm : PDI0xF5, MRMSrcMem,
+(ops VR128:$dst, VR128:$src1, i128mem:$src2),
+pmaddwd {$src2, $dst|$dst, $src2},
+   

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-11 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.75 - 1.76
---
Log message:

gcc lower SSE prefetch into generic prefetch intrinsic. Need to add support
later.


---
Diffs of the changes:  (+4 -8)

 X86InstrSSE.td |   12 
 1 files changed, 4 insertions(+), 8 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.75 
llvm/lib/Target/X86/X86InstrSSE.td:1.76
--- llvm/lib/Target/X86/X86InstrSSE.td:1.75 Tue Apr 11 12:35:57 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Apr 11 13:04:57 2006
@@ -1517,17 +1517,13 @@
 
 // Prefetching loads
 def PREFETCHT0   : PSI0x18, MRM1m, (ops i8mem:$src),
-   prefetcht0 $src,
-   [(int_x86_sse_prefetch addr:$src, 1)];
+   prefetcht0 $src, [];
 def PREFETCHT1   : PSI0x18, MRM2m, (ops i8mem:$src),
-   prefetcht1 $src,
-   [(int_x86_sse_prefetch addr:$src, 2)];
+   prefetcht1 $src, [];
 def PREFETCHT2   : PSI0x18, MRM3m, (ops i8mem:$src),
-   prefetcht2 $src,
-   [(int_x86_sse_prefetch addr:$src, 3)];
+   prefetcht2 $src, [];
 def PREFETCHTNTA : PSI0x18, MRM0m, (ops i8mem:$src),
-   prefetchtnta $src,
-   [(int_x86_sse_prefetch addr:$src, 0)];
+   prefetchtnta $src, [];
 
 // Non-temporal stores
 def MOVNTPSmr : PSI0x2B, MRMDestMem, (ops i128mem:$dst, VR128:$src),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-11 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.76 - 1.77
---
Log message:

Added __builtin_ia32_storelv4si, __builtin_ia32_movqv4si,
__builtin_ia32_loadlv4si, __builtin_ia32_loaddqu, __builtin_ia32_storedqu.


---
Diffs of the changes:  (+21 -2)

 X86InstrSSE.td |   23 +--
 1 files changed, 21 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.76 
llvm/lib/Target/X86/X86InstrSSE.td:1.77
--- llvm/lib/Target/X86/X86InstrSSE.td:1.76 Tue Apr 11 13:04:57 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Apr 11 17:28:25 2006
@@ -724,6 +724,14 @@
 def MOVUPDmr : PDI0x11, MRMDestMem, (ops f128mem:$dst, VR128:$src),
movupd {$src, $dst|$dst, $src},
[(int_x86_sse2_storeu_pd addr:$dst, VR128:$src)];
+def MOVDQUrm :   I0x6F, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
+   movdqu {$src, $dst|$dst, $src},
+   [(set VR128:$dst, (int_x86_sse2_loadu_dq addr:$src))],
+ XS, Requires[HasSSE2];
+def MOVDQUmr :   I0x7F, MRMDestMem, (ops i128mem:$dst, VR128:$src),
+   movdqu {$src, $dst|$dst, $src},
+   [(int_x86_sse2_storeu_dq addr:$dst, VR128:$src)],
+ XS, Requires[HasSSE2];
 
 let isTwoAddress = 1 in {
 def MOVLPSrm : PSI0x12, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
@@ -1657,6 +1665,16 @@
  MOVS_shuffle_mask)))];
 }
 
+// Store / copy lower 64-bits of a XMM register.
+def MOVLQ128mr : PDI0xD6, MRMDestMem, (ops i64mem:$dst, VR128:$src),
+ movq {$src, $dst|$dst, $src},
+ [(int_x86_sse2_storel_dq addr:$dst, VR128:$src)];
+
+// FIXME: Temporary workaround since 2-wide shuffle is broken.
+def MOVLQ128rr : PDI0xD6, MRMSrcReg, (ops VR128:$dst, VR128:$src),
+ movq {$src, $dst|$dst, $src},
+ [(set VR128:$dst, (int_x86_sse2_movl_dq VR128:$src))];
+
 // Move to lower bits of a VR128 and zeroing upper bits.
 // Loading from memory automatically zeroing upper bits.
 def MOVZSS2PSrm : SSI0x10, MRMSrcMem, (ops VR128:$dst, f32mem:$src),
@@ -1672,9 +1690,10 @@
[(set VR128:$dst,
  (v4i32 (X86zexts2vec (loadi32 addr:$src];
 def MOVZQI2PQIrm : PDI0x7E, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
-   movd {$src, $dst|$dst, $src},
+   movq {$src, $dst|$dst, $src},
[(set VR128:$dst,
- (v2i64 (X86zexts2vec (loadi64 addr:$src];
+ (bc_v2i64 (v2f64 (X86zexts2vec
+   (loadf64 addr:$src)];
 
 
//===--===//
 // Non-Instruction Patterns



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-11 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.77 - 1.78
---
Log message:

Various SSE2 conversion intrinsics

---
Diffs of the changes:  (+94 -39)

 X86InstrSSE.td |  133 -
 1 files changed, 94 insertions(+), 39 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.77 
llvm/lib/Target/X86/X86InstrSSE.td:1.78
--- llvm/lib/Target/X86/X86InstrSSE.td:1.77 Tue Apr 11 17:28:25 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Apr 12 00:20:24 2006
@@ -524,6 +524,23 @@
  [(set FR64:$dst, (fextend (loadf32 addr:$src)))], XS,
 Requires[HasSSE2];
 
+// Aliases to match intrinsics which expect XMM operand(s).
+def Int_CVTTSD2SIrr: SDI0x2C, MRMSrcReg, (ops R32:$dst, VR128:$src),
+ cvttsd2si {$src, $dst|$dst, $src},
+ [(set R32:$dst, (int_x86_sse2_cvttsd2si 
VR128:$src))];
+def Int_CVTTSD2SIrm: SDI0x2C, MRMSrcMem, (ops R32:$dst, f128mem:$src),
+ cvttsd2si {$src, $dst|$dst, $src},
+ [(set R32:$dst, (int_x86_sse2_cvttsd2si
+  (load addr:$src)))];
+
+def CVTSD2SIrr: SDI0x2D, MRMSrcReg, (ops R32:$dst, VR128:$src),
+cvtsd2si {$src, $dst|$dst, $src},
+[(set R32:$dst, (int_x86_sse2_cvtsd2si VR128:$src))];
+def CVTSD2SIrm: SDI0x2D, MRMSrcMem, (ops R32:$dst, f128mem:$src),
+cvtsd2si {$src, $dst|$dst, $src},
+[(set R32:$dst, (int_x86_sse2_cvtsd2si
+ (load addr:$src)))];
+
 // Comparison instructions
 let isTwoAddress = 1 in {
 def CMPSSrr : SSI0xC2, MRMSrcReg, 
@@ -800,62 +817,100 @@
 }
 
 // Conversion instructions
-def CVTPI2PSr : PSI0x2A, MRMSrcReg, (ops VR128:$dst, VR64:$src),
+def CVTPI2PSrr : PSI0x2A, MRMSrcReg, (ops VR128:$dst, VR64:$src),
 cvtpi2ps {$src, $dst|$dst, $src}, [];
-def CVTPI2PSm : PSI0x2A, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
+def CVTPI2PSrm : PSI0x2A, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
 cvtpi2ps {$src, $dst|$dst, $src}, [];
-def CVTPI2PDr : PDI0x2A, MRMSrcReg, (ops VR128:$dst, VR64:$src),
+def CVTPI2PDrr : PDI0x2A, MRMSrcReg, (ops VR128:$dst, VR64:$src),
 cvtpi2pd {$src, $dst|$dst, $src}, [];
-def CVTPI2PDm : PDI0x2A, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
+def CVTPI2PDrm : PDI0x2A, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
 cvtpi2pd {$src, $dst|$dst, $src}, [];
 
 // SSE2 instructions without OpSize prefix
-def CVTDQ2PSr : I0x5B, MRMSrcReg, (ops VR128:$dst, VR128:$src),
-  cvtdq2ps {$src, $dst|$dst, $src}, [], TB,
-Requires[HasSSE2];
-def CVTDQ2PSm : I0x5B, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
-  cvtdq2ps {$src, $dst|$dst, $src}, [], TB,
-Requires[HasSSE2];
+def CVTDQ2PSrr : I0x5B, MRMSrcReg, (ops VR128:$dst, VR128:$src),
+   cvtdq2ps {$src, $dst|$dst, $src},
+   [(set VR128:$dst, (int_x86_sse2_cvtdq2ps VR128:$src))],
+ TB, Requires[HasSSE2];
+def CVTDQ2PSrm : I0x5B, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
+  cvtdq2ps {$src, $dst|$dst, $src},
+  [(set VR128:$dst, (int_x86_sse2_cvtdq2ps
+ (load addr:$src)))],
+ TB, Requires[HasSSE2];
 
 // SSE2 instructions with XS prefix
-def CVTDQ2PDr : I0xE6, MRMSrcReg, (ops VR128:$dst, VR64:$src),
-  cvtdq2pd {$src, $dst|$dst, $src}, [],
-XS, Requires[HasSSE2];
-def CVTDQ2PDm : I0xE6, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
-  cvtdq2pd {$src, $dst|$dst, $src}, [],
-XS, Requires[HasSSE2];
+def CVTDQ2PDrr : I0xE6, MRMSrcReg, (ops VR128:$dst, VR128:$src),
+   cvtdq2pd {$src, $dst|$dst, $src},
+   [(set VR128:$dst, (int_x86_sse2_cvtdq2pd VR128:$src))],
+ XS, Requires[HasSSE2];
+def CVTDQ2PDrm : I0xE6, MRMSrcMem, (ops VR128:$dst, i64mem:$src),
+   cvtdq2pd {$src, $dst|$dst, $src},
+   [(set VR128:$dst, (int_x86_sse2_cvtdq2pd
+  (load addr:$src)))],
+ XS, Requires[HasSSE2];
 
-def CVTPS2PIr : PSI0x2D, MRMSrcReg, (ops VR64:$dst, VR128:$src),
+def CVTPS2PIrr : PSI0x2D, MRMSrcReg, (ops VR64:$dst, VR128:$src),
 cvtps2pi {$src, $dst|$dst, $src}, [];
-def CVTPS2PIm : PSI0x2D, MRMSrcMem, (ops VR64:$dst, f64mem:$src),
+def CVTPS2PIrm : PSI0x2D, MRMSrcMem, (ops VR64:$dst, f64mem:$src),
 cvtps2pi {$src, $dst|$dst, $src}, [];
-def CVTPD2PIr : PDI0x2D, MRMSrcReg, (ops VR64:$dst, VR128:$src),
+def CVTPD2PIrr : PDI0x2D, MRMSrcReg, (ops VR64:$dst, VR128:$src),
 cvtpd2pi {$src, $dst|$dst, $src}, [];
-def CVTPD2PIm : PDI0x2D, MRMSrcMem, 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.69 - 1.70
---
Log message:

movups / movupd


---
Diffs of the changes:  (+10 -6)

 X86InstrSSE.td |   16 ++--
 1 files changed, 10 insertions(+), 6 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.69 
llvm/lib/Target/X86/X86InstrSSE.td:1.70
--- llvm/lib/Target/X86/X86InstrSSE.td:1.69 Mon Apr 10 02:23:14 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Apr 10 16:11:06 2006
@@ -722,16 +722,20 @@
 
 def MOVUPSrr : PSI0x10, MRMSrcReg, (ops VR128:$dst, VR128:$src),
movups {$src, $dst|$dst, $src}, [];
-def MOVUPSrm : PSI0x10, MRMSrcMem, (ops VR128:$dst, f128mem:$src),
-   movups {$src, $dst|$dst, $src}, [];
-def MOVUPSmr : PSI0x11, MRMDestMem, (ops f128mem:$dst, VR128:$src),
-   movups {$src, $dst|$dst, $src}, [];
+def MOVUPSrm : PDI0x10, MRMSrcMem, (ops VR128:$dst, f128mem:$src),
+   movups {$src, $dst|$dst, $src},
+   [(set VR128:$dst, (int_x86_sse_loadu_ps addr:$src))];
+def MOVUPSmr : PDI0x11, MRMDestMem, (ops f128mem:$dst, VR128:$src),
+   movups {$src, $dst|$dst, $src},
+   [(int_x86_sse_storeu_ps addr:$dst, VR128:$src)];
 def MOVUPDrr : PDI0x10, MRMSrcReg, (ops VR128:$dst, VR128:$src),
movupd {$src, $dst|$dst, $src}, [];
 def MOVUPDrm : PDI0x10, MRMSrcMem, (ops VR128:$dst, f128mem:$src),
-   movupd {$src, $dst|$dst, $src}, [];
+   movupd {$src, $dst|$dst, $src},
+   [(set VR128:$dst, (int_x86_sse2_loadu_pd addr:$src))];
 def MOVUPDmr : PDI0x11, MRMDestMem, (ops f128mem:$dst, VR128:$src),
-   movupd {$src, $dst|$dst, $src}, [];
+   movupd {$src, $dst|$dst, $src},
+   [(int_x86_sse2_storeu_pd addr:$dst, VR128:$src)];
 
 let isTwoAddress = 1 in {
 def MOVLPSrm : PSI0x12, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.70 - 1.71
---
Log message:

Added some missing shuffle patterns.


---
Diffs of the changes:  (+22 -5)

 X86InstrSSE.td |   27 ++-
 1 files changed, 22 insertions(+), 5 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.70 
llvm/lib/Target/X86/X86InstrSSE.td:1.71
--- llvm/lib/Target/X86/X86InstrSSE.td:1.70 Mon Apr 10 16:11:06 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Apr 10 16:42:19 2006
@@ -1365,7 +1365,7 @@
 (ops VR128:$dst, i128mem:$src1, i8imm:$src2),
 pshufhw {$src2, $src1, $dst|$dst, $src1, $src2},
 [(set VR128:$dst, (v8i16 (vector_shuffle
- (bc_v8i16 (loadv2i64 addr:$src1)), 
(undef),
+  (load addr:$src1), (undef),
   PSHUFHW_shuffle_mask:$src2)))],
 XS, Requires[HasSSE2];
 
@@ -1381,7 +1381,7 @@
 (ops VR128:$dst, i128mem:$src1, i32i8imm:$src2),
 pshuflw {$src2, $src1, $dst|$dst, $src1, $src2},
 [(set VR128:$dst, (v8i16 (vector_shuffle
- (bc_v8i16 (loadv2i64 addr:$src1)), 
(undef),
+  (load addr:$src1), (undef),
   PSHUFLW_shuffle_mask:$src2)))],
 XD, Requires[HasSSE2];
 
@@ -1823,11 +1823,28 @@
   (v4i32 (SHUFPSrm VR128:$src1, addr:$src2,
   SHUFP_int_shuffle_mask:$sm)), Requires[HasSSE2];
 
-// Shuffle v4f32 with PSHUF* if others do not match.
+// Special pshuf* cases: folding (bit_convert (loadv2i64 addr)).
+def : Pat(v4i32 (vector_shuffle (bc_v4i32 (loadv2i64 addr:$src1)), (undef),
+  PSHUFD_shuffle_mask:$src2)),
+  (PSHUFDmi addr:$src1, PSHUFD_shuffle_mask:$src2),
+  Requires[HasSSE2];
+def : Pat(v8i16 (vector_shuffle (bc_v8i16 (loadv2i64 addr:$src1)), (undef),
+  PSHUFHW_shuffle_mask:$src2)),
+  (PSHUFHWmi addr:$src1, PSHUFHW_shuffle_mask:$src2),
+  Requires[HasSSE2];
+def : Pat(v8i16 (vector_shuffle (bc_v8i16 (loadv2i64 addr:$src1)), (undef),
+  PSHUFLW_shuffle_mask:$src2)),
+  (PSHUFLWmi addr:$src1, PSHUFHW_shuffle_mask:$src2),
+  Requires[HasSSE2];
+
+
+// Special SHUFPSrr case: looks like a PSHUFD, like make both operands src1.
+// FIXME: when we want non two-address code, then we should use PSHUFD!
 def : Pat(vector_shuffle (v4f32 VR128:$src1), (undef),
PSHUFD_fp_shuffle_mask:$sm),
-  (v4f32 (PSHUFDri VR128:$src1, PSHUFD_fp_shuffle_mask:$sm)),
-  Requires[HasSSE2];
+   (v4f32 (SHUFPSrr VR128:$src1, VR128:$src1, 
PSHUFD_fp_shuffle_mask:$sm)),
+  Requires[HasSSE1];
+// Shuffle v4f32 with PSHUF* if others do not match.
 def : Pat(vector_shuffle (loadv4f32 addr:$src1), (undef),
PSHUFD_fp_shuffle_mask:$sm),
   (v4f32 (PSHUFDmi addr:$src1, PSHUFD_fp_shuffle_mask:$sm)),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.71 - 1.72
---
Log message:

Remove some bogus patterns; clean up.


---
Diffs of the changes:  (+20 -53)

 X86InstrSSE.td |   73 +++--
 1 files changed, 20 insertions(+), 53 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.71 
llvm/lib/Target/X86/X86InstrSSE.td:1.72
--- llvm/lib/Target/X86/X86InstrSSE.td:1.71 Mon Apr 10 16:42:19 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Apr 10 17:35:16 2006
@@ -128,32 +128,16 @@
   return X86::isPSHUFLWMask(N);
 }], SHUFFLE_get_pshuflw_imm;
 
-// Only use PSHUF* for v4f32 if SHUFP does not match.
-def PSHUFD_fp_shuffle_mask : PatLeaf(build_vector), [{
-  return !X86::isSHUFPMask(N) 
-  X86::isPSHUFDMask(N);
+def SHUFP_unary_shuffle_mask : PatLeaf(build_vector), [{
+  return X86::isPSHUFDMask(N);
 }], SHUFFLE_get_shuf_imm;
 
-def PSHUFHW_fp_shuffle_mask : PatLeaf(build_vector), [{
-  return !X86::isSHUFPMask(N) 
-  X86::isPSHUFHWMask(N);
-}], SHUFFLE_get_pshufhw_imm;
-
-def PSHUFLW_fp_shuffle_mask : PatLeaf(build_vector), [{
-  return !X86::isSHUFPMask(N) 
-  X86::isPSHUFLWMask(N);
-}], SHUFFLE_get_pshuflw_imm;
-
 def SHUFP_shuffle_mask : PatLeaf(build_vector), [{
   return X86::isSHUFPMask(N);
 }], SHUFFLE_get_shuf_imm;
 
-// Only use SHUFP for v4i32 if PSHUF* do not match.
-def SHUFP_int_shuffle_mask : PatLeaf(build_vector), [{
-  return !X86::isPSHUFDMask(N) 
- !X86::isPSHUFHWMask(N) 
- !X86::isPSHUFLWMask(N) 
-  X86::isSHUFPMask(N);
+def PSHUFD_binary_shuffle_mask : PatLeaf(build_vector), [{
+  return X86::isSHUFPMask(N);
 }], SHUFFLE_get_shuf_imm;
 
 
//===--===//
@@ -1813,16 +1797,6 @@
   (v4f32 (SHUFPSrr VR128:$src, VR128:$src, SSE_splat_mask:$sm)),
   Requires[HasSSE1];
 
-// Shuffle v4i32 with SHUFP* if others do not match.
-def : Pat(vector_shuffle (v4i32 VR128:$src1), (v4i32 VR128:$src2),
-   SHUFP_int_shuffle_mask:$sm),
-  (v4i32 (SHUFPSrr VR128:$src1, VR128:$src2,
-  SHUFP_int_shuffle_mask:$sm)), Requires[HasSSE2];
-def : Pat(vector_shuffle (v4i32 VR128:$src1), (load addr:$src2),
-   SHUFP_int_shuffle_mask:$sm),
-  (v4i32 (SHUFPSrm VR128:$src1, addr:$src2,
-  SHUFP_int_shuffle_mask:$sm)), Requires[HasSSE2];
-
 // Special pshuf* cases: folding (bit_convert (loadv2i64 addr)).
 def : Pat(v4i32 (vector_shuffle (bc_v4i32 (loadv2i64 addr:$src1)), (undef),
   PSHUFD_shuffle_mask:$src2)),
@@ -1838,33 +1812,26 @@
   Requires[HasSSE2];
 
 
-// Special SHUFPSrr case: looks like a PSHUFD, like make both operands src1.
-// FIXME: when we want non two-address code, then we should use PSHUFD!
+// Special unary SHUFPSrr case.
+// FIXME: when we want non two-address code, then we should use PSHUFD?
 def : Pat(vector_shuffle (v4f32 VR128:$src1), (undef),
-   PSHUFD_fp_shuffle_mask:$sm),
-   (v4f32 (SHUFPSrr VR128:$src1, VR128:$src1, 
PSHUFD_fp_shuffle_mask:$sm)),
+   SHUFP_unary_shuffle_mask:$sm),
+   (v4f32 (SHUFPSrr VR128:$src1, VR128:$src1, 
SHUFP_unary_shuffle_mask:$sm)),
   Requires[HasSSE1];
-// Shuffle v4f32 with PSHUF* if others do not match.
+// Unary v4f32 shuffle with PSHUF* in order to fold a load.
 def : Pat(vector_shuffle (loadv4f32 addr:$src1), (undef),
-   PSHUFD_fp_shuffle_mask:$sm),
-  (v4f32 (PSHUFDmi addr:$src1, PSHUFD_fp_shuffle_mask:$sm)),
-  Requires[HasSSE2];
-def : Pat(vector_shuffle (v4f32 VR128:$src1), (undef),
-   PSHUFHW_fp_shuffle_mask:$sm),
-  (v4f32 (PSHUFHWri VR128:$src1, PSHUFHW_fp_shuffle_mask:$sm)),
-  Requires[HasSSE2];
-def : Pat(vector_shuffle (loadv4f32 addr:$src1), (undef),
-   PSHUFHW_fp_shuffle_mask:$sm),
-  (v4f32 (PSHUFHWmi addr:$src1, PSHUFHW_fp_shuffle_mask:$sm)),
-  Requires[HasSSE2];
-def : Pat(vector_shuffle (v4f32 VR128:$src1), (undef),
-   PSHUFLW_fp_shuffle_mask:$sm),
-  (v4f32 (PSHUFLWri VR128:$src1, PSHUFLW_fp_shuffle_mask:$sm)),
-  Requires[HasSSE2];
-def : Pat(vector_shuffle (loadv4f32 addr:$src1), (undef),
-   PSHUFLW_fp_shuffle_mask:$sm),
-  (v4f32 (PSHUFLWmi addr:$src1, PSHUFLW_fp_shuffle_mask:$sm)),
+   SHUFP_unary_shuffle_mask:$sm),
+  (v4f32 (PSHUFDmi addr:$src1, SHUFP_unary_shuffle_mask:$sm)),
   Requires[HasSSE2];
+// Special binary v4i32 shuffle cases with SHUFPS.
+def : Pat(vector_shuffle (v4i32 VR128:$src1), (v4i32 VR128:$src2),
+   PSHUFD_binary_shuffle_mask:$sm),
+  (v4i32 (SHUFPSrr VR128:$src1, VR128:$src2,
+  PSHUFD_binary_shuffle_mask:$sm)), Requires[HasSSE2];
+def : Pat(vector_shuffle (v4i32 VR128:$src1), (load addr:$src2),
+   PSHUFD_binary_shuffle_mask:$sm),
+  (v4i32 (SHUFPSrm VR128:$src1, addr:$src2,
+  

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-07 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.66 - 1.67
---
Log message:

Added patterns for MOVHPSmr and MOVLPSmr.


---
Diffs of the changes:  (+42 -4)

 X86InstrSSE.td |   46 ++
 1 files changed, 42 insertions(+), 4 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.66 
llvm/lib/Target/X86/X86InstrSSE.td:1.67
--- llvm/lib/Target/X86/X86InstrSSE.td:1.66 Thu Apr  6 18:53:29 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Fri Apr  7 16:20:58 2006
@@ -746,14 +746,23 @@
 }
 
 def MOVLPSmr : PSI0x13, MRMDestMem, (ops f64mem:$dst, VR128:$src),
-   movlps {$src, $dst|$dst, $src}, [];
+   movlps {$src, $dst|$dst, $src},
+   [(store (f64 (vector_extract (bc_v2f64 (v4f32 VR128:$src)),
+ (i32 0))), addr:$dst)];
 def MOVLPDmr : PDI0x13, MRMDestMem, (ops f64mem:$dst, VR128:$src),
movlpd {$src, $dst|$dst, $src},
[(store (f64 (vector_extract (v2f64 VR128:$src),
  (i32 0))), addr:$dst)];
 
+// v2f64 extract element 1 is always custom lowered to unpack high to low
+// and extract element 0 so the non-store version isn't too horrible.
 def MOVHPSmr : PSI0x17, MRMDestMem, (ops f64mem:$dst, VR128:$src),
-   movhps {$src, $dst|$dst, $src}, [];
+   movhps {$src, $dst|$dst, $src},
+   [(store (f64 (vector_extract
+ (v2f64 (vector_shuffle
+ (bc_v2f64 (v4f32 VR128:$src)), 
(undef),
+ UNPCKH_shuffle_mask)), (i32 0))),
+ addr:$dst)];
 def MOVHPDmr : PDI0x17, MRMDestMem, (ops f64mem:$dst, VR128:$src),
movhpd {$src, $dst|$dst, $src},
[(store (f64 (vector_extract
@@ -1703,31 +1712,60 @@
   Requires[HasSSE2];
 def : Pat(v2i64 (bitconvert (v16i8 VR128:$src))), (v2i64 VR128:$src),
   Requires[HasSSE2];
+def : Pat(v2i64 (bitconvert (v2f64 VR128:$src))), (v2i64 VR128:$src),
+  Requires[HasSSE2];
+def : Pat(v2i64 (bitconvert (v4f32 VR128:$src))), (v2i64 VR128:$src),
+  Requires[HasSSE2];
 def : Pat(v4i32 (bitconvert (v2i64 VR128:$src))), (v4i32 VR128:$src),
   Requires[HasSSE2];
 def : Pat(v4i32 (bitconvert (v8i16 VR128:$src))), (v4i32 VR128:$src),
   Requires[HasSSE2];
 def : Pat(v4i32 (bitconvert (v16i8 VR128:$src))), (v4i32 VR128:$src),
   Requires[HasSSE2];
+def : Pat(v4i32 (bitconvert (v2f64 VR128:$src))), (v4i32 VR128:$src),
+  Requires[HasSSE2];
+def : Pat(v4i32 (bitconvert (v4f32 VR128:$src))), (v4i32 VR128:$src),
+  Requires[HasSSE2];
 def : Pat(v8i16 (bitconvert (v2i64 VR128:$src))), (v4i32 VR128:$src),
   Requires[HasSSE2];
 def : Pat(v8i16 (bitconvert (v4i32 VR128:$src))), (v4i32 VR128:$src),
   Requires[HasSSE2];
 def : Pat(v8i16 (bitconvert (v16i8 VR128:$src))), (v4i32 VR128:$src),
   Requires[HasSSE2];
+def : Pat(v8i16 (bitconvert (v2f64 VR128:$src))), (v8i16 VR128:$src),
+  Requires[HasSSE2];
+def : Pat(v8i16 (bitconvert (v4f32 VR128:$src))), (v8i16 VR128:$src),
+  Requires[HasSSE2];
 def : Pat(v16i8 (bitconvert (v2i64 VR128:$src))), (v4i32 VR128:$src),
   Requires[HasSSE2];
 def : Pat(v16i8 (bitconvert (v4i32 VR128:$src))), (v4i32 VR128:$src),
   Requires[HasSSE2];
 def : Pat(v16i8 (bitconvert (v8i16 VR128:$src))), (v4i32 VR128:$src),
   Requires[HasSSE2];
-
-def : Pat(v4i32 (bitconvert (v4f32 VR128:$src))), (v4i32 VR128:$src),
+def : Pat(v16i8 (bitconvert (v2f64 VR128:$src))), (v16i8 VR128:$src),
+  Requires[HasSSE2];
+def : Pat(v16i8 (bitconvert (v4f32 VR128:$src))), (v16i8 VR128:$src),
+  Requires[HasSSE2];
+def : Pat(v4f32 (bitconvert (v2i64 VR128:$src))), (v4f32 VR128:$src),
   Requires[HasSSE2];
 def : Pat(v4f32 (bitconvert (v4i32 VR128:$src))), (v4f32 VR128:$src),
   Requires[HasSSE2];
+def : Pat(v4f32 (bitconvert (v8i16 VR128:$src))), (v4f32 VR128:$src),
+  Requires[HasSSE2];
+def : Pat(v4f32 (bitconvert (v16i8 VR128:$src))), (v4f32 VR128:$src),
+  Requires[HasSSE2];
 def : Pat(v4f32 (bitconvert (v2f64 VR128:$src))), (v4f32 VR128:$src),
   Requires[HasSSE2];
+def : Pat(v2f64 (bitconvert (v2i64 VR128:$src))), (v2f64 VR128:$src),
+  Requires[HasSSE2];
+def : Pat(v2f64 (bitconvert (v4i32 VR128:$src))), (v2f64 VR128:$src),
+  Requires[HasSSE2];
+def : Pat(v2f64 (bitconvert (v8i16 VR128:$src))), (v2f64 VR128:$src),
+  Requires[HasSSE2];
+def : Pat(v2f64 (bitconvert (v16i8 VR128:$src))), (v2f64 VR128:$src),
+  Requires[HasSSE2];
+def : Pat(v2f64 (bitconvert (v4f32 VR128:$src))), (v2f64 VR128:$src),
+  Requires[HasSSE2];
 
 // Zeroing a VR128 then do a MOVS* to the lower bits.
 def : Pat(v2f64 (X86zexts2vec FR64:$src)),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-07 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.67 - 1.68
---
Log message:

ldmxcsr and stmxcsr.


---
Diffs of the changes:  (+6 -2)

 X86InstrSSE.td |8 ++--
 1 files changed, 6 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.67 
llvm/lib/Target/X86/X86InstrSSE.td:1.68
--- llvm/lib/Target/X86/X86InstrSSE.td:1.67 Fri Apr  7 16:20:58 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Fri Apr  7 19:47:44 2006
@@ -1538,9 +1538,13 @@
 def SFENCE : I0xAE, MRM7m, (ops),
sfence, [], TB, Requires[HasSSE1];
 
-// Load MXCSR register
+// MXCSR register
 def LDMXCSR : I0xAE, MRM2m, (ops i32mem:$src),
-ldmxcsr {$src|$src}, [], TB, Requires[HasSSE1];
+ldmxcsr $src,
+[(int_x86_sse_ldmxcsr addr:$src)], TB, Requires[HasSSE1];
+def STMXCSR : I0xAE, MRM3m, (ops i32mem:$dst),
+stmxcsr $dst,
+[(int_x86_sse_stmxcsr addr:$dst)], TB, Requires[HasSSE1];
 
 
//===--===//
 // Alias Instructions



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-04 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.58 - 1.59
---
Log message:

PSHUF* encoding bugs.


---
Diffs of the changes:  (+6 -6)

 X86InstrSSE.td |   12 ++--
 1 files changed, 6 insertions(+), 6 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.58 
llvm/lib/Target/X86/X86InstrSSE.td:1.59
--- llvm/lib/Target/X86/X86InstrSSE.td:1.58 Mon Apr  3 22:04:07 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Apr  4 13:40:36 2006
@@ -1239,14 +1239,14 @@
 }
 
 // Shuffle and unpack instructions
-def PSHUFWrr : PSIi80x70, MRMDestReg,
+def PSHUFWrr : PSIi80x70, MRMSrcReg,
  (ops VR64:$dst, VR64:$src1, i8imm:$src2),
  pshufw {$src2, $src1, $dst|$dst, $src1, $src2}, [];
 def PSHUFWrm : PSIi80x70, MRMSrcMem,
  (ops VR64:$dst, i64mem:$src1, i8imm:$src2),
  pshufw {$src2, $src1, $dst|$dst, $src1, $src2}, [];
 
-def PSHUFDrr : PDIi80x70, MRMDestReg,
+def PSHUFDrr : PDIi80x70, MRMSrcReg,
  (ops VR128:$dst, VR128:$src1, i8imm:$src2),
  pshufd {$src2, $src1, $dst|$dst, $src1, $src2},
  [(set VR128:$dst, (v4i32 (vector_shuffle
@@ -1260,14 +1260,14 @@
PSHUFD_shuffle_mask:$src2)))];
 
 // SSE2 with ImmT == Imm8 and XS prefix.
-def PSHUFHWrr : Ii80x70, MRMDestReg,
+def PSHUFHWrr : Ii80x70, MRMSrcReg,
 (ops VR128:$dst, VR128:$src1, i8imm:$src2),
 pshufhw {$src2, $src1, $dst|$dst, $src1, $src2},
 [(set VR128:$dst, (v8i16 (vector_shuffle
   VR128:$src1, (undef),
   PSHUFHW_shuffle_mask:$src2)))],
 XS, Requires[HasSSE2];
-def PSHUFHWrm : Ii80x70, MRMDestMem,
+def PSHUFHWrm : Ii80x70, MRMSrcMem,
 (ops VR128:$dst, i128mem:$src1, i8imm:$src2),
 pshufhw {$src2, $src1, $dst|$dst, $src1, $src2},
 [(set VR128:$dst, (v8i16 (vector_shuffle
@@ -1276,14 +1276,14 @@
 XS, Requires[HasSSE2];
 
 // SSE2 with ImmT == Imm8 and XD prefix.
-def PSHUFLWrr : Ii80x70, MRMDestReg,
+def PSHUFLWrr : Ii80x70, MRMSrcReg,
 (ops VR128:$dst, VR128:$src1, i32i8imm:$src2),
 pshuflw {$src2, $src1, $dst|$dst, $src1, $src2},
 [(set VR128:$dst, (v8i16 (vector_shuffle
   VR128:$src1, (undef),
   PSHUFLW_shuffle_mask:$src2)))],
 XD, Requires[HasSSE2];
-def PSHUFLWrm : Ii80x70, MRMDestMem,
+def PSHUFLWrm : Ii80x70, MRMSrcMem,
 (ops VR128:$dst, i128mem:$src1, i32i8imm:$src2),
 pshuflw {$src2, $src1, $dst|$dst, $src1, $src2},
 [(set VR128:$dst, (v8i16 (vector_shuffle



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td X86RegisterInfo.cpp

2006-04-04 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.59 - 1.60
X86RegisterInfo.cpp updated: 1.133 - 1.134
---
Log message:

Minor fixes + naming changes.


---
Diffs of the changes:  (+157 -156)

 X86InstrSSE.td  |  309 ++--
 X86RegisterInfo.cpp |4 
 2 files changed, 157 insertions(+), 156 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.59 
llvm/lib/Target/X86/X86InstrSSE.td:1.60
--- llvm/lib/Target/X86/X86InstrSSE.td:1.59 Tue Apr  4 13:40:36 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Apr  4 14:12:30 2006
@@ -335,45 +335,46 @@
 [(set FR64:$dst, (fsub FR64:$src1, (loadf64 addr:$src2)))];
 }
 
-def SQRTSSrr : SSI0x51, MRMSrcReg, (ops FR32:$dst, FR32:$src),
- sqrtss {$src, $dst|$dst, $src},
- [(set FR32:$dst, (fsqrt FR32:$src))];
-def SQRTSSrm : SSI0x51, MRMSrcMem, (ops FR32:$dst, f32mem:$src),
+def SQRTSSr : SSI0x51, MRMSrcReg, (ops FR32:$dst, FR32:$src),
+sqrtss {$src, $dst|$dst, $src},
+[(set FR32:$dst, (fsqrt FR32:$src))];
+def SQRTSSm : SSI0x51, MRMSrcMem, (ops FR32:$dst, f32mem:$src),
  sqrtss {$src, $dst|$dst, $src},
  [(set FR32:$dst, (fsqrt (loadf32 addr:$src)))];
-def SQRTSDrr : SDI0x51, MRMSrcReg, (ops FR64:$dst, FR64:$src),
+def SQRTSDr : SDI0x51, MRMSrcReg, (ops FR64:$dst, FR64:$src),
  sqrtsd {$src, $dst|$dst, $src},
  [(set FR64:$dst, (fsqrt FR64:$src))];
-def SQRTSDrm : SDI0x51, MRMSrcMem, (ops FR64:$dst, f64mem:$src),
+def SQRTSDm : SDI0x51, MRMSrcMem, (ops FR64:$dst, f64mem:$src),
  sqrtsd {$src, $dst|$dst, $src},
  [(set FR64:$dst, (fsqrt (loadf64 addr:$src)))];
 
-def RSQRTSSrr : SSI0x52, MRMSrcReg, (ops FR32:$dst, FR32:$src),
+def RSQRTSSr : SSI0x52, MRMSrcReg, (ops FR32:$dst, FR32:$src),
rsqrtss {$src, $dst|$dst, $src}, [];
-def RSQRTSSrm : SSI0x52, MRMSrcMem, (ops FR32:$dst, f32mem:$src),
+def RSQRTSSm : SSI0x52, MRMSrcMem, (ops FR32:$dst, f32mem:$src),
rsqrtss {$src, $dst|$dst, $src}, [];
-def RCPSSrr : SSI0x53, MRMSrcReg, (ops FR32:$dst, FR32:$src),
-  rcpss {$src, $dst|$dst, $src}, [];
-def RCPSSrm : SSI0x53, MRMSrcMem, (ops FR32:$dst, f32mem:$src),
-  rcpss {$src, $dst|$dst, $src}, [];
-
-def MAXSSrr : SSI0x5F, MRMSrcReg, (ops FR32:$dst, FR32:$src),
-  maxss {$src, $dst|$dst, $src}, [];
-def MAXSSrm : SSI0x5F, MRMSrcMem, (ops FR32:$dst, f32mem:$src),
-  maxss {$src, $dst|$dst, $src}, [];
-def MAXSDrr : SDI0x5F, MRMSrcReg, (ops FR64:$dst, FR64:$src),
-  maxsd {$src, $dst|$dst, $src}, [];
-def MAXSDrm : SDI0x5F, MRMSrcMem, (ops FR64:$dst, f64mem:$src),
-  maxsd {$src, $dst|$dst, $src}, [];
-def MINSSrr : SSI0x5D, MRMSrcReg, (ops FR32:$dst, FR32:$src),
-  minss {$src, $dst|$dst, $src}, [];
-def MINSSrm : SSI0x5D, MRMSrcMem, (ops FR32:$dst, f32mem:$src),
-  minss {$src, $dst|$dst, $src}, [];
-def MINSDrr : SDI0x5D, MRMSrcReg, (ops FR64:$dst, FR64:$src),
-  minsd {$src, $dst|$dst, $src}, [];
-def MINSDrm : SDI0x5D, MRMSrcMem, (ops FR64:$dst, f64mem:$src),
-  minsd {$src, $dst|$dst, $src}, [];
+def RCPSSr : SSI0x53, MRMSrcReg, (ops FR32:$dst, FR32:$src),
+ rcpss {$src, $dst|$dst, $src}, [];
+def RCPSSm : SSI0x53, MRMSrcMem, (ops FR32:$dst, f32mem:$src),
+ rcpss {$src, $dst|$dst, $src}, [];
 
+let isTwoAddress = 1 in {
+def MAXSSrr : SSI0x5F, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
+  maxss {$src2, $dst|$dst, $src2}, [];
+def MAXSSrm : SSI0x5F, MRMSrcMem, (ops FR32:$dst, FR32:$src1, f32mem:$src2),
+  maxss {$src2, $dst|$dst, $src2}, [];
+def MAXSDrr : SDI0x5F, MRMSrcReg, (ops FR64:$dst, FR32:$src1, FR64:$src2),
+  maxsd {$src2, $dst|$dst, $src2}, [];
+def MAXSDrm : SDI0x5F, MRMSrcMem, (ops FR64:$dst, FR32:$src1, f64mem:$src2),
+  maxsd {$src2, $dst|$dst, $src2}, [];
+def MINSSrr : SSI0x5D, MRMSrcReg, (ops FR32:$dst, FR32:$src1, FR32:$src2),
+  minss {$src2, $dst|$dst, $src2}, [];
+def MINSSrm : SSI0x5D, MRMSrcMem, (ops FR32:$dst, FR32:$src1, f32mem:$src2),
+  minss {$src2, $dst|$dst, $src2}, [];
+def MINSDrr : SDI0x5D, MRMSrcReg, (ops FR64:$dst, FR32:$src1, FR64:$src2),
+  minsd {$src2, $dst|$dst, $src2}, [];
+def MINSDrm : SDI0x5D, MRMSrcMem, (ops FR64:$dst, FR32:$src1, f64mem:$src2),
+  minsd {$src2, $dst|$dst, $src2}, [];
+}
 
 // Aliases to match intrinsics which expect XMM operand(s).
 let isTwoAddress = 1 in {
@@ -416,23 +417,23 @@
int_x86_sse2_sub_sd;
 }
 
-def Int_SQRTSSrr : SS_Intr0x51, sqrtss {$src, $dst|$dst, $src},
-int_x86_sse_sqrt_ss;
-def 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-04 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.60 - 1.61
---
Log message:

Added pslldq and psrldq.


---
Diffs of the changes:  (+18 -0)

 X86InstrSSE.td |   18 ++
 1 files changed, 18 insertions(+)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.60 
llvm/lib/Target/X86/X86InstrSSE.td:1.61
--- llvm/lib/Target/X86/X86InstrSSE.td:1.60 Tue Apr  4 14:12:30 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Apr  4 16:49:39 2006
@@ -57,6 +57,11 @@
   return N-isExactlyValue(+0.0);
 }];
 
+def PSxLDQ_imm  : SDNodeXFormimm, [{
+  // Transformation function: imm  3
+  return getI32Imm(N-getValue()  3);
+}];
+
 // SHUFFLE_get_shuf_imm xform function: convert vector_shuffle mask to PSHUF*,
 // SHUFP* etc. imm.
 def SHUFFLE_get_shuf_imm : SDNodeXFormbuild_vector, [{
@@ -1159,6 +1164,13 @@
 (load addr:$src2];
 }
 
+let isTwoAddress = 1 in {
+def PSLLDQri : PDIi80x73, MRM7r, (ops VR128:$dst, VR128:$src1, 
i32i8imm:$src2),
+ pslldq {$src2, $dst|$dst, $src2}, [];
+def PSRLDQri : PDIi80x73, MRM7r, (ops VR128:$dst, VR128:$src1, 
i32i8imm:$src2),
+ psrldq {$src2, $dst|$dst, $src2}, [];
+}
+
 // Logical
 let isTwoAddress = 1 in {
 let isCommutable = 1 in {
@@ -1721,6 +1733,12 @@
   (v4f32 (PSHUFLWmi addr:$src1, PSHUFLW_fp_shuffle_mask:$sm)),
   Requires[HasSSE2];
 
+// 128-bit logical shifts
+def : Pat(int_x86_sse2_psll_dq VR128:$src1, imm:$src2),
+  (v2i64 (PSLLDQri VR128:$src1, (PSxLDQ_imm imm:$src2)));
+def : Pat(int_x86_sse2_psrl_dq VR128:$src1, imm:$src2),
+  (v2i64 (PSRLDQri VR128:$src1, (PSxLDQ_imm imm:$src2)));
+
 // Logical ops
 def : Pat(and (bc_v4i32 (v4f32 VR128:$src1)), (loadv4i32 addr:$src2)),
   (ANDPSrm VR128:$src1, addr:$src2);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-03 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.55 - 1.56
---
Log message:

Some SSE1 intrinsics: min, max, sqrt, etc.


---
Diffs of the changes:  (+91 -78)

 X86InstrSSE.td |  169 ++---
 1 files changed, 91 insertions(+), 78 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.55 
llvm/lib/Target/X86/X86InstrSSE.td:1.56
--- llvm/lib/Target/X86/X86InstrSSE.td:1.55 Mon Apr  3 17:30:54 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Apr  3 18:49:17 2006
@@ -171,6 +171,45 @@
 
 
//===--===//
 // Helpers for defining instructions that directly correspond to intrinsics.
+class SS_Intrrbits8 o, string asm, Intrinsic IntId, ValueType Ty
+  : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+[(set VR128:$dst, (Ty (IntId VR128:$src1, VR128:$src2)))];
+class SS_Intrmbits8 o, string asm, Intrinsic IntId, ValueType Ty
+  : SSIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f32mem:$src2), asm,
+[(set VR128:$dst, (Ty (IntId VR128:$src1, (load addr:$src2];
+class SD_Intrrbits8 o, string asm, Intrinsic IntId, ValueType Ty
+  : SDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+[(set VR128:$dst, (Ty (IntId VR128:$src1, VR128:$src2)))];
+class SD_Intrmbits8 o, string asm, Intrinsic IntId, ValueType Ty
+  : SDIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f64mem:$src2), asm,
+[(set VR128:$dst, (Ty (IntId VR128:$src1, (load addr:$src2];
+
+class PS_Intrbits8 o, string asm, Intrinsic IntId
+  : PSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
+[(set VR128:$dst, (IntId VR128:$src))];
+class PS_Intmbits8 o, string asm, Intrinsic IntId
+  : PSIo, MRMSrcMem, (ops VR128:$dst, f32mem:$src), asm,
+[(set VR128:$dst, (IntId (loadv4f32 addr:$src)))];
+class PD_Intrbits8 o, string asm, Intrinsic IntId
+  : PDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
+[(set VR128:$dst, (IntId VR128:$src))];
+class PD_Intmbits8 o, string asm, Intrinsic IntId
+  : PDIo, MRMSrcMem, (ops VR128:$dst, f64mem:$src), asm,
+[(set VR128:$dst, (IntId (loadv2f64 addr:$src)))];
+
+class PS_Intrrbits8 o, string asm, Intrinsic IntId
+  : PSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+[(set VR128:$dst, (IntId VR128:$src1, VR128:$src2))];
+class PS_Intrmbits8 o, string asm, Intrinsic IntId
+  : PSIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f32mem:$src2), asm,
+[(set VR128:$dst, (IntId VR128:$src1, (loadv4f32 addr:$src2)))];
+class PD_Intrrbits8 o, string asm, Intrinsic IntId
+  : PDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+[(set VR128:$dst, (IntId VR128:$src1, VR128:$src2))];
+class PD_Intrmbits8 o, string asm, Intrinsic IntId
+  : PDIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f64mem:$src2), asm,
+[(set VR128:$dst, (IntId VR128:$src1, (loadv2f64 addr:$src2)))];
+
 class S3S_Intrrbits8 o, string asm, Intrinsic IntId
   : S3SIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
  [(set VR128:$dst, (v4f32 (IntId VR128:$src1, VR128:$src2)))];
@@ -435,46 +474,22 @@
 (load addr:$src)))];
 
 let isTwoAddress = 1 in {
-def Int_MAXSSrr : SSI0x5F, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
-VR128:$src2),
-  maxss {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (int_x86_sse_max_ss VR128:$src1,
- VR128:$src2))];
-def Int_MAXSSrm : SSI0x5F, MRMSrcMem, (ops VR128:$dst, VR128:$src1,
-f32mem:$src2),
-  maxss {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (int_x86_sse_max_ss VR128:$src1,
- (load addr:$src2)))];
-def Int_MAXSDrr : SDI0x5F, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
-VR128:$src2),
-  maxsd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (int_x86_sse2_max_sd VR128:$src1,
- VR128:$src2))];
-def Int_MAXSDrm : SDI0x5F, MRMSrcMem, (ops VR128:$dst, VR128:$src1,
-f64mem:$src2),
-  maxsd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (int_x86_sse2_max_sd VR128:$src1,
- (load addr:$src2)))];
-def Int_MINSSrr : SSI0x5D, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
-VR128:$src2),
-  minss {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (int_x86_sse_min_ss VR128:$src1,
- VR128:$src2))];
-def Int_MINSSrm : SSI0x5D, MRMSrcMem, (ops VR128:$dst, VR128:$src1,
- 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-04-03 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.56 - 1.57
---
Log message:

Compact some intrinsic definitions.


---
Diffs of the changes:  (+84 -123)

 X86InstrSSE.td |  207 +++--
 1 files changed, 84 insertions(+), 123 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.56 
llvm/lib/Target/X86/X86InstrSSE.td:1.57
--- llvm/lib/Target/X86/X86InstrSSE.td:1.56 Mon Apr  3 18:49:17 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Apr  3 19:10:53 2006
@@ -171,18 +171,31 @@
 
 
//===--===//
 // Helpers for defining instructions that directly correspond to intrinsics.
-class SS_Intrrbits8 o, string asm, Intrinsic IntId, ValueType Ty
+class SS_Intrbits8 o, string asm, Intrinsic IntId
+  : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
+[(set VR128:$dst, (v4f32 (IntId VR128:$src)))];
+class SS_Intmbits8 o, string asm, Intrinsic IntId
+  : SSIo, MRMSrcMem, (ops VR128:$dst, f32mem:$src), asm,
+[(set VR128:$dst, (v4f32 (IntId (load addr:$src];
+class SD_Intrbits8 o, string asm, Intrinsic IntId
+  : SDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
+[(set VR128:$dst, (v2f64 (IntId VR128:$src)))];
+class SD_Intmbits8 o, string asm, Intrinsic IntId
+  : SDIo, MRMSrcMem, (ops VR128:$dst, f64mem:$src), asm,
+[(set VR128:$dst, (v2f64 (IntId (load addr:$src];
+
+class SS_Intrrbits8 o, string asm, Intrinsic IntId
   : SSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
-[(set VR128:$dst, (Ty (IntId VR128:$src1, VR128:$src2)))];
-class SS_Intrmbits8 o, string asm, Intrinsic IntId, ValueType Ty
+[(set VR128:$dst, (v4f32 (IntId VR128:$src1, VR128:$src2)))];
+class SS_Intrmbits8 o, string asm, Intrinsic IntId
   : SSIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f32mem:$src2), asm,
-[(set VR128:$dst, (Ty (IntId VR128:$src1, (load addr:$src2];
-class SD_Intrrbits8 o, string asm, Intrinsic IntId, ValueType Ty
+[(set VR128:$dst, (v4f32 (IntId VR128:$src1, (load addr:$src2];
+class SD_Intrrbits8 o, string asm, Intrinsic IntId
   : SDIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
-[(set VR128:$dst, (Ty (IntId VR128:$src1, VR128:$src2)))];
-class SD_Intrmbits8 o, string asm, Intrinsic IntId, ValueType Ty
+[(set VR128:$dst, (v2f64 (IntId VR128:$src1, VR128:$src2)))];
+class SD_Intrmbits8 o, string asm, Intrinsic IntId
   : SDIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f64mem:$src2), asm,
-[(set VR128:$dst, (Ty (IntId VR128:$src1, (load addr:$src2];
+[(set VR128:$dst, (v2f64 (IntId VR128:$src1, (load addr:$src2];
 
 class PS_Intrbits8 o, string asm, Intrinsic IntId
   : PSIo, MRMSrcReg, (ops VR128:$dst, VR128:$src), asm,
@@ -365,131 +378,79 @@
 // Aliases to match intrinsics which expect XMM operand(s).
 let isTwoAddress = 1 in {
 let isCommutable = 1 in {
-def Int_ADDSSrr : SSI0x58, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
-VR128:$src2),
-addss {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse_add_ss VR128:$src1,
-   VR128:$src2))];
-def Int_ADDSDrr : SDI0x58, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
-VR128:$src2),
-addsd {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_add_sd VR128:$src1,
-   VR128:$src2))];
-def Int_MULSSrr : SSI0x59, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
-VR128:$src2),
-mulss {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse_mul_ss VR128:$src1,
-   VR128:$src2))];
-def Int_MULSDrr : SDI0x59, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
-VR128:$src2),
-mulsd {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_mul_sd VR128:$src1,
-   VR128:$src2))];
-}
-
-def Int_ADDSSrm : SSI0x58, MRMSrcMem, (ops VR128:$dst, VR128:$src1,
-f32mem:$src2),
-addss {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse_add_ss VR128:$src1,
-   (load addr:$src2)))];
-def Int_ADDSDrm : SDI0x58, MRMSrcMem, (ops VR128:$dst, VR128:$src1,
-f64mem:$src2),
-addsd {$src2, $dst|$dst, $src2},
-[(set VR128:$dst, (int_x86_sse2_add_sd VR128:$src1,
-   (load addr:$src2)))];
-def Int_MULSSrm : SSI0x59, MRMSrcMem, (ops VR128:$dst, VR128:$src1,
-f32mem:$src2),
-mulss {$src2, $dst|$dst, $src2},
- 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-31 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.51 - 1.52
---
Log message:

Added support for SSE3 horizontal ops: haddp{s|d} and hsub{s|d}.


---
Diffs of the changes:  (+43 -0)

 X86InstrSSE.td |   43 +++
 1 files changed, 43 insertions(+)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.51 
llvm/lib/Target/X86/X86InstrSSE.td:1.52
--- llvm/lib/Target/X86/X86InstrSSE.td:1.51 Fri Mar 31 13:22:53 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Fri Mar 31 15:29:33 2006
@@ -145,6 +145,8 @@
 // PDI - SSE2 instructions with TB and OpSize prefixes.
 // PSIi8 - SSE1 instructions with ImmT == Imm8 and TB prefix.
 // PDIi8 - SSE2 instructions with ImmT == Imm8 and TB and OpSize prefixes.
+// S3SI - SSE3 instructions with XD prefix.
+// S3DI - SSE3 instructions with TB and OpSize prefixes.
 class SSIbits8 o, Format F, dag ops, string asm, listdag pattern
   : Io, F, ops, asm, pattern, XS, Requires[HasSSE1];
 class SDIbits8 o, Format F, dag ops, string asm, listdag pattern
@@ -161,6 +163,27 @@
   : X86Insto, F, Imm8, ops, asm, TB, OpSize, Requires[HasSSE2] {
   let Pattern = pattern;
 }
+class S3SIbits8 o, Format F, dag ops, string asm, listdag pattern
+  : Io, F, ops, asm, pattern, XD, Requires[HasSSE3];
+class S3DIbits8 o, Format F, dag ops, string asm, listdag pattern
+  : Io, F, ops, asm, pattern, TB, OpSize, Requires[HasSSE3];
+
+//===--===//
+// Helpers for defining instructions that directly correspond to intrinsics.
+class S3S_Intrrbits8 o, string asm, Intrinsic IntId
+  : S3SIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+ [(set VR128:$dst, (v4f32 (IntId VR128:$src1, VR128:$src2)))];
+class S3S_Intrmbits8 o, string asm, Intrinsic IntId
+  : S3SIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2), asm,
+ [(set VR128:$dst, (v4f32 (IntId VR128:$src1,
+   (loadv4f32 addr:$src2];
+class S3D_Intrrbits8 o, string asm, Intrinsic IntId
+  : S3DIo, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2), asm,
+ [(set VR128:$dst, (v2f64 (IntId VR128:$src1, VR128:$src2)))];
+class S3D_Intrmbits8 o, string asm, Intrinsic IntId
+  : S3DIo, MRMSrcMem, (ops VR128:$dst, VR128:$src1, f128mem:$src2), asm,
+ [(set VR128:$dst, (v2f64 (IntId VR128:$src1,
+   (loadv2f64 addr:$src2];
 
 // Some 'special' instructions
 def IMPLICIT_DEF_FR32 : I0, Pseudo, (ops FR32:$dst),
@@ -1073,6 +1096,26 @@
   UNPCKL_shuffle_mask)))];
 }
 
+// Horizontal ops
+let isTwoAddress = 1 in {
+def HADDPSrr : S3S_Intrr0x7C, haddps {$src2, $dst|$dst, $src2},
+  int_x86_sse3_hadd_ps;
+def HADDPSrm : S3S_Intrm0x7C, haddps {$src2, $dst|$dst, $src2},
+  int_x86_sse3_hadd_ps;
+def HADDPDrr : S3D_Intrr0x7C, haddpd {$src2, $dst|$dst, $src2},
+  int_x86_sse3_hadd_pd;
+def HADDPDrm : S3D_Intrm0x7C, haddpd {$src2, $dst|$dst, $src2},
+  int_x86_sse3_hadd_pd;
+def HSUBPSrr : S3S_Intrr0x7C, hsubps {$src2, $dst|$dst, $src2},
+  int_x86_sse3_hsub_ps;
+def HSUBPSrm : S3S_Intrm0x7C, hsubps {$src2, $dst|$dst, $src2},
+  int_x86_sse3_hsub_ps;
+def HSUBPDrr : S3D_Intrr0x7C, hsubpd {$src2, $dst|$dst, $src2},
+  int_x86_sse3_hsub_pd;
+def HSUBPDrm : S3D_Intrm0x7C, hsubpd {$src2, $dst|$dst, $src2},
+  int_x86_sse3_hsub_pd;
+}
+
 
//===--===//
 // SSE integer instructions
 
//===--===//



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-29 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.42 - 1.43
---
Log message:

Floating point logical operation patterns should match bit_convert. Or else
integer vector logical operations would match andp{s|d} instead of pand.


---
Diffs of the changes:  (+53 -29)

 X86InstrSSE.td |   82 -
 1 files changed, 53 insertions(+), 29 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.42 
llvm/lib/Target/X86/X86InstrSSE.td:1.43
--- llvm/lib/Target/X86/X86InstrSSE.td:1.42 Tue Mar 28 21:04:49 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Mar 29 12:47:40 2006
@@ -45,6 +45,9 @@
 def loadv4i32: PatFrag(ops node:$ptr), (v4i32 (load node:$ptr));
 def loadv2i64: PatFrag(ops node:$ptr), (v2i64 (load node:$ptr));
 
+def bc_v4i32 : PatFrag(ops node:$in), (v4i32 (bitconvert node:$in));
+def bc_v2i64 : PatFrag(ops node:$in), (v2i64 (bitconvert node:$in));
+
 def fp32imm0 : PatLeaf(f32 fpimm), [{
   return N-isExactlyValue(+0.0);
 }];
@@ -835,64 +838,85 @@
 let isCommutable = 1 in {
 def ANDPSrr : PSI0x54, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   andps {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4i32 (and VR128:$src1, VR128:$src2)))];
+  [(set VR128:$dst,
+(and (bc_v4i32 (v4f32 VR128:$src1)),
+ (bc_v4i32 (v4f32 VR128:$src2];
 def ANDPDrr : PDI0x54, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
 andpd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2i64 (and VR128:$src1, VR128:$src2)))];
+  [(set VR128:$dst,
+(and (bc_v2i64 (v2f64 VR128:$src1)),
+ (bc_v2i64 (v2f64 VR128:$src2];
 def ORPSrr  : PSI0x56, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   orps {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4i32 (or VR128:$src1, VR128:$src2)))];
+  [(set VR128:$dst,
+(or (bc_v4i32 (v4f32 VR128:$src1)),
+ (bc_v4i32 (v4f32 VR128:$src2];
 def ORPDrr  : PDI0x56, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   orpd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2i64 (or VR128:$src1, VR128:$src2)))];
+  [(set VR128:$dst,
+(or (bc_v2i64 (v2f64 VR128:$src1)),
+ (bc_v2i64 (v2f64 VR128:$src2];
 def XORPSrr : PSI0x57, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   xorps {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4i32 (xor VR128:$src1, VR128:$src2)))];
+  [(set VR128:$dst,
+(xor (bc_v4i32 (v4f32 VR128:$src1)),
+ (bc_v4i32 (v4f32 VR128:$src2];
 def XORPDrr : PDI0x57, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
   xorpd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2i64 (xor VR128:$src1, VR128:$src2)))];
+  [(set VR128:$dst,
+(xor (bc_v2i64 (v2f64 VR128:$src1)),
+ (bc_v2i64 (v2f64 VR128:$src2];
 }
 def ANDPSrm : PSI0x54, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
   andps {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4i32 (and VR128:$src1,
-(load addr:$src2];
+[(set VR128:$dst,
+  (and (bc_v4i32 (v4f32 VR128:$src1)),
+   (bc_v4i32 (loadv4f32 addr:$src2];
 def ANDPDrm : PDI0x54, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
   andpd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2i64 (and VR128:$src1,
-(load addr:$src2];
+[(set VR128:$dst,
+  (and (bc_v2i64 (v2f64 VR128:$src1)),
+   (bc_v2i64 (loadv2f64 addr:$src2];
 def ORPSrm  : PSI0x56, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
   orps {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v4i32 (or VR128:$src1,
-(load addr:$src2];
+ [(set VR128:$dst,
+   (or (bc_v4i32 (v4f32 VR128:$src1)),
+(bc_v4i32 (loadv4f32 addr:$src2];
 def ORPDrm  : PDI0x56, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f128mem:$src2),
 orpd {$src2, $dst|$dst, $src2},
-  [(set VR128:$dst, (v2i64 (or VR128:$src1,
-(load addr:$src2];
+ [(set VR128:$dst,
+   (or (bc_v2i64 (v2f64 VR128:$src1)),
+(bc_v2i64 (loadv2f64 addr:$src2];
 def XORPSrm : PSI0x57, MRMSrcMem, (ops VR128:$dst, 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-29 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.45 - 1.46
---
Log message:

Change SSE pack operation definitions to fit what the intrinsics expected.
For example, packsswb actually creates a v16i8 from a pair of v8i16. But since
the intrinsic specification forces the output type to match the operands.


---
Diffs of the changes:  (+20 -20)

 X86InstrSSE.td |   40 
 1 files changed, 20 insertions(+), 20 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.45 
llvm/lib/Target/X86/X86InstrSSE.td:1.46
--- llvm/lib/Target/X86/X86InstrSSE.td:1.45 Wed Mar 29 17:07:14 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Mar 29 17:52:48 2006
@@ -1182,39 +1182,39 @@
 def PACKSSWBrr : PDI0x63, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
VR128:$src2),
  packsswb {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v16i8 (int_x86_sse2_packsswb_128
-   (v8i16 VR128:$src1),
-   (v8i16 VR128:$src2];
+ [(set VR128:$dst, (v8i16 (int_x86_sse2_packsswb_128
+   VR128:$src1,
+   VR128:$src2)))];
 def PACKSSWBrm : PDI0x63, MRMSrcMem, (ops VR128:$dst, VR128:$src1,
i128mem:$src2),
  packsswb {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v16i8 (int_x86_sse2_packsswb_128
-   (v8i16 VR128:$src1),
-   (loadv8i16 addr:$src2];
+ [(set VR128:$dst, (v8i16 (int_x86_sse2_packsswb_128
+   VR128:$src1,
+ (bc_v8i16 (loadv2f64 
addr:$src2)];
 def PACKSSDWrr : PDI0x6B, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
VR128:$src2),
- packsswb {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v8i16 (int_x86_sse2_packssdw_128
-   (v4i32 VR128:$src1),
-   (v4i32 VR128:$src2];
+ packssdw {$src2, $dst|$dst, $src2},
+ [(set VR128:$dst, (v4i32 (int_x86_sse2_packssdw_128
+   VR128:$src1,
+   VR128:$src2)))];
 def PACKSSDWrm : PDI0x6B, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
i128mem:$src2),
- packsswb {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v8i16 (int_x86_sse2_packssdw_128
-   (v4i32 VR128:$src1),
-   (loadv4i32 addr:$src2];
+ packssdw {$src2, $dst|$dst, $src2},
+ [(set VR128:$dst, (v4i32 (int_x86_sse2_packssdw_128
+   VR128:$src1,
+ (bc_v4i32 (loadv2i64 
addr:$src2)];
 def PACKUSWBrr : PDI0x67, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
VR128:$src2),
  packuswb {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v16i8 (int_x86_sse2_packuswb_128
-   (v8i16 VR128:$src1),
-   (v8i16 VR128:$src2];
+ [(set VR128:$dst, (v8i16 (int_x86_sse2_packuswb_128
+   VR128:$src1,
+   VR128:$src2)))];
 def PACKUSWBrm : PDI0x67, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
i128mem:$src2),
  packuswb {$src2, $dst|$dst, $src2},
- [(set VR128:$dst, (v16i8 (int_x86_sse2_packuswb_128
-   (v8i16 VR128:$src1),
-   (loadv8i16 addr:$src2];
+ [(set VR128:$dst, (v8i16 (int_x86_sse2_packuswb_128
+   VR128:$src1,
+ (bc_v8i16 (loadv2i64 
addr:$src2)];
 }
 
 // Shuffle and unpack instructions



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-29 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.46 - 1.47
---
Log message:

Add 128-bit pmovmskb intrinsic support.


---
Diffs of the changes:  (+12 -7)

 X86InstrSSE.td |   19 ---
 1 files changed, 12 insertions(+), 7 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.46 
llvm/lib/Target/X86/X86InstrSSE.td:1.47
--- llvm/lib/Target/X86/X86InstrSSE.td:1.46 Wed Mar 29 17:52:48 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Mar 29 18:33:26 2006
@@ -686,13 +686,6 @@
   MOVHLPS_shuffle_mask)))];
 }
 
-def MOVMSKPSrr : PSI0x50, MRMSrcReg, (ops R32:$dst, VR128:$src),
- movmskps {$src, $dst|$dst, $src},
- [(set R32:$dst, (int_x86_sse_movmsk_ps VR128:$src))];
-def MOVMSKPDrr : PSI0x50, MRMSrcReg, (ops R32:$dst, VR128:$src),
- movmskpd {$src, $dst|$dst, $src},
- [(set R32:$dst, (int_x86_sse2_movmskpd VR128:$src))];
-
 // Conversion instructions
 def CVTPI2PSrr : PSI0x2A, MRMSrcReg, (ops VR128:$dst, VR64:$src),
  cvtpi2ps {$src, $dst|$dst, $src}, [];
@@ -1374,6 +1367,18 @@
 // Miscellaneous Instructions
 
//===--===//
 
+// Mask creation
+def MOVMSKPSrr : PSI0x50, MRMSrcReg, (ops R32:$dst, VR128:$src),
+ movmskps {$src, $dst|$dst, $src},
+ [(set R32:$dst, (int_x86_sse_movmsk_ps VR128:$src))];
+def MOVMSKPDrr : PSI0x50, MRMSrcReg, (ops R32:$dst, VR128:$src),
+ movmskpd {$src, $dst|$dst, $src},
+ [(set R32:$dst, (int_x86_sse2_movmskpd VR128:$src))];
+
+def PMOVMSKBrr : PDI0xD7, MRMSrcReg, (ops R32:$dst, VR128:$src),
+ pmovmskb {$src, $dst|$dst, $src},
+ [(set R32:$dst, (int_x86_sse2_pmovmskb_128 VR128:$src))];
+
 // Prefetching loads
 def PREFETCHT0   : I0x18, MRM1m, (ops i8mem:$src),
  prefetcht0 $src, [], TB,



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-29 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.47 - 1.48
---
Log message:

Add support for _mm_cmp{cc}_ss and _mm_cmp{cc}_ps intrinsics

---
Diffs of the changes:  (+35 -9)

 X86InstrSSE.td |   44 +++-
 1 files changed, 35 insertions(+), 9 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.47 
llvm/lib/Target/X86/X86InstrSSE.td:1.48
--- llvm/lib/Target/X86/X86InstrSSE.td:1.47 Wed Mar 29 18:33:26 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Thu Mar 30 00:21:22 2006
@@ -501,7 +501,8 @@
 let isTwoAddress = 1 in {
 def CMPSSrr : SSI0xC2, MRMSrcReg, 
 (ops FR32:$dst, FR32:$src1, FR32:$src, SSECC:$cc),
-cmp${cc}ss {$src, $dst|$dst, $src}, [];
+cmp${cc}ss {$src, $dst|$dst, $src},
+ [];
 def CMPSSrm : SSI0xC2, MRMSrcMem, 
 (ops FR32:$dst, FR32:$src1, f32mem:$src, SSECC:$cc),
 cmp${cc}ss {$src, $dst|$dst, $src}, [];
@@ -526,6 +527,27 @@
  ucomisd {$src2, $src1|$src1, $src2},
  [(X86cmp FR64:$src1, (loadf64 addr:$src2))];
 
+// Aliases to match intrinsics which expect XMM operand(s).
+let isTwoAddress = 1 in {
+def Int_CMPSSrr : SSI0xC2, MRMSrcReg, 
+  (ops VR128:$dst, VR128:$src1, VR128:$src, SSECC:$cc),
+  cmp${cc}ss {$src, $dst|$dst, $src},
+  [(set VR128:$dst, (int_x86_sse_cmp_ss VR128:$src1,
+ VR128:$src, imm:$cc))];
+def Int_CMPSSrm : SSI0xC2, MRMSrcMem, 
+  (ops VR128:$dst, VR128:$src1, f32mem:$src, SSECC:$cc),
+  cmp${cc}ss {$src, $dst|$dst, $src},
+  [(set VR128:$dst, (int_x86_sse_cmp_ss VR128:$src1,
+ (load addr:$src), imm:$cc))];
+def Int_CMPSDrr : SDI0xC2, MRMSrcReg, 
+  (ops VR128:$dst, VR128:$src1, VR128:$src, SSECC:$cc),
+  cmp${cc}sd {$src, $dst|$dst, $src}, [];
+def Int_CMPSDrm : SDI0xC2, MRMSrcMem, 
+  (ops VR128:$dst, VR128:$src1, f64mem:$src, SSECC:$cc),
+  cmp${cc}sd {$src, $dst|$dst, $src}, [];
+}
+
+
 // Aliases of packed instructions for scalar use. These all have names that
 // start with 'Fs'.
 
@@ -936,17 +958,21 @@
 
 let isTwoAddress = 1 in {
 def CMPPSrr : PSI0xC2, MRMSrcReg, 
-(ops VR128:$dst, VR128:$src1, VR128:$src, SSECC:$cc),
-cmp${cc}ps {$src, $dst|$dst, $src}, [];
+  (ops VR128:$dst, VR128:$src1, VR128:$src, SSECC:$cc),
+  cmp${cc}ps {$src, $dst|$dst, $src},
+  [(set VR128:$dst, (int_x86_sse_cmp_ps VR128:$src1,
+ VR128:$src, imm:$cc))];
 def CMPPSrm : PSI0xC2, MRMSrcMem, 
-(ops VR128:$dst, VR128:$src1, f128mem:$src, SSECC:$cc),
-cmp${cc}ps {$src, $dst|$dst, $src}, [];
+  (ops VR128:$dst, VR128:$src1, f128mem:$src, SSECC:$cc),
+  cmp${cc}ps {$src, $dst|$dst, $src},
+  [(set VR128:$dst, (int_x86_sse_cmp_ps VR128:$src1,
+ (load addr:$src), imm:$cc))];
 def CMPPDrr : PDI0xC2, MRMSrcReg, 
-(ops VR128:$dst, VR128:$src1, VR128:$src, SSECC:$cc),
-cmp${cc}pd {$src, $dst|$dst, $src}, [];
+  (ops VR128:$dst, VR128:$src1, VR128:$src, SSECC:$cc),
+  cmp${cc}pd {$src, $dst|$dst, $src}, [];
 def CMPPDrm : PDI0xC2, MRMSrcMem, 
-(ops VR128:$dst, VR128:$src1, f128mem:$src, SSECC:$cc),
-cmp${cc}pd {$src, $dst|$dst, $src}, [];
+  (ops VR128:$dst, VR128:$src1, f128mem:$src, SSECC:$cc),
+  cmp${cc}pd {$src, $dst|$dst, $src}, [];
 }
 
 // Shuffle and unpack instructions



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-29 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.48 - 1.49
---
Log message:

More logical ops patterns

---
Diffs of the changes:  (+106 -0)

 X86InstrSSE.td |  106 +
 1 files changed, 106 insertions(+)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.48 
llvm/lib/Target/X86/X86InstrSSE.td:1.49
--- llvm/lib/Target/X86/X86InstrSSE.td:1.48 Thu Mar 30 00:21:22 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Thu Mar 30 01:33:32 2006
@@ -45,6 +45,8 @@
 def loadv4i32: PatFrag(ops node:$ptr), (v4i32 (load node:$ptr));
 def loadv2i64: PatFrag(ops node:$ptr), (v2i64 (load node:$ptr));
 
+def bc_v4f32 : PatFrag(ops node:$in), (v4f32 (bitconvert node:$in));
+def bc_v2f64 : PatFrag(ops node:$in), (v2f64 (bitconvert node:$in));
 def bc_v16i8 : PatFrag(ops node:$in), (v16i8 (bitconvert node:$in));
 def bc_v8i16 : PatFrag(ops node:$in), (v8i16 (bitconvert node:$in));
 def bc_v4i32 : PatFrag(ops node:$in), (v4i32 (bitconvert node:$in));
@@ -1600,3 +1602,107 @@
SHUFP_shuffle_mask:$sm),
   (v4i32 (SHUFPSrm VR128:$src1, addr:$src2,
   SHUFP_v4i32_shuffle_mask:$sm)), Requires[HasSSE2];
+
+// Logical ops
+def : Pat(and (bc_v4i32 (v4f32 VR128:$src1)), (loadv4i32 addr:$src2)),
+  (ANDPSrm VR128:$src1, addr:$src2);
+def : Pat(and (bc_v2i64 (v2f64 VR128:$src1)), (loadv2i64 addr:$src2)),
+  (ANDPDrm VR128:$src1, addr:$src2);
+def : Pat(or  (bc_v4i32 (v4f32 VR128:$src1)), (loadv4i32 addr:$src2)),
+  (ORPSrm VR128:$src1, addr:$src2);
+def : Pat(or  (bc_v2i64 (v2f64 VR128:$src1)), (loadv2i64 addr:$src2)),
+  (ORPDrm VR128:$src1, addr:$src2);
+def : Pat(xor (bc_v4i32 (v4f32 VR128:$src1)), (loadv4i32 addr:$src2)),
+  (XORPSrm VR128:$src1, addr:$src2);
+def : Pat(xor (bc_v2i64 (v2f64 VR128:$src1)), (loadv2i64 addr:$src2)),
+  (XORPDrm VR128:$src1, addr:$src2);
+def : Pat(and (vnot (bc_v4i32 (v4f32 VR128:$src1))), (loadv4i32 addr:$src2)),
+  (ANDNPSrm VR128:$src1, addr:$src2);
+def : Pat(and (vnot (bc_v2i64 (v2f64 VR128:$src1))), (loadv2i64 addr:$src2)),
+  (ANDNPDrm VR128:$src1, addr:$src2);
+
+def : Pat(bc_v4f32 (v4i32 (and VR128:$src1, VR128:$src2))),
+  (ANDPSrr VR128:$src1, VR128:$src2);
+def : Pat(bc_v4f32 (v4i32 (or VR128:$src1, VR128:$src2))),
+  (ORPSrr VR128:$src1, VR128:$src2);
+def : Pat(bc_v4f32 (v4i32 (xor VR128:$src1, VR128:$src2))),
+  (XORPSrr VR128:$src1, VR128:$src2);
+def : Pat(bc_v4f32 (v4i32 (and (vnot VR128:$src1), VR128:$src2))),
+  (ANDNPSrr VR128:$src1, VR128:$src2);
+
+def : Pat(bc_v4f32 (v4i32 (and VR128:$src1, (load addr:$src2,
+  (ANDPSrm (v4i32 VR128:$src1), addr:$src2);
+def : Pat(bc_v4f32 (v4i32 (or VR128:$src1, (load addr:$src2,
+  (ORPSrm VR128:$src1, addr:$src2);
+def : Pat(bc_v4f32 (v4i32 (xor VR128:$src1, (load addr:$src2,
+  (XORPSrm VR128:$src1, addr:$src2);
+def : Pat(bc_v4f32 (v4i32 (and (vnot VR128:$src1), (load addr:$src2,
+  (ANDNPSrm VR128:$src1, addr:$src2);
+
+def : Pat(bc_v2f64 (v2i64 (and VR128:$src1, VR128:$src2))),
+  (ANDPDrr VR128:$src1, VR128:$src2);
+def : Pat(bc_v2f64 (v2i64 (or VR128:$src1, VR128:$src2))),
+  (ORPDrr VR128:$src1, VR128:$src2);
+def : Pat(bc_v2f64 (v2i64 (xor VR128:$src1, VR128:$src2))),
+  (XORPDrr VR128:$src1, VR128:$src2);
+def : Pat(bc_v2f64 (v2i64 (and (vnot VR128:$src1), VR128:$src2))),
+  (ANDNPDrr VR128:$src1, VR128:$src2);
+
+def : Pat(bc_v2f64 (v2i64 (and VR128:$src1, (load addr:$src2,
+  (ANDPSrm (v2i64 VR128:$src1), addr:$src2);
+def : Pat(bc_v2f64 (v2i64 (or VR128:$src1, (load addr:$src2,
+  (ORPSrm VR128:$src1, addr:$src2);
+def : Pat(bc_v2f64 (v2i64 (xor VR128:$src1, (load addr:$src2,
+  (XORPSrm VR128:$src1, addr:$src2);
+def : Pat(bc_v2f64 (v2i64 (and (vnot VR128:$src1), (load addr:$src2,
+  (ANDNPSrm VR128:$src1, addr:$src2);
+
+def : Pat(v4i32 (and VR128:$src1, VR128:$src2)),
+  (PANDrr VR128:$src1, VR128:$src2);
+def : Pat(v8i16 (and VR128:$src1, VR128:$src2)),
+  (PANDrr VR128:$src1, VR128:$src2);
+def : Pat(v16i8 (and VR128:$src1, VR128:$src2)),
+  (PANDrr VR128:$src1, VR128:$src2);
+def : Pat(v4i32 (or VR128:$src1, VR128:$src2)),
+  (PORrr VR128:$src1, VR128:$src2);
+def : Pat(v8i16 (or VR128:$src1, VR128:$src2)),
+  (PORrr VR128:$src1, VR128:$src2);
+def : Pat(v16i8 (or VR128:$src1, VR128:$src2)),
+  (PORrr VR128:$src1, VR128:$src2);
+def : Pat(v4i32 (xor VR128:$src1, VR128:$src2)),
+  (PXORrr VR128:$src1, VR128:$src2);
+def : Pat(v8i16 (xor VR128:$src1, VR128:$src2)),
+  (PXORrr VR128:$src1, VR128:$src2);
+def : Pat(v16i8 (xor VR128:$src1, VR128:$src2)),
+  (PXORrr VR128:$src1, VR128:$src2);
+def : Pat(v4i32 (and (vnot VR128:$src1), VR128:$src2)),
+  (PANDNrr VR128:$src1, 

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-28 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.39 - 1.40
---
Log message:

Added aliases to scalar SSE instructions, e.g. addss, to match x86 intrinsics.
The source operands type are v4sf with upper bits passes through.
Added matching code for these.


---
Diffs of the changes:  (+201 -47)

 X86InstrSSE.td |  248 ++---
 1 files changed, 201 insertions(+), 47 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.39 
llvm/lib/Target/X86/X86InstrSSE.td:1.40
--- llvm/lib/Target/X86/X86InstrSSE.td:1.39 Tue Mar 28 01:01:28 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Mar 28 17:51:43 2006
@@ -174,53 +174,6 @@
  [(set VR128:$dst, 
(v2f64 (scalar_to_vector (loadf64 addr:$src];
 
-
-// Conversion instructions
-def CVTSS2SIrr: SSI0x2D, MRMSrcReg, (ops R32:$dst, FR32:$src),
-   cvtss2si {$src, $dst|$dst, $src}, [];
-def CVTSS2SIrm: SSI0x2D, MRMSrcMem, (ops R32:$dst, f32mem:$src),
-   cvtss2si {$src, $dst|$dst, $src}, [];
-
-def CVTTSS2SIrr: SSI0x2C, MRMSrcReg, (ops R32:$dst, FR32:$src),
-   cvttss2si {$src, $dst|$dst, $src},
-   [(set R32:$dst, (fp_to_sint FR32:$src))];
-def CVTTSS2SIrm: SSI0x2C, MRMSrcMem, (ops R32:$dst, f32mem:$src),
-   cvttss2si {$src, $dst|$dst, $src},
-   [(set R32:$dst, (fp_to_sint (loadf32 addr:$src)))];
-def CVTTSD2SIrr: SDI0x2C, MRMSrcReg, (ops R32:$dst, FR64:$src),
-   cvttsd2si {$src, $dst|$dst, $src},
-   [(set R32:$dst, (fp_to_sint FR64:$src))];
-def CVTTSD2SIrm: SDI0x2C, MRMSrcMem, (ops R32:$dst, f64mem:$src),
-   cvttsd2si {$src, $dst|$dst, $src},
-   [(set R32:$dst, (fp_to_sint (loadf64 addr:$src)))];
-def CVTSD2SSrr: SDI0x5A, MRMSrcReg, (ops FR32:$dst, FR64:$src),
-  cvtsd2ss {$src, $dst|$dst, $src},
-  [(set FR32:$dst, (fround FR64:$src))];
-def CVTSD2SSrm: SDI0x5A, MRMSrcMem, (ops FR32:$dst, f64mem:$src), 
-  cvtsd2ss {$src, $dst|$dst, $src},
-  [(set FR32:$dst, (fround (loadf64 addr:$src)))];
-def CVTSI2SSrr: SSI0x2A, MRMSrcReg, (ops FR32:$dst, R32:$src),
-  cvtsi2ss {$src, $dst|$dst, $src},
-  [(set FR32:$dst, (sint_to_fp R32:$src))];
-def CVTSI2SSrm: SSI0x2A, MRMSrcMem, (ops FR32:$dst, i32mem:$src),
-  cvtsi2ss {$src, $dst|$dst, $src},
-  [(set FR32:$dst, (sint_to_fp (loadi32 addr:$src)))];
-def CVTSI2SDrr: SDI0x2A, MRMSrcReg, (ops FR64:$dst, R32:$src),
-  cvtsi2sd {$src, $dst|$dst, $src},
-  [(set FR64:$dst, (sint_to_fp R32:$src))];
-def CVTSI2SDrm: SDI0x2A, MRMSrcMem, (ops FR64:$dst, i32mem:$src),
-  cvtsi2sd {$src, $dst|$dst, $src},
-  [(set FR64:$dst, (sint_to_fp (loadi32 addr:$src)))];
-// SSE2 instructions with XS prefix
-def CVTSS2SDrr: I0x5A, MRMSrcReg, (ops FR64:$dst, FR32:$src),
-  cvtss2sd {$src, $dst|$dst, $src},
-  [(set FR64:$dst, (fextend FR32:$src))], XS,
-Requires[HasSSE2];
-def CVTSS2SDrm: I0x5A, MRMSrcMem, (ops FR64:$dst, f32mem:$src),
-  cvtss2sd {$src, $dst|$dst, $src},
-  [(set FR64:$dst, (fextend (loadf32 addr:$src)))], XS,
-Requires[HasSSE2];
-
 // Arithmetic instructions
 let isTwoAddress = 1 in {
 let isCommutable = 1 in {
@@ -317,6 +270,207 @@
 def MINSDrm : SDI0x5D, MRMSrcMem, (ops FR64:$dst, f64mem:$src),
   minsd {$src, $dst|$dst, $src}, [];
 
+
+// Aliases to match intrinsics which expect XMM operand(s).
+let isTwoAddress = 1 in {
+let isCommutable = 1 in {
+def Int_ADDSSrr : SSI0x58, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
+VR128:$src2),
+addss {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse_add_ss VR128:$src1,
+   VR128:$src2))];
+def Int_ADDSDrr : SDI0x58, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
+VR128:$src2),
+addsd {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_add_sd VR128:$src1,
+   VR128:$src2))];
+def Int_MULSSrr : SSI0x59, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
+VR128:$src2),
+mulss {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse_mul_ss VR128:$src1,
+   VR128:$src2))];
+def Int_MULSDrr : SDI0x59, MRMSrcReg, (ops VR128:$dst, VR128:$src1,
+VR128:$src2),
+mulsd {$src2, $dst|$dst, $src2},
+[(set VR128:$dst, (int_x86_sse2_mul_sd VR128:$src1,
+   VR128:$src2))];
+}

[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-27 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.33 - 1.34
---
Log message:

unbreak the build


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

 X86InstrSSE.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.33 
llvm/lib/Target/X86/X86InstrSSE.td:1.34
--- llvm/lib/Target/X86/X86InstrSSE.td:1.33 Mon Mar 27 01:00:16 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Mar 27 10:52:45 2006
@@ -493,7 +493,7 @@
 
 def MOVMSKPSrr : PSI0x50, MRMSrcReg, (ops R32:$dst, VR128:$src),
  movmskps {$src, $dst|$dst, $src},
- [(set R32:$dst, (int_x86_sse_movmskps VR128:$src))];
+ [(set R32:$dst, (int_x86_sse_movmsk_ps VR128:$src))];
 def MOVMSKPDrr : PSI0x50, MRMSrcReg, (ops R32:$dst, VR128:$src),
  movmskpd {$src, $dst|$dst, $src},
  [(set R32:$dst, (int_x86_sse2_movmskpd VR128:$src))];



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-27 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.37 - 1.38
---
Log message:

Typo

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

 X86InstrSSE.td |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.37 
llvm/lib/Target/X86/X86InstrSSE.td:1.38
--- llvm/lib/Target/X86/X86InstrSSE.td:1.37 Tue Mar 28 00:50:32 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Mar 28 00:53:49 2006
@@ -500,7 +500,7 @@
   MOVLHPS_shuffle_mask)))];
 
 def MOVHLPSrr : PSI0x12, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
VR128:$src2),
-movlhps {$src2, $dst|$dst, $src2},
+movhlps {$src2, $dst|$dst, $src2},
 [(set VR128:$dst,
   (v4f32 (vector_shuffle VR128:$src1, VR128:$src2,
   MOVHLPS_shuffle_mask)))];



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-27 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.38 - 1.39
---
Log message:

movlps and movlpd should be modeled as two address code.

---
Diffs of the changes:  (+9 -9)

 X86InstrSSE.td |   18 +-
 1 files changed, 9 insertions(+), 9 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.38 
llvm/lib/Target/X86/X86InstrSSE.td:1.39
--- llvm/lib/Target/X86/X86InstrSSE.td:1.38 Tue Mar 28 00:53:49 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Mar 28 01:01:28 2006
@@ -467,16 +467,11 @@
 def MOVUPDmr : PDI0x11, MRMDestMem, (ops f128mem:$dst, VR128:$src),
movupd {$src, $dst|$dst, $src}, [];
 
-def MOVLPSrm : PSI0x12, MRMSrcMem, (ops VR128:$dst, f64mem:$src),
-   movlps {$src, $dst|$dst, $src}, [];
-def MOVLPSmr : PSI0x13, MRMDestMem, (ops f64mem:$dst, VR128:$src),
-   movlps {$src, $dst|$dst, $src}, [];
-def MOVLPDrm : PDI0x12, MRMSrcMem, (ops VR128:$dst, f64mem:$src),
-   movlpd {$src, $dst|$dst, $src}, [];
-def MOVLPDmr : PDI0x13, MRMDestMem, (ops f64mem:$dst, VR128:$src),
-   movlpd {$src, $dst|$dst, $src}, [];
-
 let isTwoAddress = 1 in {
+def MOVLPSrm : PSI0x12, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
+   movlps {$src2, $dst|$dst, $src2}, [];
+def MOVLPDrm : PDI0x12, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
+   movlpd {$src2, $dst|$dst, $src2}, [];
 def MOVHPSrm : PSI0x16, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
movhps {$src2, $dst|$dst, $src2}, [];
 def MOVHPDrm : PDI0x16, MRMSrcMem, (ops VR128:$dst, VR128:$src1, 
f64mem:$src2),
@@ -487,6 +482,11 @@
  UNPCKL_shuffle_mask)))];
 }
 
+def MOVLPSmr : PSI0x13, MRMDestMem, (ops f64mem:$dst, VR128:$src),
+   movlps {$src, $dst|$dst, $src}, [];
+def MOVLPDmr : PDI0x13, MRMDestMem, (ops f64mem:$dst, VR128:$src),
+   movlpd {$src, $dst|$dst, $src}, [];
+
 def MOVHPSmr : PSI0x17, MRMDestMem, (ops f64mem:$dst, VR128:$src),
movhps {$src, $dst|$dst, $src}, [];
 def MOVHPDmr : PDI0x17, MRMDestMem, (ops f64mem:$dst, VR128:$src),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-24 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.24 - 1.25
---
Log message:

plug the intrinsics into the patterns for movmsk*


---
Diffs of the changes:  (+4 -2)

 X86InstrSSE.td |6 --
 1 files changed, 4 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.24 
llvm/lib/Target/X86/X86InstrSSE.td:1.25
--- llvm/lib/Target/X86/X86InstrSSE.td:1.24 Fri Mar 24 01:29:27 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Fri Mar 24 15:49:18 2006
@@ -470,9 +470,11 @@
 }
 
 def MOVMSKPSrr : PSI0x50, MRMSrcReg, (ops R32:$dst, VR128:$src),
- movmskps {$src, $dst|$dst, $src}, [];
+ movmskps {$src, $dst|$dst, $src},
+ [(set R32:$dst, (int_x86_sse_movmskps VR128:$src))];
 def MOVMSKPDrr : PSI0x50, MRMSrcReg, (ops R32:$dst, VR128:$src),
- movmskpd {$src, $dst|$dst, $src}, [];
+ movmskpd {$src, $dst|$dst, $src},
+ [(set R32:$dst, (int_x86_sse2_movmskpd VR128:$src))];
 
 // Conversion instructions
 def CVTPI2PSrr : PSI0x2A, MRMSrcReg, (ops VR128:$dst, VR64:$src),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-24 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.25 - 1.26
---
Log message:

Added LDMXCSR

---
Diffs of the changes:  (+7 -0)

 X86InstrSSE.td |7 +++
 1 files changed, 7 insertions(+)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.25 
llvm/lib/Target/X86/X86InstrSSE.td:1.26
--- llvm/lib/Target/X86/X86InstrSSE.td:1.25 Fri Mar 24 15:49:18 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Fri Mar 24 16:28:37 2006
@@ -841,6 +841,13 @@
 }
 
 
//===--===//
+// Miscellaneous Instructions
+//===--===//
+
+def LDMXCSR : I0xAE, MRM2m, (ops i32mem:$src),
+ldmxcsr {$src|$src}, [], TB, Requires[HasSSE1];
+
+//===--===//
 // Alias Instructions
 
//===--===//
 



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-24 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.27 - 1.28
---
Log message:

Added CVTSS2SI.


---
Diffs of the changes:  (+5 -0)

 X86InstrSSE.td |5 +
 1 files changed, 5 insertions(+)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.27 
llvm/lib/Target/X86/X86InstrSSE.td:1.28
--- llvm/lib/Target/X86/X86InstrSSE.td:1.27 Fri Mar 24 17:15:12 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Fri Mar 24 19:00:18 2006
@@ -173,6 +173,11 @@
 
 
 // Conversion instructions
+def CVTSS2SIrr: SSI0x2D, MRMSrcReg, (ops R32:$dst, FR32:$src),
+   cvtss2si {$src, $dst|$dst, $src}, [];
+def CVTSS2SIrm: SSI0x2D, MRMSrcMem, (ops R32:$dst, f32mem:$src),
+   cvtss2si {$src, $dst|$dst, $src}, [];
+
 def CVTTSS2SIrr: SSI0x2C, MRMSrcReg, (ops R32:$dst, FR32:$src),
cvttss2si {$src, $dst|$dst, $src},
[(set R32:$dst, (fp_to_sint FR32:$src))];



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-22 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.17 - 1.18
---
Log message:

SHUFP* are two address code.


---
Diffs of the changes:  (+2 -0)

 X86InstrSSE.td |2 ++
 1 files changed, 2 insertions(+)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.17 
llvm/lib/Target/X86/X86InstrSSE.td:1.18
--- llvm/lib/Target/X86/X86InstrSSE.td:1.17 Wed Mar 22 13:16:21 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Mar 22 14:08:18 2006
@@ -704,6 +704,7 @@
  (ops VR128:$dst, i128mem:$src1, i8imm:$src2),
  pshufd {$src2, $src1, $dst|$dst, $src1, $src2}, [];
 
+let isTwoAddress = 1 in {
 def SHUFPSrr : PSIi80xC6, MRMSrcReg, 
  (ops VR128:$dst, VR128:$src1, VR128:$src2, i8imm:$src3),
  shufps {$src3, $src2, $dst|$dst, $src2, $src3}, [];
@@ -716,6 +717,7 @@
 def SHUFPDrm : PDIi80xC6, MRMSrcMem, 
  (ops VR128:$dst, VR128:$src1, f128mem:$src2, i8imm:$src3),
  shufpd {$src3, $src2, $dst|$dst, $src2, $src3}, [];
+}
 
 def UNPCKHPSrr : PSI0x15, MRMSrcReg, 
 (ops VR128:$dst, VR128:$src1, VR128:$src2),



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-22 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.19 - 1.20
---
Log message:

Add v4i32 - v4f32 bitconvert patterns.


---
Diffs of the changes:  (+4 -0)

 X86InstrSSE.td |4 
 1 files changed, 4 insertions(+)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.19 
llvm/lib/Target/X86/X86InstrSSE.td:1.20
--- llvm/lib/Target/X86/X86InstrSSE.td:1.19 Wed Mar 22 19:57:24 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Mar 22 20:36:37 2006
@@ -871,3 +871,7 @@
 def : Pat(vector_shuffle (v4i32 VR128:$src), (undef), 
PSHUFD_shuffle_mask:$sm),
   (v4i32 (PSHUFDrr VR128:$src, PSHUFD_shuffle_mask:$sm)),
   Requires[HasSSE2];
+
+// bit_convert
+def : Pat(v4i32 (bitconvert (v4f32 VR128:$src))), (v4i32 VR128:$src);
+def : Pat(v4f32 (bitconvert (v4i32 VR128:$src))), (v4f32 VR128:$src);



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-22 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.20 - 1.21
---
Log message:

Following icc's lead: use movdqa to load / store 128-bit integer vectors

---
Diffs of the changes:  (+29 -16)

 X86InstrSSE.td |   45 +
 1 files changed, 29 insertions(+), 16 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.20 
llvm/lib/Target/X86/X86InstrSSE.td:1.21
--- llvm/lib/Target/X86/X86InstrSSE.td:1.20 Wed Mar 22 20:36:37 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Thu Mar 23 01:44:07 2006
@@ -40,6 +40,10 @@
 
 def loadv4f32: PatFrag(ops node:$ptr), (v4f32 (load node:$ptr));
 def loadv2f64: PatFrag(ops node:$ptr), (v2f64 (load node:$ptr));
+def loadv16i8: PatFrag(ops node:$ptr), (v16i8 (load node:$ptr));
+def loadv8i16: PatFrag(ops node:$ptr), (v8i16 (load node:$ptr));
+def loadv4i32: PatFrag(ops node:$ptr), (v4i32 (load node:$ptr));
+def loadv2i64: PatFrag(ops node:$ptr), (v2i64 (load node:$ptr));
 
 // SHUFFLE_get_shuf_imm xform function: convert vector_shuffle mask to PSHUF*,
 // SHUFP* etc. imm.
@@ -750,7 +754,7 @@
 
 // Move Instructions
 def MOVD128rr : PDI0x6E, MRMSrcReg, (ops VR128:$dst, R32:$src),
-  movd {$src, $dst|$dst, $src},
+movd {$src, $dst|$dst, $src},
 [(set VR128:$dst,
   (v4i32 (scalar_to_vector R32:$src)))];
 def MOVD128rm : PDI0x6E, MRMSrcMem, (ops VR128:$dst, i32mem:$src),
@@ -758,6 +762,15 @@
 def MOVD128mr : PDI0x7E, MRMDestMem, (ops i32mem:$dst, VR128:$src),
   movd {$src, $dst|$dst, $src}, [];
 
+def MOVDQArr : PDI0x6F, MRMSrcReg, (ops VR128:$dst, VR128:$src),
+   movdqa {$src, $dst|$dst, $src}, [];
+def MOVDQArm : PDI0x6F, MRMSrcMem, (ops VR128:$dst, i128mem:$src),
+   movdqa {$src, $dst|$dst, $src},
+   [(set VR128:$dst, (loadv4i32 addr:$src))];
+def MOVDQAmr : PDI0x7F, MRMDestMem, (ops i128mem:$dst, VR128:$src),
+   movdqa {$src, $dst|$dst, $src},
+   [(store (v4i32 VR128:$src), addr:$dst)];
+
 // SSE2 instructions with XS prefix
 def MOVQ128rr : I0x7E, MRMSrcReg, (ops VR128:$dst, VR64:$src),
   movq {$src, $dst|$dst, $src},
@@ -823,24 +836,24 @@
 def : Pat(v2i64 (undef)), (IMPLICIT_DEF_VR128), Requires[HasSSE2];
 
 // Load 128-bit integer vector values.
-def : Pat(v16i8 (load addr:$src)), (MOVAPSrm addr:$src),
-  Requires[HasSSE1];
-def : Pat(v8i16 (load addr:$src)), (MOVAPSrm addr:$src),
-  Requires[HasSSE1];
-def : Pat(v4i32 (load addr:$src)), (MOVAPSrm addr:$src),
-  Requires[HasSSE1];
-def : Pat(v2i64 (load addr:$src)), (MOVAPDrm addr:$src),
+def : Pat(v16i8 (load addr:$src)), (MOVDQArm addr:$src),
+  Requires[HasSSE2];
+def : Pat(v8i16 (load addr:$src)), (MOVDQArm addr:$src),
+  Requires[HasSSE2];
+def : Pat(v4i32 (load addr:$src)), (MOVDQArm addr:$src),
+  Requires[HasSSE2];
+def : Pat(v2i64 (load addr:$src)), (MOVDQArm addr:$src),
   Requires[HasSSE2];
 
 // Store 128-bit integer vector values.
-def : Pat(store (v16i8 VR128:$src), addr:$dst), (MOVAPSmr addr:$dst, 
VR128:$src),
-  Requires[HasSSE1];
-def : Pat(store (v8i16 VR128:$src), addr:$dst), (MOVAPSmr addr:$dst, 
VR128:$src),
-  Requires[HasSSE1];
-def : Pat(store (v4i32 VR128:$src), addr:$dst), (MOVAPSmr addr:$dst, 
VR128:$src),
-  Requires[HasSSE1];
-def : Pat(store (v2i64 VR128:$src), addr:$dst), (MOVAPDmr addr:$dst, 
VR128:$src),
-  Requires[HasSSE2];
+def : Pat(store (v16i8 VR128:$src), addr:$dst),
+  (MOVDQAmr addr:$dst, VR128:$src), Requires[HasSSE1];
+def : Pat(store (v8i16 VR128:$src), addr:$dst),
+  (MOVDQAmr addr:$dst, VR128:$src), Requires[HasSSE1];
+def : Pat(store (v4i32 VR128:$src), addr:$dst),
+  (MOVDQAmr addr:$dst, VR128:$src), Requires[HasSSE1];
+def : Pat(store (v2i64 VR128:$src), addr:$dst),
+  (MOVDQAmr addr:$dst, VR128:$src), Requires[HasSSE2];
 
 // Scalar to v8i16 / v16i8. The source may be a R32, but only the lower 8 or
 // 16-bits matter.



___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td

2006-03-21 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrSSE.td updated: 1.13 - 1.14
---
Log message:

Fix PSHUF* and SHUF* jit code emission problems

---
Diffs of the changes:  (+35 -25)

 X86InstrSSE.td |   60 +
 1 files changed, 35 insertions(+), 25 deletions(-)


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.13 
llvm/lib/Target/X86/X86InstrSSE.td:1.14
--- llvm/lib/Target/X86/X86InstrSSE.td:1.13 Tue Mar 21 20:53:00 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Wed Mar 22 01:10:28 2006
@@ -64,6 +64,8 @@
 // SDI - SSE2 instructions with XD prefix.
 // PSI - SSE1 instructions with TB prefix.
 // PDI - SSE2 instructions with TB and OpSize prefixes.
+// PSIi8 - SSE1 instructions with ImmT == Imm8 and TB prefix.
+// PDIi8 - SSE2 instructions with ImmT == Imm8 and TB and OpSize prefixes.
 class SSIbits8 o, Format F, dag ops, string asm, listdag pattern
   : Io, F, ops, asm, pattern, XS, Requires[HasSSE1];
 class SDIbits8 o, Format F, dag ops, string asm, listdag pattern
@@ -72,6 +74,14 @@
   : Io, F, ops, asm, pattern, TB, Requires[HasSSE1];
 class PDIbits8 o, Format F, dag ops, string asm, listdag pattern
   : Io, F, ops, asm, pattern, TB, OpSize, Requires[HasSSE2];
+class PSIi8bits8 o, Format F, dag ops, string asm, listdag pattern
+  : X86Insto, F, Imm8, ops, asm, TB, Requires[HasSSE1] {
+  let Pattern = pattern;
+}
+class PDIi8bits8 o, Format F, dag ops, string asm, listdag pattern
+  : X86Insto, F, Imm8, ops, asm, TB, OpSize, Requires[HasSSE2] {
+  let Pattern = pattern;
+}
 
 // Some 'special' instructions
 def IMPLICIT_DEF_FR32 : I0, Pseudo, (ops FR32:$dst),
@@ -671,33 +681,33 @@
 }
 
 // Shuffle and unpack instructions
-def PSHUFWrr : PSI0x70, AddRegFrm,
-   (ops VR64:$dst, VR64:$src1, i8imm:$src2),
-   pshufw {$src2, $src1, $dst|$dst, $src1, $src2}, [];
-def PSHUFWrm : PSI0x70, MRMSrcMem,
-   (ops VR64:$dst, i64mem:$src1, i8imm:$src2),
-   pshufw {$src2, $src1, $dst|$dst, $src1, $src2}, [];
-def PSHUFDrr : PDI0x70, AddRegFrm,
-   (ops VR128:$dst, VR128:$src1, i8imm:$src2),
-   pshufd {$src2, $src1, $dst|$dst, $src1, $src2},
+def PSHUFWrr : PSIi80x70, MRMDestReg,
+ (ops VR64:$dst, VR64:$src1, i8imm:$src2),
+ pshufw {$src2, $src1, $dst|$dst, $src1, $src2}, [];
+def PSHUFWrm : PSIi80x70, MRMSrcMem,
+ (ops VR64:$dst, i64mem:$src1, i8imm:$src2),
+ pshufw {$src2, $src1, $dst|$dst, $src1, $src2}, [];
+def PSHUFDrr : PDIi80x70, MRMDestReg,
+ (ops VR128:$dst, VR128:$src1, i8imm:$src2),
+ pshufd {$src2, $src1, $dst|$dst, $src1, $src2},
  [(set VR128:$dst, (vector_shuffle (v4f32 VR128:$src1), 
(undef),
 PSHUFD_shuffle_mask:$src2))];
-def PSHUFDrm : PDI0x70, MRMSrcMem,
-   (ops VR128:$dst, i128mem:$src1, i8imm:$src2),
-   pshufd {$src2, $src1, $dst|$dst, $src1, $src2}, [];
-
-def SHUFPSrr : PSI0xC6, MRMSrcReg, 
-   (ops VR128:$dst, VR128:$src1, VR128:$src2, i8imm:$src3),
-   shufps {$src3, $src2, $dst|$dst, $src2, $src3}, [];
-def SHUFPSrm : PSI0xC6, MRMSrcMem, 
-   (ops VR128:$dst, VR128:$src1, f128mem:$src2, i8imm:$src3),
-   shufps {$src3, $src2, $dst|$dst, $src2, $src3}, [];
-def SHUFPDrr : PDI0xC6, MRMSrcReg, 
-   (ops VR128:$dst, VR128:$src1, VR128:$src2, i8imm:$src3),
-   shufpd {$src3, $src2, $dst|$dst, $src2, $src3}, [];
-def SHUFPDrm : PDI0xC6, MRMSrcMem, 
-   (ops VR128:$dst, VR128:$src1, f128mem:$src2, i8imm:$src3),
-   shufpd {$src3, $src2, $dst|$dst, $src2, $src3}, [];
+def PSHUFDrm : PDIi80x70, MRMSrcMem,
+ (ops VR128:$dst, i128mem:$src1, i8imm:$src2),
+ pshufd {$src2, $src1, $dst|$dst, $src1, $src2}, [];
+
+def SHUFPSrr : PSIi80xC6, MRMSrcReg, 
+ (ops VR128:$dst, VR128:$src1, VR128:$src2, i8imm:$src3),
+ shufps {$src3, $src2, $dst|$dst, $src2, $src3}, [];
+def SHUFPSrm : PSIi80xC6, MRMSrcMem, 
+ (ops VR128:$dst, VR128:$src1, f128mem:$src2, i8imm:$src3),
+ shufps {$src3, $src2, $dst|$dst, $src2, $src3}, [];
+def SHUFPDrr : PDIi80xC6, MRMSrcReg, 
+ (ops VR128:$dst, VR128:$src1, VR128:$src2, i8imm:$src3),
+ shufpd {$src3, $src2, $dst|$dst, $src2, $src3}, [];
+def SHUFPDrm : PDIi80xC6, MRMSrcMem, 
+ (ops VR128:$dst, VR128:$src1, f128mem:$src2, i8imm:$src3),
+ shufpd {$src3, $src2, $dst|$dst, $src2, $src3}, [];
 
 def UNPCKHPSrr : PSI0x15, MRMSrcReg, 
 (ops VR128:$dst, VR128:$src1, VR128:$src2),



___