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

Evan Cheng evan.cheng at apple.com
Sun Mar 26 23:00:29 PST 2006



Changes in directory llvm/lib/Target/X86:

X86ISelLowering.cpp updated: 1.134 -> 1.135
X86InstrSSE.td updated: 1.32 -> 1.33
---
Log message:

Use pcmpeq to generate vector of all ones.


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

 X86ISelLowering.cpp |    4 ++++
 X86InstrSSE.td      |   11 +++++++++++
 2 files changed, 15 insertions(+)


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.134 llvm/lib/Target/X86/X86ISelLowering.cpp:1.135
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.134	Sun Mar 26 19:32:24 2006
+++ llvm/lib/Target/X86/X86ISelLowering.cpp	Mon Mar 27 01:00:16 2006
@@ -2364,6 +2364,10 @@
     abort();
   }
   case ISD::BUILD_VECTOR: {
+    // All one's are handled with pcmpeqd.
+    if (ISD::isBuildVectorAllOnes(Op.Val))
+      return Op;
+
     std::set<SDOperand> Values;
     SDOperand Elt0 = Op.getOperand(0);
     Values.insert(Elt0);


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.32 llvm/lib/Target/X86/X86InstrSSE.td:1.33
--- llvm/lib/Target/X86/X86InstrSSE.td:1.32	Sun Mar 26 03:53:12 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td	Mon Mar 27 01:00:16 2006
@@ -1008,6 +1008,10 @@
                     "xorpd $dst, $dst",
                     [(set VR128:$dst, (v2f64 immAllZerosV))]>;
 
+def V_SETALLONES : PDI<0x76, MRMInitReg, (ops VR128:$dst),
+                       "pcmpeqd $dst, $dst",
+                       [(set VR128:$dst, (v2f64 immAllOnesV))]>;
+
 // Scalar to 128-bit vector with zero extension.
 // Three operand (but two address) aliases.
 let isTwoAddress = 1 in {
@@ -1051,6 +1055,13 @@
 def : Pat<(v8i16 immAllZerosV), (v8i16 (V_SET0_PI))>, Requires<[HasSSE2]>;
 def : Pat<(v4i32 immAllZerosV), (v4i32 (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]>;
+
 // Load 128-bit integer vector values.
 def : Pat<(v16i8 (load addr:$src)), (MOVDQArm addr:$src)>,
       Requires<[HasSSE2]>;






More information about the llvm-commits mailing list