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

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86RegisterInfo.cpp updated: 1.135 -> 1.136
---
Log message:

Use movaps to do VR128 reg-to-reg copies for now. It's shorter and available 
for SSE1.

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

 X86RegisterInfo.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/Target/X86/X86RegisterInfo.cpp
diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.135 
llvm/lib/Target/X86/X86RegisterInfo.cpp:1.136
--- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.135   Fri Apr  7 11:34:46 2006
+++ llvm/lib/Target/X86/X86RegisterInfo.cpp Mon Apr 10 02:21:31 2006
@@ -115,7 +115,7 @@
   } else if (RC == &X86::FR64RegClass) {
 Opc = X86::FsMOVAPDrr;
   } else if (RC == &X86::VR128RegClass) {
-Opc = X86::MOVAPDrr;
+Opc = X86::MOVAPSrr;
   } else {
 assert(0 && "Unknown regclass");
 abort();



___
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/README.txt

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

README.txt updated: 1.81 -> 1.82
---
Log message:

New entries

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

 README.txt |   19 +++
 1 files changed, 19 insertions(+)


Index: llvm/lib/Target/X86/README.txt
diff -u llvm/lib/Target/X86/README.txt:1.81 llvm/lib/Target/X86/README.txt:1.82
--- llvm/lib/Target/X86/README.txt:1.81 Fri Apr  7 16:19:53 2006
+++ llvm/lib/Target/X86/README.txt  Mon Apr 10 02:22:03 2006
@@ -765,3 +765,22 @@
 
 A Mac OS X IA-32 specific ABI bug wrt returning value > 8 bytes:
 http://llvm.org/bugs/show_bug.cgi?id=729
+
+//===-===//
+
+#include 
+
+void test(__m128 *res, __m128 *A) {
+  *res = _mm_shuffle_ps(*A, *A, 0xF0);
+}
+
+We should emit
+  shufps $240, (%eax), %xmm0
+instead of 
+  pshufd $240, (%eax), %xmm0
+
+//===-===//
+
+X86RegisterInfo::copyRegToReg() returns X86::MOVAPSrr for VR128. Is it possible
+to choose between movaps, movapd, and movdqa based on types of source and
+destination?



___
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/X86ISelLowering.cpp X86InstrSSE.td

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86ISelLowering.cpp updated: 1.160 -> 1.161
X86InstrSSE.td updated: 1.68 -> 1.69
---
Log message:

Conditional move of vector types.

---
Diffs of the changes:  (+63 -37)

 X86ISelLowering.cpp |   85 +---
 X86InstrSSE.td  |   15 +
 2 files changed, 63 insertions(+), 37 deletions(-)


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.160 
llvm/lib/Target/X86/X86ISelLowering.cpp:1.161
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.160   Fri Apr  7 16:53:05 2006
+++ llvm/lib/Target/X86/X86ISelLowering.cpp Mon Apr 10 02:23:14 2006
@@ -275,13 +275,14 @@
   if (Subtarget->hasSSE1()) {
 addRegisterClass(MVT::v4f32, X86::VR128RegisterClass);
 
-setOperationAction(ISD::ADD,  MVT::v4f32, Legal);
-setOperationAction(ISD::SUB,  MVT::v4f32, Legal);
-setOperationAction(ISD::MUL,  MVT::v4f32, Legal);
-setOperationAction(ISD::LOAD, MVT::v4f32, Legal);
-setOperationAction(ISD::BUILD_VECTOR, MVT::v4f32, Custom);
-setOperationAction(ISD::VECTOR_SHUFFLE,   MVT::v4f32, Custom);
+setOperationAction(ISD::ADD,MVT::v4f32, Legal);
+setOperationAction(ISD::SUB,MVT::v4f32, Legal);
+setOperationAction(ISD::MUL,MVT::v4f32, Legal);
+setOperationAction(ISD::LOAD,   MVT::v4f32, Legal);
+setOperationAction(ISD::BUILD_VECTOR,   MVT::v4f32, Custom);
+setOperationAction(ISD::VECTOR_SHUFFLE, MVT::v4f32, Custom);
 setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v4f32, Custom);
+setOperationAction(ISD::SELECT, MVT::v4f32, Custom);
   }
 
   if (Subtarget->hasSSE2()) {
@@ -291,37 +292,46 @@
 addRegisterClass(MVT::v4i32, X86::VR128RegisterClass);
 addRegisterClass(MVT::v2i64, X86::VR128RegisterClass);
 
-
-setOperationAction(ISD::ADD,  MVT::v2f64, Legal);
-setOperationAction(ISD::ADD,  MVT::v16i8, Legal);
-setOperationAction(ISD::ADD,  MVT::v8i16, Legal);
-setOperationAction(ISD::ADD,  MVT::v4i32, Legal);
-setOperationAction(ISD::SUB,  MVT::v2f64, Legal);
-setOperationAction(ISD::SUB,  MVT::v16i8, Legal);
-setOperationAction(ISD::SUB,  MVT::v8i16, Legal);
-setOperationAction(ISD::SUB,  MVT::v4i32, Legal);
-setOperationAction(ISD::MUL,  MVT::v2f64, Legal);
-setOperationAction(ISD::LOAD, MVT::v2f64, Legal);
-setOperationAction(ISD::LOAD, MVT::v16i8, Legal);
-setOperationAction(ISD::LOAD, MVT::v8i16, Legal);
-setOperationAction(ISD::LOAD, MVT::v4i32, Legal);
-setOperationAction(ISD::LOAD, MVT::v2i64, Legal);
-setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v16i8, Custom);
-setOperationAction(ISD::SCALAR_TO_VECTOR, MVT::v8i16, Custom);
-setOperationAction(ISD::BUILD_VECTOR, MVT::v2f64, Custom);
-setOperationAction(ISD::BUILD_VECTOR, MVT::v16i8, Custom);
-setOperationAction(ISD::BUILD_VECTOR, MVT::v8i16, Custom);
-setOperationAction(ISD::BUILD_VECTOR, MVT::v4i32, Custom);
-setOperationAction(ISD::BUILD_VECTOR, MVT::v2i64, Custom);
-setOperationAction(ISD::VECTOR_SHUFFLE,   MVT::v2f64, Custom);
-setOperationAction(ISD::VECTOR_SHUFFLE,   MVT::v16i8, Custom);
-setOperationAction(ISD::VECTOR_SHUFFLE,   MVT::v8i16, Custom);
-setOperationAction(ISD::VECTOR_SHUFFLE,   MVT::v4i32, Custom);
-setOperationAction(ISD::VECTOR_SHUFFLE,   MVT::v2i64, Custom);
+setOperationAction(ISD::ADD,MVT::v2f64, Legal);
+setOperationAction(ISD::ADD,MVT::v16i8, Legal);
+setOperationAction(ISD::ADD,MVT::v8i16, Legal);
+setOperationAction(ISD::ADD,MVT::v4i32, Legal);
+setOperationAction(ISD::SUB,MVT::v2f64, Legal);
+setOperationAction(ISD::SUB,MVT::v16i8, Legal);
+setOperationAction(ISD::SUB,MVT::v8i16, Legal);
+setOperationAction(ISD::SUB,MVT::v4i32, Legal);
+setOperationAction(ISD::MUL,MVT::v2f64, Legal);
+setOperationAction(ISD::LOAD,   MVT::v2f64, Legal);
+setOperationAction(ISD::LOAD,   MVT::v16i8, Legal);
+setOperationAction(ISD::LOAD,   MVT::v8i16, Legal);
+setOperationAction(ISD::LOAD,   MVT::v4i32, Legal);
+setOperationAction(ISD::LOAD,   MVT::v2i64, Legal);
+setOperationAction(ISD::SCALAR_TO_VECTOR,   MVT::v16i8, Custom);
+setOperationAction(ISD::SCALAR_TO_VECTOR,   MVT::v8i16, Custom);
+setOperationAction(ISD::BUILD_VECTOR,   MVT::v2f64, Custom);
+setOperationAction(ISD::BUILD_VECTOR,   MVT::v16i8, Custom);
+setOperationAction(ISD::BUILD_VECTOR,  

[llvm-commits] CVS: llvm/test/Regression/CodeGen/X86/vec_select.ll

2006-04-10 Thread Evan Cheng


Changes in directory llvm/test/Regression/CodeGen/X86:

vec_select.ll added (r1.1)
---
Log message:

Add a vselect test case.

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

 vec_select.ll |   11 +++
 1 files changed, 11 insertions(+)


Index: llvm/test/Regression/CodeGen/X86/vec_select.ll
diff -c /dev/null llvm/test/Regression/CodeGen/X86/vec_select.ll:1.1
*** /dev/null   Mon Apr 10 02:30:23 2006
--- llvm/test/Regression/CodeGen/X86/vec_select.ll  Mon Apr 10 02:30:13 2006
***
*** 0 
--- 1,11 
+ ; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse
+ 
+ void %test(int %C, <4 x float>* %A, <4 x float>* %B) {
+   %tmp = load <4 x float>* %A
+   %tmp3 = load <4 x float>* %B
+   %tmp9 = mul <4 x float> %tmp3, %tmp3
+   %tmp = seteq int %C, 0
+   %iftmp.38.0 = select bool %tmp, <4 x float> %tmp9, <4 x float> %tmp
+   store <4 x float> %iftmp.38.0, <4 x float>* %A
+   ret void
+ }



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


[llvm-commits] CVS: llvm/Makefile.rules

2006-04-10 Thread Reid Spencer


Changes in directory llvm:

Makefile.rules updated: 1.359 -> 1.360
---
Log message:

ENABLE_ASSERTIONS -> DISABLE_ASSERTIONS


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

 Makefile.rules |8 
 1 files changed, 4 insertions(+), 4 deletions(-)


Index: llvm/Makefile.rules
diff -u llvm/Makefile.rules:1.359 llvm/Makefile.rules:1.360
--- llvm/Makefile.rules:1.359   Sun Apr  9 18:41:14 2006
+++ llvm/Makefile.rules Mon Apr 10 11:46:04 2006
@@ -222,8 +222,8 @@
   endif
 endif
 
-# If ENABLE_ASSERTIONS=1 is specified (make command line or configured),
-# then enable assertions by defining the appropriate preprocessor symbols.
+# If DISABLE_ASSERTIONS=1 is specified (make command line or configured),
+# then disable assertions by defining the appropriate preprocessor symbols.
 ifdef DISABLE_ASSERTIONS
   BuildMode := $(BuildMode)-Asserts
   CXX.Flags += -DNDEBUG
@@ -1527,7 +1527,7 @@
  $(EchoCmd) Removing old $(DistDir) ; \
  $(RM) -rf $(DistDir); \
  $(EchoCmd) Making 'all' to verify build ; \
- $(MAKE) ENABLE_OPTIMIZED=1 ENABLE_ASSERTIONS=1 all ; \
+ $(MAKE) ENABLE_OPTIMIZED=1 all ; \
fi
$(Echo) Building Distribution Directory $(DistDir)
$(Verb) $(MKDIR) $(DistDir) 
@@ -1588,7 +1588,7 @@
  if test "$$subdir" \!= "." ; then \
new_distdir="$(DistDir)/$$subdir" ; \
test -d "$$new_distdir" || $(MKDIR) "$$new_distdir" || exit 1; \
-   ( cd $$subdir && $(MAKE) ENABLE_OPTIMIZED=1 ENABLE_ASSERTIONS=1 \
+   ( cd $$subdir && $(MAKE) ENABLE_OPTIMIZED=1 \
  DistDir="$$new_distdir" distdir ) || exit 1; \
  fi; \
done



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


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.357 -> 1.358
---
Log message:

Missing break

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

 LegalizeDAG.cpp |1 +
 1 files changed, 1 insertion(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.357 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.358
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.357 Sat Apr  8 17:22:57 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Apr 10 13:54:36 2006
@@ -4773,6 +4773,7 @@
 assert(0 && "Cast from unsupported vector type not implemented yet!");
   }
 }
+break;
   case ISD::VSELECT:
 Result = DAG.getNode(ISD::SELECT, NewVT, Op.getOperand(0),
  PackVectorOp(Op.getOperand(1), NewVT),



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


[llvm-commits] CVS: llvm/lib/Transforms/IPO/IndMemRemoval.cpp

2006-04-10 Thread Andrew Lenharth


Changes in directory llvm/lib/Transforms/IPO:

IndMemRemoval.cpp added (r1.1)
---
Log message:

Add a simple pass to make sure that all (non-library) calls to malloc and free
are visible to analysis as intrinsics.  That is, make sure someone doesn't pass
free around by address in some struct (as happens in say 176.gcc).

This doesn't get rid of any indirect calls, just ensure calls to free and malloc
are always direct.



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

 IndMemRemoval.cpp |   92 ++
 1 files changed, 92 insertions(+)


Index: llvm/lib/Transforms/IPO/IndMemRemoval.cpp
diff -c /dev/null llvm/lib/Transforms/IPO/IndMemRemoval.cpp:1.1
*** /dev/null   Mon Apr 10 14:26:10 2006
--- llvm/lib/Transforms/IPO/IndMemRemoval.cpp   Mon Apr 10 14:25:59 2006
***
*** 0 
--- 1,92 
+ //===-- IndMemRemoval.cpp - Remove indirect allocations and frees 
--===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by the LLVM research group and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for 
details.
+ //
+ 
//===--===//
+ //
+ // This pass finds places where memory allocation functions may escape into
+ // indirect land.  Some transforms are much easier (aka possible) only if 
free 
+ // or malloc are not called indirectly.
+ // Thus find places where the address of memory functions are taken and 
construct
+ // bounce functions with direct calls of those functions.
+ //
+ 
//===--===//
+ 
+ #include "llvm/Transforms/IPO.h"
+ #include "llvm/Pass.h"
+ #include "llvm/Module.h"
+ #include "llvm/Function.h"
+ #include "llvm/Instructions.h"
+ #include "llvm/Type.h"
+ #include "llvm/Support/Debug.h"
+ #include "llvm/ADT/Statistic.h"
+ #include 
+ #include 
+ #include 
+ using namespace llvm;
+ 
+ namespace {
+   Statistic<> NumBounceSites("indmemrem", "Number of sites modified");
+   Statistic<> NumBounce  ("indmemrem", "Number of bounce functions created");
+ 
+   class IndMemRemPass : public ModulePass {
+ 
+   public:
+ IndMemRemPass();
+ virtual bool runOnModule(Module &M);
+   };
+   RegisterOpt X("indmemrem", "Indirect Malloc and Free 
Removal");
+ } // end anonymous namespace
+ 
+ 
+ IndMemRemPass::IndMemRemPass()
+ {
+ }
+ 
+ bool IndMemRemPass::runOnModule(Module &M) {
+   //in Theory, all direct calls of malloc and free should be promoted
+   //to intrinsics.  Therefor, this goes through and finds where the
+   //address of free or malloc are taken and replaces those with bounce
+   //functions, ensuring that all malloc and free that might happen
+   //happens through intrinsics.
+   bool changed = false;
+   if (Function* F = M.getNamedFunction("free")) {
+ assert(F->isExternal() && "free not external?");
+ if (F->getNumUses()) {
+   Function* FN = new Function(F->getFunctionType(), 
+ GlobalValue::LinkOnceLinkage, 
+ "free_llvm_bounce", &M);
+   BasicBlock* bb = new BasicBlock("entry",FN);
+   Instruction* R = new ReturnInst(bb);
+   new FreeInst(FN->arg_begin(), R);
+   ++NumBounce;
+   NumBounceSites += F->getNumUses();
+   F->replaceAllUsesWith(FN);
+   changed = true;
+ }
+   }
+   if (Function* F = M.getNamedFunction("malloc")) {
+ assert(F->isExternal() && "malloc not external?");
+ if (F->getNumUses()) {
+   Function* FN = new Function(F->getFunctionType(), 
+ GlobalValue::LinkOnceLinkage, 
+ "malloc_llvm_bounce", &M);
+   BasicBlock* bb = new BasicBlock("entry",FN);
+   Instruction* c = new CastInst(FN->arg_begin(), Type::UIntTy, "c", bb);
+   Instruction* a = new MallocInst(Type::SByteTy, c, "m", bb);
+   Instruction* R = new ReturnInst(a, bb);
+   ++NumBounce;
+   NumBounceSites += F->getNumUses();
+   F->replaceAllUsesWith(FN);
+   changed = true;
+ }
+   }
+   return changed;
+ }
+ 
+ ModulePass *llvm::createIndMemRemPass() {
+   return new IndMemRemPass();
+ }



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


[llvm-commits] CVS: llvm/include/llvm/Transforms/IPO.h LinkAllPasses.h

2006-04-10 Thread Andrew Lenharth


Changes in directory llvm/include/llvm/Transforms:

IPO.h updated: 1.44 -> 1.45
LinkAllPasses.h updated: 1.29 -> 1.30
---
Log message:

Add a simple pass to make sure that all (non-library) calls to malloc and free
are visible to analysis as intrinsics.  That is, make sure someone doesn't pass
free around by address in some struct (as happens in say 176.gcc).

This doesn't get rid of any indirect calls, just ensure calls to free and malloc
are always direct.




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

 IPO.h   |5 +
 LinkAllPasses.h |2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)


Index: llvm/include/llvm/Transforms/IPO.h
diff -u llvm/include/llvm/Transforms/IPO.h:1.44 
llvm/include/llvm/Transforms/IPO.h:1.45
--- llvm/include/llvm/Transforms/IPO.h:1.44 Tue Oct 18 01:28:16 2005
+++ llvm/include/llvm/Transforms/IPO.h  Mon Apr 10 14:26:09 2006
@@ -169,6 +169,11 @@
 // specific well-known (library) functions.
 ModulePass *createSimplifyLibCallsPass();
 
+
+// createIndMemRemPass - This pass removes potential indirect calls of
+// malloc and free
+ModulePass *createIndMemRemPass();
+
 } // End llvm namespace
 
 #endif


Index: llvm/include/llvm/Transforms/LinkAllPasses.h
diff -u llvm/include/llvm/Transforms/LinkAllPasses.h:1.29 
llvm/include/llvm/Transforms/LinkAllPasses.h:1.30
--- llvm/include/llvm/Transforms/LinkAllPasses.h:1.29   Wed Feb 22 10:23:43 2006
+++ llvm/include/llvm/Transforms/LinkAllPasses.hMon Apr 10 14:26:09 2006
@@ -107,7 +107,7 @@
   (void) llvm::createCondPropagationPass();
   (void) llvm::createNullProfilerRSPass();
   (void) llvm::createRSProfilingPass();
-
+  (void) llvm::createIndMemRemPass();
 }
   } ForcePassLinking;
 }



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


[llvm-commits] CVS: llvm/include/llvm/IntrinsicsX86.td

2006-04-10 Thread Evan Cheng


Changes in directory llvm/include/llvm:

IntrinsicsX86.td updated: 1.13 -> 1.14
---
Log message:

__builtin_ia32_loadup{s|d}, __builtin_ia32_storeup{s|d}


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

 IntrinsicsX86.td |   16 +++-
 1 files changed, 15 insertions(+), 1 deletion(-)


Index: llvm/include/llvm/IntrinsicsX86.td
diff -u llvm/include/llvm/IntrinsicsX86.td:1.13 
llvm/include/llvm/IntrinsicsX86.td:1.14
--- llvm/include/llvm/IntrinsicsX86.td:1.13 Fri Apr  7 19:47:01 2006
+++ llvm/include/llvm/IntrinsicsX86.td  Mon Apr 10 16:09:59 2006
@@ -133,7 +133,8 @@
 // SIMD store ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse_storeu_ps : GCCBuiltin<"__builtin_ia32_storeups">,
-  Intrinsic<[llvm_ptr_ty, llvm_v4f32_ty], [IntrWriteMem]>;
+  Intrinsic<[llvm_void_ty, llvm_ptr_ty,
+ llvm_v4f32_ty], [IntrWriteMem]>;
 }
 
 // Cacheability support ops
@@ -267,6 +268,19 @@
  llvm_int_ty], [InstrNoMem]>;
 }
 
+// SIMD load ops
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_sse2_loadu_pd : GCCBuiltin<"__builtin_ia32_loadupd">,
+  Intrinsic<[llvm_v2f64_ty, llvm_ptr_ty], [IntrReadMem]>;
+}
+
+// SIMD store ops
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_sse2_storeu_pd : GCCBuiltin<"__builtin_ia32_storeupd">,
+  Intrinsic<[llvm_void_ty, llvm_ptr_ty,
+ llvm_v2f64_ty], [IntrWriteMem]>;
+}
+
 // Misc.
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse2_packsswb_128 : GCCBuiltin<"__builtin_ia32_packsswb128">,



___
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.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 : PSI<0x10, MRMSrcReg, (ops VR128:$dst, VR128:$src),
"movups {$src, $dst|$dst, $src}", []>;
-def MOVUPSrm : PSI<0x10, MRMSrcMem, (ops VR128:$dst, f128mem:$src),
-   "movups {$src, $dst|$dst, $src}", []>;
-def MOVUPSmr : PSI<0x11, MRMDestMem, (ops f128mem:$dst, VR128:$src),
-   "movups {$src, $dst|$dst, $src}", []>;
+def MOVUPSrm : PDI<0x10, MRMSrcMem, (ops VR128:$dst, f128mem:$src),
+   "movups {$src, $dst|$dst, $src}",
+   [(set VR128:$dst, (int_x86_sse_loadu_ps addr:$src))]>;
+def MOVUPSmr : PDI<0x11, MRMDestMem, (ops f128mem:$dst, VR128:$src),
+   "movups {$src, $dst|$dst, $src}",
+   [(int_x86_sse_storeu_ps addr:$dst, VR128:$src)]>;
 def MOVUPDrr : PDI<0x10, MRMSrcReg, (ops VR128:$dst, VR128:$src),
"movupd {$src, $dst|$dst, $src}", []>;
 def MOVUPDrm : PDI<0x10, 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 : PDI<0x11, 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 : PSI<0x12, 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/README.txt

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

README.txt updated: 1.83 -> 1.84
---
Log message:

Remove an entry that is now done.

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

 README.txt |   13 -
 1 files changed, 13 deletions(-)


Index: llvm/lib/Target/X86/README.txt
diff -u llvm/lib/Target/X86/README.txt:1.83 llvm/lib/Target/X86/README.txt:1.84
--- llvm/lib/Target/X86/README.txt:1.83 Mon Apr 10 16:41:39 2006
+++ llvm/lib/Target/X86/README.txt  Mon Apr 10 16:42:57 2006
@@ -768,19 +768,6 @@
 
 //===-===//
 
-#include 
-
-void test(__m128 *res, __m128 *A, __m128 *B) {
-  *res = _mm_shuffle_ps(*A, *B, 0xF0);
-}
-
-We should emit
-  shufps $240, (%eax), %xmm0
-instead of 
-  pshufd $240, (%eax), %xmm0
-
-//===-===//
-
 X86RegisterInfo::copyRegToReg() returns X86::MOVAPSrr for VR128. Is it possible
 to choose between movaps, movapd, and movdqa based on types of source and
 destination?



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


[llvm-commits] CVS: llvm/docs/HowToReleaseLLVM.html

2006-04-10 Thread Misha Brukman


Changes in directory llvm/docs:

HowToReleaseLLVM.html updated: 1.2 -> 1.3
---
Log message:

* Remove duplicated table of contents for a section and at the top level
* Fix relative links within the file
* Add  tags around command names and literal file names and directories


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

 HowToReleaseLLVM.html |   41 +++--
 1 files changed, 15 insertions(+), 26 deletions(-)


Index: llvm/docs/HowToReleaseLLVM.html
diff -u llvm/docs/HowToReleaseLLVM.html:1.2 llvm/docs/HowToReleaseLLVM.html:1.3
--- llvm/docs/HowToReleaseLLVM.html:1.2 Fri Mar 24 00:42:09 2006
+++ llvm/docs/HowToReleaseLLVM.html Mon Apr 10 16:43:05 2006
@@ -11,18 +11,7 @@
 NOTE: THIS DOCUMENT IS A WORK IN PROGRESS!
 
   Introduction
-  Release Process
-  
-Overview
-Merge Branches
-Build LLVM
-Run 'make check'
-Run LLVM Test Suite
-make LibDeps.txt
-cvs tag
-make dist
-Release
-  
+  Release Process
 
 
   Written by mailto:[EMAIL PROTECTED]">Reid Spencer
@@ -48,14 +37,14 @@
 Process Overview
 
   
-Merge Branches
-Build LLVM
-Run 'make check'
-Run LLVM Test Suite
-make LibDeps.txt
-cvs tag
-make dist
-release
+Merge Branches
+Build LLVM
+Run 'make check'
+Run LLVM Test Suite
+make LibDeps.txt
+cvs tag
+make dist
+release
   
 
 
@@ -74,8 +63,8 @@
 
 Run 'make check'
 
-  Run "make check" and ensure there are no unexpected failures. If there
-  are, resolve the failures and go back to step 2.
+  Run make check and ensure there are no unexpected failures. If
+  there are, resolve the failures and go back to step 2.
 
 
 
@@ -88,9 +77,9 @@
 
 Make LibDeps.txt
 
-  Rebuild the LibDeps.txt target in utils/llvm-config. This makes sure that
-  the llvm-config utility remains relevant for the release, reflecting any
-  changes in the library dependencies.
+  Rebuild the LibDeps.txt target in utils/llvm-config. 
This
+  makes sure that the llvm-config utility remains relevant for the
+  release, reflecting any changes in the library dependencies.
 
 
 
@@ -122,7 +111,7 @@
   mailto:[EMAIL PROTECTED]">Reid Spencer
   http://llvm.cs.uiuc.edu";>The LLVM Compiler Infrastructure
   
-  Last modified: $Date: 2006/03/24 06:42:09 $
+  Last modified: $Date: 2006/04/10 21:43:05 $
 
 
 



___
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/README.txt

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

README.txt updated: 1.82 -> 1.83
---
Log message:

Correct an entry

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

 README.txt |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/README.txt
diff -u llvm/lib/Target/X86/README.txt:1.82 llvm/lib/Target/X86/README.txt:1.83
--- llvm/lib/Target/X86/README.txt:1.82 Mon Apr 10 02:22:03 2006
+++ llvm/lib/Target/X86/README.txt  Mon Apr 10 16:41:39 2006
@@ -770,8 +770,8 @@
 
 #include 
 
-void test(__m128 *res, __m128 *A) {
-  *res = _mm_shuffle_ps(*A, *A, 0xF0);
+void test(__m128 *res, __m128 *A, __m128 *B) {
+  *res = _mm_shuffle_ps(*A, *B, 0xF0);
 }
 
 We should emit



___
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/README.txt

2006-04-10 Thread Chris Lattner


Changes in directory llvm/lib/Target/X86:

README.txt updated: 1.84 -> 1.85
---
Log message:

add a note


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

 README.txt |   23 +++
 1 files changed, 23 insertions(+)


Index: llvm/lib/Target/X86/README.txt
diff -u llvm/lib/Target/X86/README.txt:1.84 llvm/lib/Target/X86/README.txt:1.85
--- llvm/lib/Target/X86/README.txt:1.84 Mon Apr 10 16:42:57 2006
+++ llvm/lib/Target/X86/README.txt  Mon Apr 10 16:51:03 2006
@@ -675,6 +675,29 @@
 
 //===-===//
 
+Better codegen for:
+
+void f(float a, float b, vector float * out) { *out = (vector float){ a, 0.0, 
0.0, b}; }
+void f(float a, float b, vector float * out) { *out = (vector float){ a, b, 
0.0, 0}; }
+
+For the later we generate:
+
+_f:
+pxor %xmm0, %xmm0
+movss 8(%esp), %xmm1
+movaps %xmm0, %xmm2
+unpcklps %xmm1, %xmm2
+movss 4(%esp), %xmm1
+unpcklps %xmm0, %xmm1
+unpcklps %xmm2, %xmm1
+movl 12(%esp), %eax
+movaps %xmm1, (%eax)
+ret
+
+This seems like it should use shufps, one for each of a & b.
+
+//===-===//
+
 Adding to the list of cmp / test poor codegen issues:
 
 int test(__m128 *A, __m128 *B) {



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


[llvm-commits] CVS: llvm/utils/TableGen/CodeGenTarget.cpp

2006-04-10 Thread Chris Lattner


Changes in directory llvm/utils/TableGen:

CodeGenTarget.cpp updated: 1.62 -> 1.63
---
Log message:

Fix a typo: Instr* -> Intr*


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

 CodeGenTarget.cpp |6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)


Index: llvm/utils/TableGen/CodeGenTarget.cpp
diff -u llvm/utils/TableGen/CodeGenTarget.cpp:1.62 
llvm/utils/TableGen/CodeGenTarget.cpp:1.63
--- llvm/utils/TableGen/CodeGenTarget.cpp:1.62  Mon Mar 27 18:15:00 2006
+++ llvm/utils/TableGen/CodeGenTarget.cpp   Mon Apr 10 17:02:59 2006
@@ -439,13 +439,13 @@
 assert(Property->isSubClassOf("IntrinsicProperty") &&
"Expected a property!");
 
-if (Property->getName() == "InstrNoMem")
+if (Property->getName() == "IntrNoMem")
   ModRef = NoMem;
-else if (Property->getName() == "InstrReadArgMem")
+else if (Property->getName() == "IntrReadArgMem")
   ModRef = ReadArgMem;
 else if (Property->getName() == "IntrReadMem")
   ModRef = ReadMem;
-else if (Property->getName() == "InstrWriteArgMem")
+else if (Property->getName() == "IntrWriteArgMem")
   ModRef = WriteArgMem;
 else if (Property->getName() == "IntrWriteMem")
   ModRef = WriteMem;



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


[llvm-commits] CVS: llvm/include/llvm/Intrinsics.td IntrinsicsPowerPC.td IntrinsicsX86.td

2006-04-10 Thread Chris Lattner


Changes in directory llvm/include/llvm:

Intrinsics.td updated: 1.32 -> 1.33
IntrinsicsPowerPC.td updated: 1.23 -> 1.24
IntrinsicsX86.td updated: 1.14 -> 1.15
---
Log message:

Fix a typo: Instr* -> Intr*


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

 Intrinsics.td|   26 +++
 IntrinsicsPowerPC.td |  166 +--
 IntrinsicsX86.td |  148 ++---
 3 files changed, 170 insertions(+), 170 deletions(-)


Index: llvm/include/llvm/Intrinsics.td
diff -u llvm/include/llvm/Intrinsics.td:1.32 
llvm/include/llvm/Intrinsics.td:1.33
--- llvm/include/llvm/Intrinsics.td:1.32Tue Apr  4 16:48:31 2006
+++ llvm/include/llvm/Intrinsics.td Mon Apr 10 17:02:38 2006
@@ -24,24 +24,24 @@
 // if correct) to the least aggressive.  If no property is set, the worst case 
 // is assumed (IntrWriteMem).
 
-// InstrNoMem - The intrinsic does not access memory or have any other side
+// IntrNoMem - The intrinsic does not access memory or have any other side
 // effects.  It may be CSE'd deleted if dead, etc.
-def InstrNoMem : IntrinsicProperty;
+def IntrNoMem : IntrinsicProperty;
 
-// InstrReadArgMem - This intrinsic reads only from memory that one of its
+// IntrReadArgMem - This intrinsic reads only from memory that one of its
 // arguments points to, but may read an unspecified amount.
-def InstrReadArgMem : IntrinsicProperty;
+def IntrReadArgMem : IntrinsicProperty;
 
 // IntrReadMem - This intrinsic reads from unspecified memory, so it cannot be
 // moved across stores.  However, it can be reordered otherwise and can be
 // deleted if dead.
 def IntrReadMem : IntrinsicProperty;
 
-// InstrWriteArgMem - This intrinsic reads and writes only from memory that one
+// IntrWriteArgMem - This intrinsic reads and writes only from memory that one
 // of its arguments points to, but may access an unspecified amount.  It has no
 // other side effects.  This may only be used if the intrinsic doesn't 
"capture"
 // the argument pointer (e.g. storing it someplace).
-def InstrWriteArgMem : IntrinsicProperty;
+def IntrWriteArgMem : IntrinsicProperty;
 
 // IntrWriteMem - This intrinsic may read or modify unspecified memory or has 
 // other side effects.  It cannot be modified by the optimizer.  This is the
@@ -130,14 +130,14 @@
 //  
 def int_gcroot  : Intrinsic<[llvm_void_ty, llvm_ptrptr_ty, llvm_ptr_ty]>;
 def int_gcread  : Intrinsic<[llvm_ptr_ty, llvm_ptr_ty, llvm_ptrptr_ty],
-[InstrReadArgMem]>;
+[IntrReadArgMem]>;
 def int_gcwrite : Intrinsic<[llvm_void_ty, llvm_ptr_ty, llvm_ptr_ty,
- llvm_ptrptr_ty], [InstrWriteArgMem]>;
+ llvm_ptrptr_ty], [IntrWriteArgMem]>;
 
 //===- Code Generator Intrinsics 
--===//
 //  
-def int_returnaddress : Intrinsic<[llvm_ptr_ty, llvm_uint_ty], [InstrNoMem]>;
-def int_frameaddress  : Intrinsic<[llvm_ptr_ty, llvm_uint_ty], [InstrNoMem]>;
+def int_returnaddress : Intrinsic<[llvm_ptr_ty, llvm_uint_ty], [IntrNoMem]>;
+def int_frameaddress  : Intrinsic<[llvm_ptr_ty, llvm_uint_ty], [IntrNoMem]>;
 def int_stacksave : Intrinsic<[llvm_ptr_ty], [IntrReadMem]>;
 def int_stackrestore  : Intrinsic<[llvm_void_ty, llvm_ptr_ty]>;
 def int_prefetch  : Intrinsic<[llvm_void_ty, llvm_ptr_ty, 
@@ -149,7 +149,7 @@
 //===--- Standard C Library Intrinsics 
===//
 //
 
-let Properties = [InstrWriteArgMem] in {
+let Properties = [IntrWriteArgMem] in {
   def int_memcpy_i32  : Intrinsic<[llvm_void_ty, llvm_ptr_ty, llvm_ptr_ty,
llvm_uint_ty, llvm_uint_ty]>;
   def int_memcpy_i64  : Intrinsic<[llvm_void_ty, llvm_ptr_ty, llvm_ptr_ty,
@@ -164,7 +164,7 @@
llvm_ulong_ty, llvm_uint_ty]>;
 }
 
-let Properties = [InstrNoMem] in {
+let Properties = [IntrNoMem] in {
   def int_isunordered_f32 : Intrinsic<[llvm_bool_ty, 
llvm_float_ty,  llvm_float_ty]>;
   def int_isunordered_f64 : Intrinsic<[llvm_bool_ty, 
@@ -183,7 +183,7 @@
 //
 
 // None of these intrinsics accesses memory at all.
-let Properties = [InstrNoMem] in {
+let Properties = [IntrNoMem] in {
   def int_bswap_i16 : Intrinsic<[llvm_ushort_ty, llvm_ushort_ty]>;
   def int_bswap_i32 : Intrinsic<[llvm_uint_ty,   llvm_uint_ty]>;
   def int_bswap_i64 : Intrinsic<[llvm_ulong_ty,  llvm_ulong_ty]>;


Index: llvm/include/llvm/IntrinsicsPowerPC.td
diff -u llvm/include/llvm/IntrinsicsPowerPC.td:1.23 
llvm/include/llvm/IntrinsicsPowerPC.td:1.24
--- llvm/include/llvm/IntrinsicsPowerPC.td:1.23 Thu Apr  6 16:12:48 2006
+++ llvm/include/llvm/IntrinsicsPowerPC.td  Mon Apr 10 17:02:38 2006
@@ -31,35 +31,35 @@
 /// vector and returns one.  These intrinsics have no side effects.
 class PowerPC_Vec_FF_Intrinsic
   : PowerPC_Vec_Intrinsic;
+  [llvm_v4f32_ty, llvm_v4f32_ty], [Intr

[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),
+   

[llvm-commits] CVS: llvm/test/Regression/Transforms/InstCombine/vec_shuffle.ll

2006-04-10 Thread Chris Lattner


Changes in directory llvm/test/Regression/Transforms/InstCombine:

vec_shuffle.ll added (r1.1)
---
Log message:

New testcase


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

 vec_shuffle.ll |   17 +
 1 files changed, 17 insertions(+)


Index: llvm/test/Regression/Transforms/InstCombine/vec_shuffle.ll
diff -c /dev/null llvm/test/Regression/Transforms/InstCombine/vec_shuffle.ll:1.1
*** /dev/null   Mon Apr 10 17:45:47 2006
--- llvm/test/Regression/Transforms/InstCombine/vec_shuffle.ll  Mon Apr 10 
17:45:37 2006
***
*** 0 
--- 1,17 
+ ; RUN: llvm-as < %s | opt -instcombine -disable-output &&
+ ; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep vector_shuffle
+ 
+ %T = type <4 x float>
+ 
+ implementation
+ 
+ %T %test1(%T %v1) {
+   %v2 = shufflevector %T %v1, %T undef, <4 x uint> 
+   ret %T %v2
+ }
+ 
+ %T %test2(%T %v1) {
+   %v2 = shufflevector %T %v1, %T %v1, <4 x uint> 
+   ret %T %v2
+ }
+ 



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


[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp

2006-04-10 Thread Chris Lattner


Changes in directory llvm/lib/Transforms/Scalar:

InstructionCombining.cpp updated: 1.462 -> 1.463
---
Log message:

Implement InstCombine/vec_shuffle.ll:test[12]


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

 InstructionCombining.cpp |   62 +++
 1 files changed, 62 insertions(+)


Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.462 
llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.463
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.462   Thu Apr  6 
14:19:17 2006
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Mon Apr 10 17:45:52 2006
@@ -138,6 +138,7 @@
 Instruction *visitBranchInst(BranchInst &BI);
 Instruction *visitSwitchInst(SwitchInst &SI);
 Instruction *visitExtractElementInst(ExtractElementInst &EI);
+Instruction *visitShuffleVectorInst(ShuffleVectorInst &SVI);
 
 // visitInstruction - Specify what to return for unhandled instructions...
 Instruction *visitInstruction(Instruction &I) { return 0; }
@@ -6876,6 +6877,67 @@
   return 0;
 }
 
+Instruction *InstCombiner::visitShuffleVectorInst(ShuffleVectorInst &SVI) {
+  Value *LHS = SVI.getOperand(0);
+  Value *RHS = SVI.getOperand(1);
+  Constant *Mask = cast(SVI.getOperand(2));
+
+  bool MadeChange = false;
+  
+  if (isa(Mask))
+return ReplaceInstUsesWith(SVI, UndefValue::get(SVI.getType()));
+  
+  // Canonicalize shuffle(x,x) -> shuffle(x,undef)
+  if (LHS == RHS) {
+if (isa(LHS)) {
+  // shuffle(undef,undef,mask) -> undef.
+  return ReplaceInstUsesWith(SVI, LHS);
+}
+
+if (!isa(Mask)) {
+  // Remap any references to RHS to use LHS.
+  ConstantPacked *CP = cast(Mask);
+  std::vector Elts;
+  for (unsigned i = 0, e = CP->getNumOperands(); i != e; ++i) {
+Elts.push_back(CP->getOperand(i));
+if (isa(CP->getOperand(i)))
+  continue;
+unsigned MV = cast(CP->getOperand(i))->getRawValue();
+if (MV >= e)
+  Elts.back() = ConstantUInt::get(Type::UIntTy, MV & (e-1));
+  }
+  Mask = ConstantPacked::get(Elts);
+}
+SVI.setOperand(1, UndefValue::get(RHS->getType()));
+SVI.setOperand(2, Mask);
+MadeChange = true;
+  }
+  
+  if (ConstantPacked *CP = dyn_cast(Mask)) {
+bool isLHSID = true, isRHSID = true;
+
+// Analyze the shuffle.
+for (unsigned i = 0, e = CP->getNumOperands(); i != e; ++i) {
+  if (isa(CP->getOperand(i)))
+continue;
+  unsigned MV = cast(CP->getOperand(i))->getRawValue();
+  
+  // Is this an identity shuffle of the LHS value?
+  isLHSID &= (MV == i);
+  
+  // Is this an identity shuffle of the RHS value?
+  isRHSID &= (MV-e == i);
+}
+
+// Eliminate identity shuffles.
+if (isLHSID) return ReplaceInstUsesWith(SVI, LHS);
+if (isRHSID) return ReplaceInstUsesWith(SVI, RHS);
+  }
+  
+  return MadeChange ? &SVI : 0;
+}
+
+
 
 void InstCombiner::removeFromWorkList(Instruction *I) {
   WorkList.erase(std::remove(WorkList.begin(), WorkList.end(), I),



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


[llvm-commits] CVS: llvm/test/Regression/Transforms/InstCombine/vec_shuffle.ll

2006-04-10 Thread Chris Lattner


Changes in directory llvm/test/Regression/Transforms/InstCombine:

vec_shuffle.ll updated: 1.1 -> 1.2
---
Log message:

new testcase


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

 vec_shuffle.ll |7 +++
 1 files changed, 7 insertions(+)


Index: llvm/test/Regression/Transforms/InstCombine/vec_shuffle.ll
diff -u llvm/test/Regression/Transforms/InstCombine/vec_shuffle.ll:1.1 
llvm/test/Regression/Transforms/InstCombine/vec_shuffle.ll:1.2
--- llvm/test/Regression/Transforms/InstCombine/vec_shuffle.ll:1.1  Mon Apr 
10 17:45:37 2006
+++ llvm/test/Regression/Transforms/InstCombine/vec_shuffle.ll  Mon Apr 10 
18:06:18 2006
@@ -15,3 +15,10 @@
   ret %T %v2
 }
 
+float %test3(%T %A, %T %B, float %f) {
+%C = insertelement %T %A, float %f, uint 0
+%D = shufflevector %T %C, %T %B, <4 x uint> 
+%E = extractelement %T %D, uint 1
+ret float %E
+}
+



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


[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp

2006-04-10 Thread Chris Lattner


Changes in directory llvm/lib/Transforms/Scalar:

InstructionCombining.cpp updated: 1.463 -> 1.464
---
Log message:

Implement vec_shuffle.ll:test3


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

 InstructionCombining.cpp |   19 +--
 1 files changed, 17 insertions(+), 2 deletions(-)


Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.463 
llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.464
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.463   Mon Apr 10 
17:45:52 2006
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Mon Apr 10 18:06:36 2006
@@ -6779,7 +6779,8 @@
 static Value *FindScalarElement(Value *V, unsigned EltNo) {
   assert(isa(V->getType()) && "Not looking at a vector?");
   const PackedType *PTy = cast(V->getType());
-  if (EltNo >= PTy->getNumElements())  // Out of range access.
+  unsigned Width = PTy->getNumElements();
+  if (EltNo >= Width)  // Out of range access.
 return UndefValue::get(PTy->getElementType());
   
   if (isa(V))
@@ -6800,6 +6801,19 @@
 // Otherwise, the insertelement doesn't modify the value, recurse on its
 // vector input.
 return FindScalarElement(III->getOperand(0), EltNo);
+  } else if (ShuffleVectorInst *SVI = dyn_cast(V)) {
+if (isa(SVI->getOperand(2))) {
+  return FindScalarElement(SVI->getOperand(0), 0);
+} else if (ConstantPacked *CP = 
+   dyn_cast(SVI->getOperand(2))) {
+  if (isa(CP->getOperand(EltNo)))
+return UndefValue::get(PTy->getElementType());
+  unsigned InEl = cast(CP->getOperand(EltNo))->getValue();
+  if (InEl < Width)
+return FindScalarElement(SVI->getOperand(0), InEl);
+  else
+return FindScalarElement(SVI->getOperand(1), InEl - Width);
+}
   }
   
   // Otherwise, we don't know.
@@ -6831,9 +6845,10 @@
   
   // If extracting a specified index from the vector, see if we can recursively
   // find a previously computed scalar that was inserted into the vector.
-  if (ConstantUInt *IdxC = dyn_cast(EI.getOperand(1)))
+  if (ConstantUInt *IdxC = dyn_cast(EI.getOperand(1))) {
 if (Value *Elt = FindScalarElement(EI.getOperand(0), IdxC->getValue()))
   return ReplaceInstUsesWith(EI, Elt);
+  }
   
   if (Instruction *I = dyn_cast(EI.getOperand(0)))
 if (I->hasOneUse()) {



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


[llvm-commits] CVS: llvm/lib/CodeGen/DwarfWriter.cpp

2006-04-10 Thread Jim Laskey


Changes in directory llvm/lib/CodeGen:

DwarfWriter.cpp updated: 1.56 -> 1.57
---
Log message:

Use existing information.


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

 DwarfWriter.cpp |   17 ++---
 1 files changed, 14 insertions(+), 3 deletions(-)


Index: llvm/lib/CodeGen/DwarfWriter.cpp
diff -u llvm/lib/CodeGen/DwarfWriter.cpp:1.56 
llvm/lib/CodeGen/DwarfWriter.cpp:1.57
--- llvm/lib/CodeGen/DwarfWriter.cpp:1.56   Fri Apr  7 19:35:59 2006
+++ llvm/lib/CodeGen/DwarfWriter.cppMon Apr 10 18:09:19 2006
@@ -25,6 +25,7 @@
 #include "llvm/Support/Mangler.h"
 #include "llvm/Target/MRegisterInfo.h"
 #include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/TargetFrameInfo.h"
 
 #include 
 
@@ -1829,8 +1830,13 @@
   EmitULEB128Bytes(RI->getDwarfRegNum(Src.getRegister()));
   EOL("Register");
 }
-  
-EmitULEB128Bytes(Src.getOffset() / RI->getStackDirection());
+
+int stackGrowth =
+Asm->TM.getFrameInfo()->getStackGrowthDirection() ==
+  TargetFrameInfo::StackGrowsUp ?
+AddressSize : -AddressSize;
+
+EmitULEB128Bytes(Src.getOffset() / stackGrowth);
 EOL("Offset");
   } else {
   }
@@ -2049,6 +2055,11 @@
 /// EmitInitialDebugFrame - Emit common frame info into a debug frame section.
 ///
 void DwarfWriter::EmitInitialDebugFrame() {
+  int stackGrowth =
+  Asm->TM.getFrameInfo()->getStackGrowthDirection() ==
+TargetFrameInfo::StackGrowsUp ?
+  AddressSize : -AddressSize;
+
   // Start the dwarf frame section.
   Asm->SwitchSection(DwarfFrameSection, 0);
 
@@ -2061,7 +2072,7 @@
   EmitInt8(DW_CIE_VERSION); EOL("CIE Version");
   EmitString("");  EOL("CIE Augmentation");
   EmitULEB128Bytes(1); EOL("CIE Code Alignment Factor");
-  EmitSLEB128Bytes(RI->getStackDirection()); EOL("CIE Data Alignment Factor"); 
  
+  EmitSLEB128Bytes(stackGrowth); EOL("CIE Data Alignment Factor");   
   EmitInt8(RI->getDwarfRegNum(RI->getRARegister())); EOL("CIE RA Column");
   
   std::vector Moves;



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


[llvm-commits] CVS: llvm/include/llvm/Target/MRegisterInfo.h

2006-04-10 Thread Jim Laskey


Changes in directory llvm/include/llvm/Target:

MRegisterInfo.h updated: 1.74 -> 1.75
---
Log message:

Use existing information.


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

 MRegisterInfo.h |5 -
 1 files changed, 5 deletions(-)


Index: llvm/include/llvm/Target/MRegisterInfo.h
diff -u llvm/include/llvm/Target/MRegisterInfo.h:1.74 
llvm/include/llvm/Target/MRegisterInfo.h:1.75
--- llvm/include/llvm/Target/MRegisterInfo.h:1.74   Fri Apr  7 11:34:45 2006
+++ llvm/include/llvm/Target/MRegisterInfo.hMon Apr 10 18:09:19 2006
@@ -359,11 +359,6 @@
   /// address can be found.
   virtual unsigned getRARegister() const = 0;
 
-  /// getStackDirection - This method should return the factor by which stacks
-  /// grow.  The tyical value is -4 which is the grows negatively in 4 byte
-  /// increments.
-  virtual int getStackDirection() const;
-  
   /// getLocation - This method should return the actual location of a frame
   /// variable given the frame index.  The location is returned in ML.
   /// Subclasses should override this method for special handling of frame



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


[llvm-commits] CVS: llvm/lib/Target/MRegisterInfo.cpp

2006-04-10 Thread Jim Laskey


Changes in directory llvm/lib/Target:

MRegisterInfo.cpp updated: 1.14 -> 1.15
---
Log message:

Use existing information.


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

 MRegisterInfo.cpp |7 ---
 1 files changed, 7 deletions(-)


Index: llvm/lib/Target/MRegisterInfo.cpp
diff -u llvm/lib/Target/MRegisterInfo.cpp:1.14 
llvm/lib/Target/MRegisterInfo.cpp:1.15
--- llvm/lib/Target/MRegisterInfo.cpp:1.14  Fri Apr  7 11:34:45 2006
+++ llvm/lib/Target/MRegisterInfo.cpp   Mon Apr 10 18:09:19 2006
@@ -44,13 +44,6 @@
   return Allocatable;
 }
 
-/// getStackDirection - This method should return the factor by which stacks
-/// grow.  The tyical value is -4 which is the grows negatively in 4 byte
-/// increments.
-int MRegisterInfo::getStackDirection() const {
-  return -sizeof(int32_t);
-}
-
 /// getLocation - This method should return the actual location of a frame
 /// variable given the frame index.  The location is returned in ML.
 /// Subclasses should override this method for special handling of frame



___
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/X86ISelLowering.cpp X86ISelLowering.h X86InstrSSE.td

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86ISelLowering.cpp updated: 1.161 -> 1.162
X86ISelLowering.h updated: 1.53 -> 1.54
X86InstrSSE.td updated: 1.72 -> 1.73
---
Log message:

Added support for _mm_move_ss and _mm_move_sd.


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

 X86ISelLowering.cpp |   29 +++--
 X86ISelLowering.h   |4 
 X86InstrSSE.td  |   15 +++
 3 files changed, 46 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.161 
llvm/lib/Target/X86/X86ISelLowering.cpp:1.162
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.161   Mon Apr 10 02:23:14 2006
+++ llvm/lib/Target/X86/X86ISelLowering.cpp Mon Apr 10 19:19:04 2006
@@ -1684,6 +1684,26 @@
   return true;
 }
 
+/// isMOVSMask - Return true if the specified VECTOR_SHUFFLE operand
+/// specifies a shuffle of elements that is suitable for input to MOVS{S|D}.
+bool X86::isMOVSMask(SDNode *N) {
+  assert(N->getOpcode() == ISD::BUILD_VECTOR);
+
+  unsigned NumElems = N->getNumOperands();
+  if (NumElems != 2 && NumElems != 4)
+return false;
+
+  if (!isUndefOrEqual(N->getOperand(0), NumElems))
+return false;
+
+  for (unsigned i = 1; i < NumElems; ++i) {
+SDOperand Arg = N->getOperand(i);
+if (!isUndefOrEqual(Arg, i))
+  return false;
+  }
+
+  return true;
+}
 
 /// isSplatMask - Return true if the specified VECTOR_SHUFFLE operand specifies
 /// a splat of a single element.
@@ -2680,6 +2700,10 @@
 if (NumElems == 2)
   return Op;
 
+if (X86::isMOVSMask(PermMask.Val))
+  // Leave the VECTOR_SHUFFLE alone. It matches MOVS{S|D}.
+  return Op;
+
 if (X86::isUNPCKLMask(PermMask.Val) ||
 X86::isUNPCKL_v_undef_Mask(PermMask.Val) ||
 X86::isUNPCKHMask(PermMask.Val))
@@ -3106,10 +3130,11 @@
   // Only do shuffles on 128-bit vector types for now.
   if (MVT::getSizeInBits(VT) == 64) return false;
   return (Mask.Val->getNumOperands() == 2 ||
-  X86::isSplatMask(Mask.Val) ||
+  X86::isSplatMask(Mask.Val)  ||
+  X86::isMOVSMask(Mask.Val)   ||
   X86::isPSHUFDMask(Mask.Val) ||
   isPSHUFHW_PSHUFLWMask(Mask.Val) ||
-  X86::isSHUFPMask(Mask.Val) ||
+  X86::isSHUFPMask(Mask.Val)  ||
   X86::isUNPCKLMask(Mask.Val) ||
   X86::isUNPCKL_v_undef_Mask(Mask.Val) ||
   X86::isUNPCKHMask(Mask.Val));


Index: llvm/lib/Target/X86/X86ISelLowering.h
diff -u llvm/lib/Target/X86/X86ISelLowering.h:1.53 
llvm/lib/Target/X86/X86ISelLowering.h:1.54
--- llvm/lib/Target/X86/X86ISelLowering.h:1.53  Thu Apr  6 18:23:56 2006
+++ llvm/lib/Target/X86/X86ISelLowering.h   Mon Apr 10 19:19:04 2006
@@ -233,6 +233,10 @@
/// <0, 0, 1, 1>
bool isUNPCKL_v_undef_Mask(SDNode *N);
 
+   /// isMOVSMask - Return true if the specified VECTOR_SHUFFLE operand
+   /// specifies a shuffle of elements that is suitable for input to MOVS{S|D}.
+   bool isMOVSMask(SDNode *N);
+
/// isSplatMask - Return true if the specified VECTOR_SHUFFLE operand
/// specifies a splat of a single element.
bool isSplatMask(SDNode *N);


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.72 
llvm/lib/Target/X86/X86InstrSSE.td:1.73
--- llvm/lib/Target/X86/X86InstrSSE.td:1.72 Mon Apr 10 17:35:16 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Mon Apr 10 19:19:04 2006
@@ -104,6 +104,10 @@
   return X86::isMOVLPMask(N);
 }]>;
 
+def MOVS_shuffle_mask : PatLeaf<(build_vector), [{
+  return X86::isMOVSMask(N);
+}]>;
+
 def UNPCKL_shuffle_mask : PatLeaf<(build_vector), [{
   return X86::isUNPCKLMask(N);
 }]>;
@@ -1641,6 +1645,17 @@
   "movsd {$src2, $dst|$dst, $src2}", []>;
 def MOVLDI2PDIrr : PDI<0x6E, MRMSrcReg, (ops VR128:$dst, VR128:$src1, 
R32:$src2),
   "movd {$src2, $dst|$dst, $src2}", []>;
+
+def MOVLPSrr : SSI<0x10, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+  "movss {$src2, $dst|$dst, $src2}",
+   [(set VR128:$dst,
+ (v4f32 (vector_shuffle VR128:$src1, VR128:$src2,
+ MOVS_shuffle_mask)))]>;
+def MOVLPDrr : SDI<0x10, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
+  "movsd {$src2, $dst|$dst, $src2}",
+   [(set VR128:$dst,
+ (v2f64 (vector_shuffle VR128:$src1, VR128:$src2,
+ MOVS_shuffle_mask)))]>;
 }
 
 // Move to lower bits of a VR128 and zeroing upper bits.



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


[llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineFunction.h

2006-04-10 Thread Chris Lattner


Changes in directory llvm/include/llvm/CodeGen:

MachineFunction.h updated: 1.57 -> 1.58
---
Log message:

Add helper methods.


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

 MachineFunction.h |2 ++
 1 files changed, 2 insertions(+)


Index: llvm/include/llvm/CodeGen/MachineFunction.h
diff -u llvm/include/llvm/CodeGen/MachineFunction.h:1.57 
llvm/include/llvm/CodeGen/MachineFunction.h:1.58
--- llvm/include/llvm/CodeGen/MachineFunction.h:1.57Wed Jan  4 07:44:43 2006
+++ llvm/include/llvm/CodeGen/MachineFunction.h Mon Apr 10 20:09:25 2006
@@ -192,8 +192,10 @@
   typedef std::vector::const_iterator liveout_iterator;
   livein_iterator livein_begin() const { return LiveIns.begin(); }
   livein_iterator livein_end()   const { return LiveIns.end(); }
+  boollivein_empty() const { return LiveIns.empty(); }
   liveout_iterator liveout_begin() const { return LiveOuts.begin(); }
   liveout_iterator liveout_end()   const { return LiveOuts.end(); }
+  bool liveout_empty() const { return LiveOuts.empty(); }
 
   /// getBlockNumbered - MachineBasicBlocks are automatically numbered when 
they
   /// are inserted into the machine function.  The block number for a machine



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


[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCISelLowering.cpp

2006-04-10 Thread Chris Lattner


Changes in directory llvm/lib/Target/PowerPC:

PPCISelLowering.cpp updated: 1.142 -> 1.143
---
Log message:

Move some return-handling code from lowerarguments to the ISD::RET handling 
stuff.
No functionality change.


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

 PPCISelLowering.cpp |   29 +
 1 files changed, 9 insertions(+), 20 deletions(-)


Index: llvm/lib/Target/PowerPC/PPCISelLowering.cpp
diff -u llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.142 
llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.143
--- llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.142   Sat Apr  8 17:59:15 2006
+++ llvm/lib/Target/PowerPC/PPCISelLowering.cpp Mon Apr 10 20:21:43 2006
@@ -880,12 +880,21 @@
   unsigned ArgReg = MVT::isInteger(ArgVT) ? PPC::R3 : PPC::F1;
   Copy = DAG.getCopyToReg(Op.getOperand(0), ArgReg, Op.getOperand(1),
   SDOperand());
+  
+  // If we haven't noted the R3/F1 are live out, do so now.
+  if (DAG.getMachineFunction().liveout_empty())
+DAG.getMachineFunction().addLiveOut(ArgReg);
   break;
 }
 case 3:
   Copy = DAG.getCopyToReg(Op.getOperand(0), PPC::R3, Op.getOperand(2), 
   SDOperand());
   Copy = DAG.getCopyToReg(Copy, PPC::R4, 
Op.getOperand(1),Copy.getValue(1));
+  // If we haven't noted the R3+R4 are live out, do so now.
+  if (DAG.getMachineFunction().liveout_empty()) {
+DAG.getMachineFunction().addLiveOut(PPC::R3);
+DAG.getMachineFunction().addLiveOut(PPC::R4);
+  }
   break;
 }
 return DAG.getNode(PPCISD::RET_FLAG, MVT::Other, Copy, Copy.getValue(1));
@@ -1249,26 +1258,6 @@
 }
   }
   
-  // Finally, inform the code generator which regs we return values in.
-  switch (getValueType(F.getReturnType())) {
-default: assert(0 && "Unknown type!");
-case MVT::isVoid: break;
-case MVT::i1:
-case MVT::i8:
-case MVT::i16:
-case MVT::i32:
-  MF.addLiveOut(PPC::R3);
-  break;
-case MVT::i64:
-  MF.addLiveOut(PPC::R3);
-  MF.addLiveOut(PPC::R4);
-  break;
-case MVT::f32:
-case MVT::f64:
-  MF.addLiveOut(PPC::F1);
-  break;
-  }
-  
   return ArgValues;
 }
 



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


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-04-10 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.358 -> 1.359
---
Log message:

Add basic support for legalizing returns of vectors


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

 LegalizeDAG.cpp |   45 -
 1 files changed, 36 insertions(+), 9 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.358 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.359
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.358 Mon Apr 10 13:54:36 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Apr 10 20:31:51 2006
@@ -1397,20 +1397,47 @@
 Tmp1 = DAG.getNode(ISD::TokenFactor, MVT::Other, Tmp1, LastCALLSEQ_END);
 Tmp1 = LegalizeOp(Tmp1);
 LastCALLSEQ_END = DAG.getEntryNode();
-
+Tmp2 = Node->getOperand(1);
+  
 switch (Node->getNumOperands()) {
 case 2:  // ret val
-  switch (getTypeAction(Node->getOperand(1).getValueType())) {
+  switch (getTypeAction(Tmp2.getValueType())) {
   case Legal:
-Tmp2 = LegalizeOp(Node->getOperand(1));
-Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
+Result = DAG.UpdateNodeOperands(Result, Tmp1, LegalizeOp(Tmp2));
 break;
-  case Expand: {
-SDOperand Lo, Hi;
-ExpandOp(Node->getOperand(1), Lo, Hi);
-Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Hi);
+  case Expand:
+if (Tmp2.getValueType() != MVT::Vector) {
+  SDOperand Lo, Hi;
+  ExpandOp(Tmp2, Lo, Hi);
+  Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Hi);
+} else {
+  SDNode *InVal = Tmp2.Val;
+  unsigned NumElems =
+cast(*(InVal->op_end()-2))->getValue();
+  MVT::ValueType EVT = cast(*(InVal->op_end()-1))->getVT();
+  
+  // Figure out if there is a Packed type corresponding to this Vector
+  // type.  If so, convert to the packed type.
+  MVT::ValueType TVT = MVT::getVectorType(EVT, NumElems);
+  if (TVT != MVT::Other && TLI.isTypeLegal(TVT)) {
+// Turn this into a return of the packed type.
+Tmp2 = PackVectorOp(Tmp2, TVT);
+Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
+  } else if (NumElems == 1) {
+// Turn this into a return of the scalar type.
+Tmp2 = PackVectorOp(Tmp2, EVT);
+Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
+// The scalarized value type may not be legal, e.g. it might 
require
+// promotion or expansion.  Relegalize the return.
+Result = LegalizeOp(Result);
+  } else {
+SDOperand Lo, Hi;
+SplitVectorOp(Tmp2, Lo, Hi);
+Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Hi);
+Result = LegalizeOp(Result);
+  }
+}
 break;
-  }
   case Promote:
 Tmp2 = PromoteOp(Node->getOperand(1));
 Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);



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


[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCISelLowering.cpp

2006-04-10 Thread Chris Lattner


Changes in directory llvm/lib/Target/PowerPC:

PPCISelLowering.cpp updated: 1.143 -> 1.144
---
Log message:

Vector function results go into V2 according to GCC.  The darwin ABI doc 
doesn't say where they go :-/


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

 PPCISelLowering.cpp |   11 ++-
 1 files changed, 10 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/PowerPC/PPCISelLowering.cpp
diff -u llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.143 
llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.144
--- llvm/lib/Target/PowerPC/PPCISelLowering.cpp:1.143   Mon Apr 10 20:21:43 2006
+++ llvm/lib/Target/PowerPC/PPCISelLowering.cpp Mon Apr 10 20:38:39 2006
@@ -877,7 +877,16 @@
   return SDOperand(); // ret void is legal
 case 2: {
   MVT::ValueType ArgVT = Op.getOperand(1).getValueType();
-  unsigned ArgReg = MVT::isInteger(ArgVT) ? PPC::R3 : PPC::F1;
+  unsigned ArgReg;
+  if (MVT::isVector(ArgVT))
+ArgReg = PPC::V2;
+  else if (MVT::isInteger(ArgVT))
+ArgReg = PPC::R3;
+  else {
+assert(MVT::isFloatingPoint(ArgVT));
+ArgReg = PPC::F1;
+  }
+  
   Copy = DAG.getCopyToReg(Op.getOperand(0), ArgReg, Op.getOperand(1),
   SDOperand());
   



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


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-04-10 Thread Chris Lattner


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.359 -> 1.360
---
Log message:

add some todos


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

 LegalizeDAG.cpp |8 
 1 files changed, 8 insertions(+)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.359 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.360
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.359 Mon Apr 10 20:31:51 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Mon Apr 10 21:00:08 2006
@@ -1427,10 +1427,16 @@
 // Turn this into a return of the scalar type.
 Tmp2 = PackVectorOp(Tmp2, EVT);
 Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2);
+
+// FIXME: Returns of gcc generic vectors smaller than a legal type
+// should be returned in integer registers!
+
 // The scalarized value type may not be legal, e.g. it might 
require
 // promotion or expansion.  Relegalize the return.
 Result = LegalizeOp(Result);
   } else {
+// FIXME: Returns of gcc generic vectors larger than a legal vector
+// type should be returned by reference!
 SDOperand Lo, Hi;
 SplitVectorOp(Tmp2, Lo, Hi);
 Result = DAG.getNode(ISD::RET, MVT::Other, Tmp1, Lo, Hi);
@@ -1458,6 +1464,8 @@
   break;
 case Expand: {
   SDOperand Lo, Hi;
+  assert(Node->getOperand(i).getValueType() != MVT::Vector &&
+ "FIXME: TODO: implement returning non-legal vector types!");
   ExpandOp(Node->getOperand(i), Lo, Hi);
   NewValues.push_back(Lo);
   NewValues.push_back(Hi);



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


[llvm-commits] CVS: llvm/win32/Transforms/Transforms.vcproj

2006-04-10 Thread Jeff Cohen


Changes in directory llvm/win32/Transforms:

Transforms.vcproj updated: 1.21 -> 1.22
---
Log message:

Keep Visual Studio happy.

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

 Transforms.vcproj |3 +++
 1 files changed, 3 insertions(+)


Index: llvm/win32/Transforms/Transforms.vcproj
diff -u llvm/win32/Transforms/Transforms.vcproj:1.21 
llvm/win32/Transforms/Transforms.vcproj:1.22
--- llvm/win32/Transforms/Transforms.vcproj:1.21Sun Jan 29 22:07:07 2006
+++ llvm/win32/Transforms/Transforms.vcproj Mon Apr 10 21:01:22 2006
@@ -179,6 +179,9 @@

RelativePath="..\..\lib\Transforms\Ipo\GlobalOpt.cpp">


+   
+   

http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] CVS: llvm/CREDITS.TXT

2006-04-10 Thread Nate Begeman


Changes in directory llvm:

CREDITS.TXT updated: 1.46 -> 1.47
---
Log message:

update my credits entry per clattner's request!


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

 CREDITS.TXT |3 ++-
 1 files changed, 2 insertions(+), 1 deletion(-)


Index: llvm/CREDITS.TXT
diff -u llvm/CREDITS.TXT:1.46 llvm/CREDITS.TXT:1.47
--- llvm/CREDITS.TXT:1.46   Thu Mar 23 17:21:29 2006
+++ llvm/CREDITS.TXTTue Apr 11 00:47:45 2006
@@ -18,7 +18,8 @@
 
 N: Nate Begeman
 E: [EMAIL PROTECTED]
-D: Primary PowerPC backend developer
+D: PowerPC backend developer
+D: Target-independent code generator and analysis improvements
 
 N: Daniel Berlin
 E: [EMAIL PROTECTED]



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


[llvm-commits] CVS: llvm/CREDITS.TXT

2006-04-10 Thread Reid Spencer


Changes in directory llvm:

CREDITS.TXT updated: 1.47 -> 1.48
---
Log message:

Update my entry.


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

 CREDITS.TXT |4 +++-
 1 files changed, 3 insertions(+), 1 deletion(-)


Index: llvm/CREDITS.TXT
diff -u llvm/CREDITS.TXT:1.47 llvm/CREDITS.TXT:1.48
--- llvm/CREDITS.TXT:1.47   Tue Apr 11 00:47:45 2006
+++ llvm/CREDITS.TXTTue Apr 11 00:48:40 2006
@@ -138,7 +138,9 @@
 N: Reid Spencer
 E: [EMAIL PROTECTED]
 W: http://llvm.x10sys.com/rspencer
-D: Stacker, llvmc, bytecode, other. See web page for current notes.
+D: Stacker, llvmc, llvm-ld, llvm-ar, lib/Archive, lib/Linker, lib/System, 
+D: bytecode enhancements, symtab hacking, unoverloading of intrinsics, 
makefile 
+D: and configuration system, documentation.
 
 N: Adam Treat
 E: [EMAIL PROTECTED]



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


[llvm-commits] CVS: llvm/docs/HowToReleaseLLVM.html

2006-04-10 Thread Reid Spencer


Changes in directory llvm/docs:

HowToReleaseLLVM.html updated: 1.3 -> 1.4
---
Log message:

Flesh out the documentation a little bit more.


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

 HowToReleaseLLVM.html |   64 ++
 1 files changed, 55 insertions(+), 9 deletions(-)


Index: llvm/docs/HowToReleaseLLVM.html
diff -u llvm/docs/HowToReleaseLLVM.html:1.3 llvm/docs/HowToReleaseLLVM.html:1.4
--- llvm/docs/HowToReleaseLLVM.html:1.3 Mon Apr 10 16:43:05 2006
+++ llvm/docs/HowToReleaseLLVM.html Tue Apr 11 01:21:25 2006
@@ -38,6 +38,7 @@
 
   
 Merge Branches
+Settle LLVM HEAD
 Build LLVM
 Run 'make check'
 Run LLVM Test Suite
@@ -51,27 +52,45 @@
 
 Merge Branches
 
-Merge any work done on branches intended for release into mainline.
+Merge any work done on branches intended for release into mainline. Work 
that
+is not to be incorporated into the release should not be merged from the 
branch.
+
+
+
+
+Settle CVS HEAD
+
+  Use the nightly test reports, and 'make check' (deja-gnu based tests) to 
+  increase the quality of LLVM and ensure that merged branches have not
+  destabilized LLVM.
 
 
 
 Build LLVM
 
-  Build LLVM
+  Build both debug and release versions of LLVM on all platforms. Ensure
+  build is warning and error free on each platform.
 
 
 
 Run 'make check'
 
   Run make check and ensure there are no unexpected failures. If
-  there are, resolve the failures and go back to step 2.
+  there are, resolve the failures and go back to step 2.
+  Ensure that 'make check' passes on all platforms for all targets. If certain
+  failures cannot be resolved before release time, determine if marking them
+  XFAIL is appropriate. If not, fix the bug and go back. The test suite must
+  complete with "0 unexpected failures" for release.
+  
 
 
 
 LLVM Test Suite
 
   Run the llvm-test suite and ensure there are no unacceptable failures.
-  If there are, resolve the failures and go back to step 2.
+  If there are, resolve the failures and go back to step 2. The test suite
+  should be run in Nightly Test mode. All tests must pass. If they do not,
+  investigate and go back to settling CVS HEAD.
 
 
 
@@ -83,21 +102,48 @@
 
 
 
-CVS Tag
+CVS Tag And Branch
 
-  Tag the release.
+  Tag and branch the CVS HEAD using the following procedure:
+  
+Request all developers to refrain from committing. Offenders get commit
+rights taken away (temporarily).
+Tag the cvs HEAD with "ROOT_RELEASE_XX" where XX is the major and minor
+release numbers (you can't have . in a cvs tag name). So, for Release 1.2,
+XX=12 and for Release 1.10, XX=110.
+Immediately create a cvs branch based on the ROOT_RELEASE tag. This is
+where the release distribution will be created.
+Advise developers they can work on CVS HEAD again.
+Ensure all subsequent building and fixing is done on this branch.
 
 
 
 Run 'make dist'
 
-  Build the distribution, ensuring it is installable and working
+  Build the distribution, ensuring it is installable and working. This is a
+  two step process. First, use "make dist" to simply build the distribution. 
Any
+  failures need to be corrected (on the branch). Once "make dist" can be
+  successful, do "make dist-check". This target will do the same thing as the
+  'dist' target but also test that distribution to make sure it works. This
+  ensures that needed files are not missing and that the src tarball can be
+  successfully unbacked, built, installed, and cleaned. This two-level testing
+  needs to be done on each target platform.
 
 
 
 Release
 
-  Release the distribution tarball to the public.
+  Release the distribution tarball to the public. This consists of 
generating
+  several tarballs. The first set, the source distributions, are automatically
+  generated by the "make dist" and "make dist-check". There are gzip, bzip2, 
and
+  zip versions of these bundles.
+  The second set of tarballs is the binary release. When "make dist-check"
+  succeeds, it will have created an _install directory into which it installed
+  the binary release. You need to rename that directory as "llvm" and then
+  create tarballs from the contents of that "llvm" directory.
+  Finally, use rpm to make an rpm package based on the llvm.spec file. Don't
+  forget to update the version number, documentation, etc. in the llvm.spec
+  file.
 
 
 
@@ -111,7 +157,7 @@
   mailto:[EMAIL PROTECTED]">Reid Spencer
   http://llvm.cs.uiuc.edu";>The LLVM Compiler Infrastructure
   
-  Last modified: $Date: 2006/04/10 21:43:05 $
+  Last modified: $Date: 2006/04/11 06:21:25 $
 
 
 



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


[llvm-commits] CVS: llvm/docs/HowToReleaseLLVM.html

2006-04-10 Thread Reid Spencer


Changes in directory llvm/docs:

HowToReleaseLLVM.html updated: 1.4 -> 1.5
---
Log message:

Fix an anchor.


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

 HowToReleaseLLVM.html |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)


Index: llvm/docs/HowToReleaseLLVM.html
diff -u llvm/docs/HowToReleaseLLVM.html:1.4 llvm/docs/HowToReleaseLLVM.html:1.5
--- llvm/docs/HowToReleaseLLVM.html:1.4 Tue Apr 11 01:21:25 2006
+++ llvm/docs/HowToReleaseLLVM.html Tue Apr 11 01:22:15 2006
@@ -58,7 +58,7 @@
 
 
 
-Settle CVS HEAD
+Settle CVS HEAD
 
   Use the nightly test reports, and 'make check' (deja-gnu based tests) to 
   increase the quality of LLVM and ensure that merged branches have not
@@ -157,7 +157,7 @@
   mailto:[EMAIL PROTECTED]">Reid Spencer
   http://llvm.cs.uiuc.edu";>The LLVM Compiler Infrastructure
   
-  Last modified: $Date: 2006/04/11 06:21:25 $
+  Last modified: $Date: 2006/04/11 06:22:15 $
 
 
 



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


[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/CodeGen/SelectionDAG:

LegalizeDAG.cpp updated: 1.360 -> 1.361
---
Log message:

Only get Tmp2 for cases where number of operands is > 1. Fixed return void.

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

 LegalizeDAG.cpp |2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.360 
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.361
--- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.360 Mon Apr 10 21:00:08 2006
+++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp   Tue Apr 11 01:33:39 2006
@@ -1397,10 +1397,10 @@
 Tmp1 = DAG.getNode(ISD::TokenFactor, MVT::Other, Tmp1, LastCALLSEQ_END);
 Tmp1 = LegalizeOp(Tmp1);
 LastCALLSEQ_END = DAG.getEntryNode();
-Tmp2 = Node->getOperand(1);
   
 switch (Node->getNumOperands()) {
 case 2:  // ret val
+  Tmp2 = Node->getOperand(1);
   switch (getTypeAction(Tmp2.getValueType())) {
   case Legal:
 Result = DAG.UpdateNodeOperands(Result, Tmp1, LegalizeOp(Tmp2));



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


[llvm-commits] CVS: llvm/include/llvm/IntrinsicsX86.td

2006-04-10 Thread Evan Cheng


Changes in directory llvm/include/llvm:

IntrinsicsX86.td updated: 1.15 -> 1.16
---
Log message:

movnt* and maskmovdqu intrinsics

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

 IntrinsicsX86.td |   23 +++
 1 files changed, 19 insertions(+), 4 deletions(-)


Index: llvm/include/llvm/IntrinsicsX86.td
diff -u llvm/include/llvm/IntrinsicsX86.td:1.15 
llvm/include/llvm/IntrinsicsX86.td:1.16
--- llvm/include/llvm/IntrinsicsX86.td:1.15 Mon Apr 10 17:02:38 2006
+++ llvm/include/llvm/IntrinsicsX86.td  Tue Apr 11 01:56:27 2006
@@ -141,10 +141,9 @@
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse_prefetch : GCCBuiltin<"__builtin_ia32_prefetch">,
   Intrinsic<[llvm_ptr_ty, llvm_int_ty], [IntrWriteMem]>;
-  def int_x86_sse_movntq : GCCBuiltin<"__builtin_ia32_movntq">,
-  Intrinsic<[llvm_ptr_ty, llvm_v2i32_ty], [IntrWriteMem]>;
-  def int_x86_sse_movntps : GCCBuiltin<"__builtin_ia32_movntps">,
-  Intrinsic<[llvm_ptr_ty, llvm_v4f32_ty], [IntrWriteMem]>;
+  def int_x86_sse_movnt_ps : GCCBuiltin<"__builtin_ia32_movntps">,
+  Intrinsic<[llvm_void_ty, llvm_ptr_ty,
+ llvm_v4f32_ty], [IntrWriteMem]>;
   def int_x86_sse_sfence : GCCBuiltin<"__builtin_ia32_sfence">,
   Intrinsic<[llvm_void_ty], [IntrWriteMem]>;
 }
@@ -281,6 +280,19 @@
  llvm_v2f64_ty], [IntrWriteMem]>;
 }
 
+// Cacheability support ops
+let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
+  def int_x86_sse2_movnt_dq : GCCBuiltin<"__builtin_ia32_movntdq">,
+  Intrinsic<[llvm_void_ty, llvm_ptr_ty,
+ llvm_v2i64_ty], [IntrWriteMem]>;
+  def int_x86_sse2_movnt_pd : GCCBuiltin<"__builtin_ia32_movntpd">,
+  Intrinsic<[llvm_void_ty, llvm_ptr_ty,
+ llvm_v2f64_ty], [IntrWriteMem]>;
+  def int_x86_sse2_movnt_i : GCCBuiltin<"__builtin_ia32_movnti">,
+  Intrinsic<[llvm_void_ty, llvm_ptr_ty,
+ llvm_int_ty], [IntrWriteMem]>;
+}
+
 // Misc.
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse2_packsswb_128 : GCCBuiltin<"__builtin_ia32_packsswb128">,
@@ -296,6 +308,9 @@
   Intrinsic<[llvm_int_ty, llvm_v2f64_ty], [IntrNoMem]>;
   def int_x86_sse2_pmovmskb_128 : GCCBuiltin<"__builtin_ia32_pmovmskb128">,
   Intrinsic<[llvm_int_ty, llvm_v16i8_ty], [IntrNoMem]>;
+  def int_x86_sse2_maskmov_dqu : GCCBuiltin<"__builtin_ia32_maskmovdqu">,
+  Intrinsic<[llvm_void_ty, llvm_v16i8_ty,
+ llvm_v16i8_ty, llvm_ptr_ty], [IntrWriteMem]>;
 }
 
 
//===--===//



___
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/X86InstrMMX.td X86InstrSSE.td

2006-04-10 Thread Evan Cheng


Changes in directory llvm/lib/Target/X86:

X86InstrMMX.td updated: 1.9 -> 1.10
X86InstrSSE.td updated: 1.73 -> 1.74
---
Log message:

movnt* and maskmovdqu intrinsics

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

 X86InstrMMX.td |   25 +
 X86InstrSSE.td |   35 +++
 2 files changed, 44 insertions(+), 16 deletions(-)


Index: llvm/lib/Target/X86/X86InstrMMX.td
diff -u llvm/lib/Target/X86/X86InstrMMX.td:1.9 
llvm/lib/Target/X86/X86InstrMMX.td:1.10
--- llvm/lib/Target/X86/X86InstrMMX.td:1.9  Sat Mar 25 00:00:03 2006
+++ llvm/lib/Target/X86/X86InstrMMX.td  Tue Apr 11 01:57:30 2006
@@ -13,6 +13,13 @@
 //
 
//===--===//
 
+// Instruction templates
+// MMXi8 - MMX instructions with ImmT == Imm8 and TB prefix.
+class MMXIi8 o, Format F, dag ops, string asm, list pattern>
+  : X86Inst, TB, Requires<[HasMMX]> {
+  let Pattern = pattern;
+}
+
 // Some 'special' instructions
 def IMPLICIT_DEF_VR64 : I<0, Pseudo, (ops VR64:$dst),
   "#IMPLICIT_DEF $dst",
@@ -50,3 +57,21 @@
 def CVTTPS2PIrm: I<0x2C, MRMSrcMem, (ops VR64:$dst, f64mem:$src),
"cvttps2pi {$src, $dst|$dst, $src}", []>, TB,
  Requires<[HasMMX]>;
+
+// Shuffle and unpack instructions
+def PSHUFWri : MMXIi8<0x70, MRMSrcReg,
+  (ops VR64:$dst, VR64:$src1, i8imm:$src2),
+  "pshufw {$src2, $src1, $dst|$dst, $src1, $src2}", []>;
+def PSHUFWmi : MMXIi8<0x70, MRMSrcMem,
+  (ops VR64:$dst, i64mem:$src1, i8imm:$src2),
+  "pshufw {$src2, $src1, $dst|$dst, $src1, $src2}", []>;
+
+// Misc.
+def MOVNTQ   : I<0xE7, MRMDestMem, (ops i64mem:$dst, VR64:$src),
+ "movntq {$src, $dst|$dst, $src}", []>, TB,
+   Requires<[HasMMX]>;
+
+def MASKMOVQ : I<0xF7, MRMDestMem, (ops VR64:$src, VR64:$mask),
+ "maskmovq {$mask, $src|$src, $mask}", []>, TB,
+   Requires<[HasMMX]>;
+


Index: llvm/lib/Target/X86/X86InstrSSE.td
diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.73 
llvm/lib/Target/X86/X86InstrSSE.td:1.74
--- llvm/lib/Target/X86/X86InstrSSE.td:1.73 Mon Apr 10 19:19:04 2006
+++ llvm/lib/Target/X86/X86InstrSSE.td  Tue Apr 11 01:57:30 2006
@@ -1321,13 +1321,6 @@
 }
 
 // Shuffle and unpack instructions
-def PSHUFWri : PSIi8<0x70, MRMSrcReg,
- (ops VR64:$dst, VR64:$src1, i8imm:$src2),
- "pshufw {$src2, $src1, $dst|$dst, $src1, $src2}", []>;
-def PSHUFWmi : PSIi8<0x70, MRMSrcMem,
- (ops VR64:$dst, i64mem:$src1, i8imm:$src2),
- "pshufw {$src2, $src1, $dst|$dst, $src1, $src2}", []>;
-
 def PSHUFDri : PDIi8<0x70, MRMSrcReg,
  (ops VR128:$dst, VR128:$src1, i8imm:$src2),
  "pshufd {$src2, $src1, $dst|$dst, $src1, $src2}",
@@ -1516,6 +1509,12 @@
  "pmovmskb {$src, $dst|$dst, $src}",
  [(set R32:$dst, (int_x86_sse2_pmovmskb_128 VR128:$src))]>;
 
+// Conditional store
+def MASKMOVDQU : PDI<0xF7, RawFrm, (ops VR128:$src, VR128:$mask),
+ "maskmovdqu {$mask, $src|$src, $mask}",
+ [(int_x86_sse2_maskmov_dqu VR128:$src, VR128:$mask, 
EDI)]>,
+ Imp<[EDI],[]>;
+
 // Prefetching loads
 def PREFETCHT0   : I<0x18, MRM1m, (ops i8mem:$src),
  "prefetcht0 $src", []>, TB,
@@ -1531,15 +1530,19 @@
Requires<[HasSSE1]>;
 
 // Non-temporal stores
-def MOVNTQ   : I<0xE7, MRMDestMem, (ops i64mem:$dst, VR64:$src),
- "movntq {$src, $dst|$dst, $src}", []>, TB,
-   Requires<[HasSSE1]>;
-def MOVNTPS  : I<0x2B, MRMDestMem, (ops i128mem:$dst, VR128:$src),
-"movntps {$src, $dst|$dst, $src}", []>, TB,
-   Requires<[HasSSE1]>;
-def MASKMOVQ : I<0xF7, MRMDestMem, (ops i64mem:$dst, VR64:$src),
- "maskmovq {$src, $dst|$dst, $src}", []>, TB,
-   Requires<[HasSSE1]>;
+def MOVNTPSmr : PSI<0x2B, MRMDestMem, (ops i128mem:$dst, VR128:$src),
+"movntps {$src, $dst|$dst, $src}",
+[(int_x86_sse_movnt_ps addr:$dst, VR128:$src)]>;
+def MOVNTPDmr : PDI<0x2B, MRMDestMem, (ops i128mem:$dst, VR128:$src),
+"movntpd {$src, $dst|$dst, $src}",
+[(int_x86_sse2_movnt_pd addr:$dst, VR128:$src)]>;
+def MOVNTDQmr : PDI<0xE7, MRMDestMem, (ops f128mem:$dst, VR128:$src),
+"movntdq {$src, $dst|$dst, $src}",
+[(int_x86_sse2_movnt_dq addr:$dst, VR128:$src)]>;
+def MOVNTImr  :   I<0xC3, MRMDestMem, (ops i32mem:$dst, R32:$src),
+"movnti {$src, $dst|$dst, $src}",
+[(int_x86_sse2_movnt_i addr:$dst, R32:$src)]>, 
+  TB, Requires<[HasSSE2]>;
 
 // Store fence
 def SFENCE : I<0xAE, MRM7m, (ops),



_