[llvm-commits] [llvm] r44999 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp

2007-12-13 Thread Wojciech Matyjewicz
Author: wmat
Date: Thu Dec 13 10:22:58 2007
New Revision: 44999

URL: http://llvm.org/viewvc/llvm-project?rev=44999&view=rev
Log:
Make these loops follow GetGEPOperands() behavior.
Let: %q = GEP %p, X, ...
If %p is a GEP, we can chase baseptr further, only if X==0.


Modified:
llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp

Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=44999&r1=44998&r2=44999&view=diff

==
--- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Thu Dec 13 10:22:58 2007
@@ -391,17 +391,19 @@
   if (isGEP(V1) && isGEP(V2)) {
 // Drill down into the first non-gep value, to test for must-aliasing of
 // the base pointers.
-const Value *BasePtr1 = V1, *BasePtr2 = V2;
-do {
-  BasePtr1 = cast(BasePtr1)->getOperand(0);
-} while (isGEP(BasePtr1) &&
- cast(BasePtr1)->getOperand(1) ==
-   Constant::getNullValue(cast(BasePtr1)->getOperand(1)->getType()));
-do {
-  BasePtr2 = cast(BasePtr2)->getOperand(0);
-} while (isGEP(BasePtr2) &&
- cast(BasePtr2)->getOperand(1) ==
-   Constant::getNullValue(cast(BasePtr2)->getOperand(1)->getType()));
+const User *G = cast(V1);
+while (isGEP(G->getOperand(0)) &&
+   G->getOperand(1) ==
+   Constant::getNullValue(G->getOperand(1)->getType()))
+  G = cast(G->getOperand(0));
+const Value *BasePtr1 = G->getOperand(0);
+
+G = cast(V2);
+while (isGEP(G->getOperand(0)) &&
+   G->getOperand(1) ==
+   Constant::getNullValue(G->getOperand(1)->getType()))
+  G = cast(G->getOperand(0));
+const Value *BasePtr2 = G->getOperand(0);
 
 // Do the base pointers alias?
 AliasResult BaseAlias = alias(BasePtr1, ~0U, BasePtr2, ~0U);


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


Re: [llvm-commits] RFC: patch for PR1782 (BasicAliasAnalyis)

2007-12-13 Thread Wojciech Matyjewicz
Chris Lattner wrote:
>> Suppose, we have a target with 32-bit pointers and the following
>> instructions:
>>
>> %p = getelementptr i32* %x, i32 -1
>> %q = getelementptr i32* %x, i32 1073741823  ;(1073741823 == 2^30 - 1)
>>
>> TargetData::getIndexedOffset() uses 64-bit arithmetic to perform  
>> offset
>> computation and return 64-bit values. Hence, it will return -4 as an
>> offset for %p, and 2^32 - 4 for %q. Based on these offsets, it may  
>> seem
>> that %p and %q point to different memory objects. However, they don't,
>> taking into account that pointers are 32-bit long.
> 
> Ok.
> 
>> I guess, such a large positive index in GEP as seen above can be
>> introduced by -instcombine pass.
> 
> Ok.  This is somewhat dubious though, as it is wrapping around the end  
> of the address space which is undefined in C.

I've found one place in instcombine, where something like this can be
introduced. Fixed with this patch:
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20071210/056253.html

>> I think, the simplest way to fix it is to truncate the computed offset
>> to the target pointer size before returning it in
>> TargetData::getIndexedOffset(). If you think this is the correct
>> approach, I may prepare a patch.
> 
> Ah, that does make a lot of sense.  Since the fix is simple, please go  
> for it!

I've rethought the issue. If you say that, wrapping around the memory by
getelementptr is undefined, I think it's better to leave it as it is.
This way we'll be able to catch other optimizer bugs, if there are any
of the above kind.

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


[llvm-commits] [llvm-gcc-4.0] r45009 - in /llvm-gcc-4.0/trunk/gcc: config/darwin.h except.c llvm-convert.cpp unwind-dw2.c

2007-12-13 Thread Dale Johannesen
Author: johannes
Date: Thu Dec 13 12:32:10 2007
New Revision: 45009

URL: http://llvm.org/viewvc/llvm-project?rev=45009&view=rev
Log:
Make exceptions work on Darwin


Modified:
llvm-gcc-4.0/trunk/gcc/config/darwin.h
llvm-gcc-4.0/trunk/gcc/except.c
llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
llvm-gcc-4.0/trunk/gcc/unwind-dw2.c

Modified: llvm-gcc-4.0/trunk/gcc/config/darwin.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/config/darwin.h?rev=45009&r1=45008&r2=45009&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/config/darwin.h (original)
+++ llvm-gcc-4.0/trunk/gcc/config/darwin.h Thu Dec 13 12:32:10 2007
@@ -1748,6 +1748,10 @@
   else if (!MACHO_DYNAMIC_NO_PIC_P)  \
 argvec.push_back ("--relocation-model=static")
 #endif /* defined (TARGET_386) */
+
+/* On Darwin _Unwind_Resume is sensitive to the dynamic stack layout; we
+   use _Unwind_Resume_or_Rethrow instead.  */
+#define LLVM_STACKSENSITIVE_UNWIND_RESUME 1
 #endif
 /* APPLE LOCAL end LLVM */
 

Modified: llvm-gcc-4.0/trunk/gcc/except.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/except.c?rev=45009&r1=45008&r2=45009&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/except.c (original)
+++ llvm-gcc-4.0/trunk/gcc/except.c Thu Dec 13 12:32:10 2007
@@ -3510,9 +3510,13 @@
 default_init_unwind_resume_libfunc (void)
 {
   /* The default c++ routines aren't actually c++ specific, so use those.  */
-  unwind_resume_libfunc =
-init_one_libfunc ( USING_SJLJ_EXCEPTIONS ? "_Unwind_SjLj_Resume"
-: "_Unwind_Resume");
+  unwind_resume_libfunc = init_one_libfunc ( USING_SJLJ_EXCEPTIONS ?
+ "_Unwind_SjLj_Resume"
+#ifdef LLVM_STACKSENSITIVE_UNWIND_RESUME
+ : "_Unwind_Resume_or_Rethrow");
+#else
+ : "_Unwind_Resume");
+#endif
 }
 /* APPLE LOCAL end LLVM */
 

Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=45009&r1=45008&r2=45009&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Thu Dec 13 12:32:10 2007
@@ -2178,7 +2178,12 @@
NULL);
 
   FuncUnwindResume =
-TheModule->getOrInsertFunction("_Unwind_Resume",
+TheModule->getOrInsertFunction(
+#ifdef LLVM_STACKSENSITIVE_UNWIND_RESUME
+   "_Unwind_Resume_or_Rethrow",
+#else
+   "_Unwind_Resume",
+#endif
Type::getPrimitiveType(Type::VoidTyID),
PointerType::get(Type::Int8Ty),
NULL);

Modified: llvm-gcc-4.0/trunk/gcc/unwind-dw2.c
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/unwind-dw2.c?rev=45009&r1=45008&r2=45009&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/unwind-dw2.c (original)
+++ llvm-gcc-4.0/trunk/gcc/unwind-dw2.c Thu Dec 13 12:32:10 2007
@@ -1318,7 +1318,14 @@
 static inline _Unwind_Ptr
 uw_identify_context (struct _Unwind_Context *context)
 {
+/* LLVM LOCAL begin
+   This change is needed to match Apple's installed libgcc. */
+#ifdef LLVM_STACKSENSITIVE_UNWIND_RESUME
+  return _Unwind_GetCFA (context);
+#else
   return _Unwind_GetIP (context);
+#endif
+/* LLVM LOCAL end */
 }
 
 


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


[llvm-commits] [llvm] r45010 - /llvm/tags/Apple/llvmCore-2005/

2007-12-13 Thread Bill Wendling
Author: void
Date: Thu Dec 13 12:53:57 2007
New Revision: 45010

URL: http://llvm.org/viewvc/llvm-project?rev=45010&view=rev
Log:
Creating llvmCore-2005 tag.

Added:
llvm/tags/Apple/llvmCore-2005/
  - copied from r45009, llvm/trunk/

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


Re: [llvm-commits] [llvm] r44954 - in /llvm/trunk: lib/CodeGen/SelectionDAG/SelectionDAG.cpp lib/Target/X86/X86ISelLowering.cpp test/CodeGen/X86/vec_ctbits.ll

2007-12-13 Thread Dan Gohman
>> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
>> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Dec 12  
>> 16:21:26 2007
>> @@ -483,6 +483,12 @@
>>  setOperationAction(ISD::CTPOP, (MVT::ValueType)VT, Expand);
>>  setOperationAction(ISD::CTTZ, (MVT::ValueType)VT, Expand);
>>  setOperationAction(ISD::CTLZ, (MVT::ValueType)VT, Expand);
>> +setOperationAction(ISD::SHL, (MVT::ValueType)VT, Expand);
>> +setOperationAction(ISD::SRA, (MVT::ValueType)VT, Expand);
>> +setOperationAction(ISD::SRL, (MVT::ValueType)VT, Expand);
>> +setOperationAction(ISD::ROTL, (MVT::ValueType)VT, Expand);
>> +setOperationAction(ISD::ROTR, (MVT::ValueType)VT, Expand);
>> +setOperationAction(ISD::BSWAP, (MVT::ValueType)VT, Expand);
>>}
> 
> Hi Dan,
> 
> How do you create these nodes with vector types (in C)? I don't think  
> the legalizer is capable of expanding these ops with vector types?

SelectionDAGLegalize::ExpandBitCount uses ISD::SRL when lowering
ISD::CTPOP, so a vector CTPOP gets a vector SRL, for example. I noticed
a bug with the way this works though; I'll fix that shortly. Also, in C,
one could vectorize a[i] << b[i], though LLVM doesn't currently support
that.

The legalizer expands these by running SplitVectorOp and
ScalarizeVectorOp as necessary, just as with other operations.

Dan

-- 
Dan Gohman, Cray Inc.
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [test-suite] r45011 - /test-suite/trunk/Makefile.programs

2007-12-13 Thread Evan Cheng
Author: evancheng
Date: Thu Dec 13 12:58:22 2007
New Revision: 45011

URL: http://llvm.org/viewvc/llvm-project?rev=45011&view=rev
Log:
Change x86 llcbeta back to -new-coalescer-heuristic=true

Modified:
test-suite/trunk/Makefile.programs

Modified: test-suite/trunk/Makefile.programs
URL: 
http://llvm.org/viewvc/llvm-project/test-suite/trunk/Makefile.programs?rev=45011&r1=45010&r2=45011&view=diff

==
--- test-suite/trunk/Makefile.programs (original)
+++ test-suite/trunk/Makefile.programs Thu Dec 13 12:58:22 2007
@@ -222,8 +222,7 @@
 LLCBETAOPTION := -sched=simple 
 endif
 ifeq ($(ARCH),x86)
-LLCBETAOPTION := -optimize-ext-uses
-#-new-coalescer-heuristic=true
+LLCBETAOPTION := -new-coalescer-heuristic=true
 #-tailcallopt
 #-regalloc=local -fast
 #-disable-rematerialization


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


[llvm-commits] [llvm-gcc-4.2] r45012 - /llvm-gcc-4.2/tags/Apple/llvmgcc42-2003/

2007-12-13 Thread Bill Wendling
Author: void
Date: Thu Dec 13 13:01:20 2007
New Revision: 45012

URL: http://llvm.org/viewvc/llvm-project?rev=45012&view=rev
Log:
Creating llvmgcc-2003 tag.

Added:
llvm-gcc-4.2/tags/Apple/llvmgcc42-2003/
  - copied from r45011, llvm-gcc-4.2/trunk/

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


[llvm-commits] [llvm] r45013 - /llvm/trunk/docs/CodeGenerator.html

2007-12-13 Thread Dan Gohman
Author: djg
Date: Thu Dec 13 14:43:47 2007
New Revision: 45013

URL: http://llvm.org/viewvc/llvm-project?rev=45013&view=rev
Log:
Make it more clear that some things that can't be done in .td files can
still be done in the LLVM code generator. And update the summary for the
X86 target.

Modified:
llvm/trunk/docs/CodeGenerator.html

Modified: llvm/trunk/docs/CodeGenerator.html
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CodeGenerator.html?rev=45013&r1=45012&r2=45013&view=diff

==
--- llvm/trunk/docs/CodeGenerator.html (original)
+++ llvm/trunk/docs/CodeGenerator.html Thu Dec 13 14:43:47 2007
@@ -754,7 +754,8 @@
 
 Portions of the DAG instruction selector are generated from the target 
 description (*.td) files.  Our goal is for the entire instruction
-selector to be generated from these .td files.
+selector to be generated from these .td files, though currently
+there are still things that require custom C++ code.
 
 
 
@@ -1112,7 +1113,8 @@
 There is no great way to support matching complex addressing modes yet.  In
 the future, we will extend pattern fragments to allow them to define
 multiple values (e.g. the four operands of the X86
-addressing mode).  In addition, we'll extend fragments so that a
+addressing mode, which are currently matched with custom C++ code).
+In addition, we'll extend fragments so that a
 fragment can match multiple different patterns.
 We don't automatically infer flags like isStore/isLoad yet.
 We don't automatically generate the set of supported registers and
@@ -1629,11 +1631,9 @@
 
 
 The X86 code generator lives in the lib/Target/X86 directory.  This
-code generator currently targets a generic P6-like processor.  As such, it
-produces a few P6-and-above instructions (like conditional moves), but it does
-not make use of newer features like MMX or SSE.  In the future, the X86 backend
-will have sub-target support added for specific processor families and 
-implementations.
+code generator is capable of targeting a variety of x86-32 and x86-64
+processors, and includes support for ISA extensions such as MMX and SSE.
+
 
 
 


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


[llvm-commits] [llvm-gcc-4.2] r45016 - /llvm-gcc-4.2/trunk/gcc/config/darwin.h

2007-12-13 Thread Dale Johannesen
Author: johannes
Date: Thu Dec 13 17:56:08 2007
New Revision: 45016

URL: http://llvm.org/viewvc/llvm-project?rev=45016&view=rev
Log:
Do not invoke dsymutil at -O1 or higher, it whines
about the lack of debug info which breaks many
testcases.


Modified:
llvm-gcc-4.2/trunk/gcc/config/darwin.h

Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/darwin.h?rev=45016&r1=45015&r2=45016&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/config/darwin.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/darwin.h Thu Dec 13 17:56:08 2007
@@ -315,7 +315,9 @@
 %{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
 "/* APPLE LOCAL end mainline 4.3 2006-10-31 4370146 */"\
 "/* APPLE LOCAL ARM 5342595 */"\
-%{.c|.cc|.C|.cpp|.cp|.c++|.cxx|.CPP|.m|.mm: %(darwin_dsymutil) "
+"/* LLVM LOCAL do not use dsymutil with -O1 or higher */"\
+%{.c|.cc|.C|.cpp|.cp|.c++|.cxx|.CPP|.m|.mm: \
+%{!O1: %{!O2: %{!O3: %{!O4: %{!Os: %(darwin_dsymutil) }"
 /* APPLE LOCAL end mainline */
 
 #ifdef TARGET_SYSTEM_ROOT


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


Re: [llvm-commits] RFC: patch for PR1782 (BasicAliasAnalyis)

2007-12-13 Thread Chris Lattner
>>> I guess, such a large positive index in GEP as seen above can be
>>> introduced by -instcombine pass.
>>
>> Ok.  This is somewhat dubious though, as it is wrapping around the  
>> end
>> of the address space which is undefined in C.
>
> I've found one place in instcombine, where something like this can be
> introduced. Fixed with this patch:
> http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of- 
> Mon-20071210/056253.html

I agree, that is definitely an instcombine bug, thanks!

>>> I think, the simplest way to fix it is to truncate the computed  
>>> offset
>>> to the target pointer size before returning it in
>>> TargetData::getIndexedOffset(). If you think this is the correct
>>> approach, I may prepare a patch.
>>
>> Ah, that does make a lot of sense.  Since the fix is simple,  
>> please go
>> for it!
>
> I've rethought the issue. If you say that, wrapping around the  
> memory by
> getelementptr is undefined, I think it's better to leave it as it is.
> This way we'll be able to catch other optimizer bugs, if there are any
> of the above kind.

Excellent, thanks!

-Chris

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


[llvm-commits] [llvm-gcc-4.2] r45017 - /llvm-gcc-4.2/trunk/gcc/Makefile.in

2007-12-13 Thread Devang Patel
Author: dpatel
Date: Thu Dec 13 18:54:36 2007
New Revision: 45017

URL: http://llvm.org/viewvc/llvm-project?rev=45017&view=rev
Log:
Set libllvmgcc.dylib compatibility version number.

Modified:
llvm-gcc-4.2/trunk/gcc/Makefile.in

Modified: llvm-gcc-4.2/trunk/gcc/Makefile.in
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/Makefile.in?rev=45017&r1=45016&r2=45017&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/Makefile.in (original)
+++ llvm-gcc-4.2/trunk/gcc/Makefile.in Thu Dec 13 18:54:36 2007
@@ -1209,7 +1209,7 @@
echo $(LLVMLIBFILES)
$(CXX) $(DYLIB_COMPILE_FLAGS) $(INCLUDES) -o $@ \
$< $(LLVMLIBFILES) -L/usr/lib/gcc/$(build)/4.0.1/ -dynamiclib 
-single_module \
-   -install_name @executable_path/$@
+   -compatibility_version 1.0.0 -current_version 1.0.0 -install_name 
@executable_path/$@
 
 LLVMBACKENDFILES := libllvmgcc$(LLVM_STAGE).dylib
 


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


[llvm-commits] [llvm-gcc-4.2] r45018 - /llvm-gcc-4.2/tags/Apple/llvmgcc42-2004/

2007-12-13 Thread Bill Wendling
Author: void
Date: Thu Dec 13 19:02:33 2007
New Revision: 45018

URL: http://llvm.org/viewvc/llvm-project?rev=45018&view=rev
Log:
Need to grab a patch that makes building happy.

Added:
llvm-gcc-4.2/tags/Apple/llvmgcc42-2004/
  - copied from r45017, llvm-gcc-4.2/trunk/

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


[llvm-commits] [llvm-gcc-4.0] r45021 - /llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp

2007-12-13 Thread Dale Johannesen
Author: johannes
Date: Thu Dec 13 19:11:55 2007
New Revision: 45021

URL: http://llvm.org/viewvc/llvm-project?rev=45021&view=rev
Log:
Fix broken IR gen for complex int != .


Modified:
llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=45021&r1=45020&r2=45021&view=diff

==
--- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Thu Dec 13 19:11:55 2007
@@ -5211,8 +5211,8 @@
   DSTr = Builder.CreateFCmpUNE(LHSr, RHSr, "tmpr");
   DSTi = Builder.CreateFCmpUNE(LHSi, RHSi, "tmpi");
 } else {
-  DSTr = Builder.CreateICmpEQ(LHSr, RHSr, "tmpr");
-  DSTi = Builder.CreateICmpEQ(LHSi, RHSi, "tmpi");
+  DSTr = Builder.CreateICmpNE(LHSr, RHSr, "tmpr");
+  DSTi = Builder.CreateICmpNE(LHSi, RHSi, "tmpi");
 }
 return Builder.CreateOr(DSTr, DSTi, "tmp");
   }


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


[llvm-commits] [llvm-gcc-4.2] r45019 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

2007-12-13 Thread Dale Johannesen
Author: johannes
Date: Thu Dec 13 19:06:35 2007
New Revision: 45019

URL: http://llvm.org/viewvc/llvm-project?rev=45019&view=rev
Log:
Fix broken IR gen for complex int != .


Modified:
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=45019&r1=45018&r2=45019&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Thu Dec 13 19:06:35 2007
@@ -4753,8 +4753,8 @@
   DSTr = Builder.CreateFCmpUNE(LHSr, RHSr, "tmpr");
   DSTi = Builder.CreateFCmpUNE(LHSi, RHSi, "tmpi");
 } else {
-  DSTr = Builder.CreateICmpEQ(LHSr, RHSr, "tmpr");
-  DSTi = Builder.CreateICmpEQ(LHSi, RHSi, "tmpi");
+  DSTr = Builder.CreateICmpNE(LHSr, RHSr, "tmpr");
+  DSTi = Builder.CreateICmpNE(LHSi, RHSi, "tmpi");
 }
 return Builder.CreateOr(DSTr, DSTi, "tmp");
   }


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


[llvm-commits] [llvm] r45022 - in /llvm/trunk: include/llvm/Target/TargetInstrInfo.h lib/Target/Target.td utils/TableGen/CodeGenInstruction.h utils/TableGen/CodeGenTarget.cpp utils/TableGen/InstrInfoE

2007-12-13 Thread Bill Wendling
Author: void
Date: Thu Dec 13 19:48:59 2007
New Revision: 45022

URL: http://llvm.org/viewvc/llvm-project?rev=45022&view=rev
Log:
Add flags to indicate that there are "never" side effects or that there "may be"
side effects for machine instructions.

Modified:
llvm/trunk/include/llvm/Target/TargetInstrInfo.h
llvm/trunk/lib/Target/Target.td
llvm/trunk/utils/TableGen/CodeGenInstruction.h
llvm/trunk/utils/TableGen/CodeGenTarget.cpp
llvm/trunk/utils/TableGen/InstrInfoEmitter.cpp

Modified: llvm/trunk/include/llvm/Target/TargetInstrInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetInstrInfo.h?rev=45022&r1=45021&r2=45022&view=diff

==
--- llvm/trunk/include/llvm/Target/TargetInstrInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetInstrInfo.h Thu Dec 13 19:48:59 2007
@@ -91,6 +91,18 @@
 // ARM instructions which can set condition code if 's' bit is set.
 const unsigned M_HAS_OPTIONAL_DEF  = 1 << 17;
 
+// M_MAY_HAVE_SIDE_EFFECTS - Set if this instruction *might* have side effects,
+// e.g. load instructions. Note: This and M_NEVER_HAS_SIDE_EFFECTS are mutually
+// exclusive. You can't set both! If neither flag is set, then the instruction
+// *always* has side effects.
+const unsigned M_MAY_HAVE_SIDE_EFFECTS = 1 << 18;
+
+// M_NEVER_HAS_SIDE_EFFECTS - Set if this instruction *never* has side effects,
+// e.g., xor on X86.  Note: This and M_MAY_HAVE_SIDE_EFFECTS are mutually
+// exclusive. You can't set both! If neither flag is set, then the instruction
+// *always* has side effects.
+const unsigned M_NEVER_HAS_SIDE_EFFECTS = 1 << 19;
+
 // Machine operand flags
 // M_LOOK_UP_PTR_REG_CLASS - Set if this operand is a pointer value and it
 // requires a callback to look up its register class.

Modified: llvm/trunk/lib/Target/Target.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Target.td?rev=45022&r1=45021&r2=45022&view=diff

==
--- llvm/trunk/lib/Target/Target.td (original)
+++ llvm/trunk/lib/Target/Target.td Thu Dec 13 19:48:59 2007
@@ -203,6 +203,11 @@
   bit usesCustomDAGSchedInserter = 0; // Pseudo instr needing special help.
   bit hasCtrlDep   = 0; // Does this instruction r/w ctrl-flow chains?
   bit isNotDuplicable = 0;  // Is it unsafe to duplicate this instruction?
+
+  // Side effect flags - If neither of these flags is set, then the instruction
+  // *always* has side effects. Otherwise, it's one or the other.
+  bit mayHaveSideEffects = 0;  // This instruction *may* have side effects.
+  bit neverHasSideEffects = 0; // This instruction never has side effects.
   
   InstrItinClass Itinerary = NoItinerary;// Execution steps used for 
scheduling.
 

Modified: llvm/trunk/utils/TableGen/CodeGenInstruction.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenInstruction.h?rev=45022&r1=45021&r2=45022&view=diff

==
--- llvm/trunk/utils/TableGen/CodeGenInstruction.h (original)
+++ llvm/trunk/utils/TableGen/CodeGenInstruction.h Thu Dec 13 19:48:59 2007
@@ -104,6 +104,8 @@
 bool hasCtrlDep;
 bool isNotDuplicable;
 bool hasOptionalDef;
+bool mayHaveSideEffects;
+bool neverHasSideEffects;
 
 /// ParseOperandName - Parse an operand name like "$foo" or "$foo.bar",
 /// where $foo is a whole operand and $foo.bar refers to a suboperand.

Modified: llvm/trunk/utils/TableGen/CodeGenTarget.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenTarget.cpp?rev=45022&r1=45021&r2=45022&view=diff

==
--- llvm/trunk/utils/TableGen/CodeGenTarget.cpp (original)
+++ llvm/trunk/utils/TableGen/CodeGenTarget.cpp Thu Dec 13 19:48:59 2007
@@ -395,9 +395,15 @@
   usesCustomDAGSchedInserter = R->getValueAsBit("usesCustomDAGSchedInserter");
   hasCtrlDep   = R->getValueAsBit("hasCtrlDep");
   isNotDuplicable = R->getValueAsBit("isNotDuplicable");
+  mayHaveSideEffects = R->getValueAsBit("mayHaveSideEffects");
+  neverHasSideEffects = R->getValueAsBit("neverHasSideEffects");
   hasOptionalDef = false;
   hasVariableNumberOfOperands = false;
-  
+
+  if (mayHaveSideEffects && neverHasSideEffects)
+throw R->getName() +
+  ": cannot have both 'mayHaveSideEffects' and 'neverHasSideEffects' set!";
+
   DagInit *DI;
   try {
 DI = R->getValueAsDag("OutOperandList");

Modified: llvm/trunk/utils/TableGen/InstrInfoEmitter.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/InstrInfoEmitter.cpp?rev=45022&r1=45021&r2=45022&view=diff

==
--- llvm/trunk/utils/TableGen/InstrInfoEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/InstrInfoEmitter.cpp Thu Dec 13 19:48:59 2007
@@ -

Re: [llvm-commits] [llvm-gcc-4.2] r45017 - /llvm-gcc-4.2/trunk/gcc/Makefile.in

2007-12-13 Thread Chris Lattner

On Dec 13, 2007, at 4:54 PM, Devang Patel wrote:
> URL: http://llvm.org/viewvc/llvm-project?rev=45017&view=rev
> Log:
> Set libllvmgcc.dylib compatibility version number.
>
> Modified:
> llvm-gcc-4.2/trunk/gcc/Makefile.in
>
> Modified: llvm-gcc-4.2/trunk/gcc/Makefile.in
> URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/ 
> Makefile.in?rev=45017&r1=45016&r2=45017&view=diff
>
> == 
> 
> --- llvm-gcc-4.2/trunk/gcc/Makefile.in (original)
> +++ llvm-gcc-4.2/trunk/gcc/Makefile.in Thu Dec 13 18:54:36 2007
> @@ -1209,7 +1209,7 @@
>   echo $(LLVMLIBFILES)
>   $(CXX) $(DYLIB_COMPILE_FLAGS) $(INCLUDES) -o $@ \
> $< $(LLVMLIBFILES) -L/usr/lib/gcc/$(build)/4.0.1/ - 
> dynamiclib -single_module \
> -   -install_name @executable_path/$@
> +   -compatibility_version 1.0.0 -current_version 1.0.0 - 
> install_name @executable_path/$@

is -L.../4.0.1 really right?

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


[llvm-commits] [llvm] r45024 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp lib/Target/X86/X86ISelLowering.h lib/Target/X86/X86InstrInfo.td lib/Target/X86/X86InstrX86-64.td test/CodeGen/X86/clz.

2007-12-13 Thread Evan Cheng
Author: evancheng
Date: Thu Dec 13 20:13:44 2007
New Revision: 45024

URL: http://llvm.org/viewvc/llvm-project?rev=45024&view=rev
Log:
Implement ctlz and cttz with bsr and bsf.

Added:
llvm/trunk/test/CodeGen/X86/clz.ll
Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/lib/Target/X86/X86ISelLowering.h
llvm/trunk/lib/Target/X86/X86InstrInfo.td
llvm/trunk/lib/Target/X86/X86InstrX86-64.td

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=45024&r1=45023&r2=45024&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Thu Dec 13 20:13:44 2007
@@ -210,18 +210,18 @@
   setOperationAction(ISD::FLT_ROUNDS   , MVT::i32  , Custom);
   
   setOperationAction(ISD::CTPOP, MVT::i8   , Expand);
-  setOperationAction(ISD::CTTZ , MVT::i8   , Expand);
-  setOperationAction(ISD::CTLZ , MVT::i8   , Expand);
+  setOperationAction(ISD::CTTZ , MVT::i8   , Custom);
+  setOperationAction(ISD::CTLZ , MVT::i8   , Custom);
   setOperationAction(ISD::CTPOP, MVT::i16  , Expand);
-  setOperationAction(ISD::CTTZ , MVT::i16  , Expand);
-  setOperationAction(ISD::CTLZ , MVT::i16  , Expand);
+  setOperationAction(ISD::CTTZ , MVT::i16  , Custom);
+  setOperationAction(ISD::CTLZ , MVT::i16  , Custom);
   setOperationAction(ISD::CTPOP, MVT::i32  , Expand);
-  setOperationAction(ISD::CTTZ , MVT::i32  , Expand);
-  setOperationAction(ISD::CTLZ , MVT::i32  , Expand);
+  setOperationAction(ISD::CTTZ , MVT::i32  , Custom);
+  setOperationAction(ISD::CTLZ , MVT::i32  , Custom);
   if (Subtarget->is64Bit()) {
 setOperationAction(ISD::CTPOP  , MVT::i64  , Expand);
-setOperationAction(ISD::CTTZ   , MVT::i64  , Expand);
-setOperationAction(ISD::CTLZ   , MVT::i64  , Expand);
+setOperationAction(ISD::CTTZ   , MVT::i64  , Custom);
+setOperationAction(ISD::CTLZ   , MVT::i64  , Custom);
   }
 
   setOperationAction(ISD::READCYCLECOUNTER , MVT::i64  , Custom);
@@ -5345,6 +5345,42 @@
   ISD::TRUNCATE : ISD::ZERO_EXTEND), VT, RetVal);
 }
 
+SDOperand X86TargetLowering::LowerCTLZ(SDOperand Op, SelectionDAG &DAG) {
+  MVT::ValueType VT = Op.getValueType();
+  MVT::ValueType OpVT = VT;
+  unsigned NumBits = MVT::getSizeInBits(VT);
+
+  Op = Op.getOperand(0);
+  if (VT == MVT::i8) {
+OpVT = MVT::i32;
+Op = DAG.getNode(ISD::ZERO_EXTEND, OpVT, Op);
+  }
+  if (VT == MVT::i32 || VT == MVT::i64)
+return DAG.getNode(ISD::XOR, OpVT, DAG.getNode(X86ISD::BSR, OpVT, Op),
+   DAG.getConstant(NumBits-1, OpVT));
+
+  Op = DAG.getNode(ISD::SUB, OpVT, DAG.getConstant(NumBits-1, OpVT),
+   DAG.getNode(X86ISD::BSR, OpVT, Op));
+  if (VT == MVT::i8)
+Op = DAG.getNode(ISD::TRUNCATE, MVT::i8, Op);
+  return Op;
+}
+
+SDOperand X86TargetLowering::LowerCTTZ(SDOperand Op, SelectionDAG &DAG) {
+  MVT::ValueType VT = Op.getValueType();
+  MVT::ValueType OpVT = VT;
+
+  Op = Op.getOperand(0);
+  if (VT == MVT::i8) {
+OpVT = MVT::i32;
+Op = DAG.getNode(ISD::ZERO_EXTEND, OpVT, Op);
+  }
+  Op = DAG.getNode(X86ISD::BSF, OpVT, Op);
+  if (VT == MVT::i8)
+Op = DAG.getNode(ISD::TRUNCATE, MVT::i8, Op);
+  return Op;
+}
+
 /// LowerOperation - Provide custom lowering hooks for some operations.
 ///
 SDOperand X86TargetLowering::LowerOperation(SDOperand Op, SelectionDAG &DAG) {
@@ -5387,7 +5423,8 @@
   case ISD::EH_RETURN:  return LowerEH_RETURN(Op, DAG);
   case ISD::TRAMPOLINE: return LowerTRAMPOLINE(Op, DAG);
   case ISD::FLT_ROUNDS: return LowerFLT_ROUNDS(Op, DAG);
-  
+  case ISD::CTLZ:   return LowerCTLZ(Op, DAG);
+  case ISD::CTTZ:   return LowerCTTZ(Op, DAG);
   
   // FIXME: REMOVE THIS WHEN LegalizeDAGTypes lands.
   case ISD::READCYCLECOUNTER:
@@ -5407,6 +5444,8 @@
 const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {
   switch (Opcode) {
   default: return NULL;
+  case X86ISD::BSF:return "X86ISD::BSF";
+  case X86ISD::BSR:return "X86ISD::BSR";
   case X86ISD::SHLD:   return "X86ISD::SHLD";
   case X86ISD::SHRD:   return "X86ISD::SHRD";
   case X86ISD::FAND:   return "X86ISD::FAND";

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.h
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=45024&r1=45023&r2=45024&view=diff

==
--- llvm/trunk/lib/Target/X86/X86ISelLowering.h (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.h Thu De

Re: [llvm-commits] [llvm-gcc-4.2] r45017 - /llvm-gcc-4.2/trunk/gcc/Makefile.in

2007-12-13 Thread Devang Patel

On Dec 13, 2007, at 5:52 PM, Chris Lattner wrote:

>
> On Dec 13, 2007, at 4:54 PM, Devang Patel wrote:
>> URL: http://llvm.org/viewvc/llvm-project?rev=45017&view=rev
>> Log:
>> Set libllvmgcc.dylib compatibility version number.
>>
>> Modified:
>>llvm-gcc-4.2/trunk/gcc/Makefile.in
>>
>> Modified: llvm-gcc-4.2/trunk/gcc/Makefile.in
>> URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/
>> Makefile.in?rev=45017&r1=45016&r2=45017&view=diff
>>
>> =
>> =
>> 
>> --- llvm-gcc-4.2/trunk/gcc/Makefile.in (original)
>> +++ llvm-gcc-4.2/trunk/gcc/Makefile.in Thu Dec 13 18:54:36 2007
>> @@ -1209,7 +1209,7 @@
>>  echo $(LLVMLIBFILES)
>>  $(CXX) $(DYLIB_COMPILE_FLAGS) $(INCLUDES) -o $@ \
>>$< $(LLVMLIBFILES) -L/usr/lib/gcc/$(build)/4.0.1/ -
>> dynamiclib -single_module \
>> -   -install_name @executable_path/$@
>> +   -compatibility_version 1.0.0 -current_version 1.0.0 -
>> install_name @executable_path/$@
>
> is -L.../4.0.1 really right?

hmm.. no. Actually, I don't understand why -L../4.x.1 is required  
here. I'll investigate.
-
Devang
___
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


[llvm-commits] [llvm-gcc-4.2] r45026 - /llvm-gcc-4.2/trunk/gcc/Makefile.in

2007-12-13 Thread Devang Patel
Author: dpatel
Date: Fri Dec 14 00:02:16 2007
New Revision: 45026

URL: http://llvm.org/viewvc/llvm-project?rev=45026&view=rev
Log:
Remove unnecessary -L path.

Modified:
llvm-gcc-4.2/trunk/gcc/Makefile.in

Modified: llvm-gcc-4.2/trunk/gcc/Makefile.in
URL: 
http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/Makefile.in?rev=45026&r1=45025&r2=45026&view=diff

==
--- llvm-gcc-4.2/trunk/gcc/Makefile.in (original)
+++ llvm-gcc-4.2/trunk/gcc/Makefile.in Fri Dec 14 00:02:16 2007
@@ -1208,8 +1208,9 @@
 libllvmgcc$(LLVM_STAGE).dylib: llvm-linker-hack.cpp $(LLVMLIBFILES)
echo $(LLVMLIBFILES)
$(CXX) $(DYLIB_COMPILE_FLAGS) $(INCLUDES) -o $@ \
-   $< $(LLVMLIBFILES) -L/usr/lib/gcc/$(build)/4.0.1/ -dynamiclib 
-single_module \
-   -compatibility_version 1.0.0 -current_version 1.0.0 -install_name 
@executable_path/$@
+   $< $(LLVMLIBFILES) -dynamiclib -single_module \
+   -compatibility_version 1.0.0 -current_version 1.0.0 \
+   -install_name @executable_path/$@
 
 LLVMBACKENDFILES := libllvmgcc$(LLVM_STAGE).dylib
 


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


[llvm-commits] [llvm] r45027 - in /llvm/trunk: include/llvm/IntrinsicsX86.td lib/VMCore/AutoUpgrade.cpp test/Assembler/AutoUpgradeIntrinsics.ll

2007-12-13 Thread Anders Carlsson
Author: andersca
Date: Fri Dec 14 00:38:54 2007
New Revision: 45027

URL: http://llvm.org/viewvc/llvm-project?rev=45027&view=rev
Log:
All MMX shift instructions took a <2 x i32> vector as the shift amount 
parameter. Change this to be <1 x i64> instead, which matches the assembler 
instruction.

Modified:
llvm/trunk/include/llvm/IntrinsicsX86.td
llvm/trunk/lib/VMCore/AutoUpgrade.cpp
llvm/trunk/test/Assembler/AutoUpgradeIntrinsics.ll

Modified: llvm/trunk/include/llvm/IntrinsicsX86.td
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IntrinsicsX86.td?rev=45027&r1=45026&r2=45027&view=diff

==
--- llvm/trunk/include/llvm/IntrinsicsX86.td (original)
+++ llvm/trunk/include/llvm/IntrinsicsX86.td Fri Dec 14 00:38:54 2007
@@ -767,30 +767,30 @@
   // Shift left logical
   def int_x86_mmx_psll_w : GCCBuiltin<"__builtin_ia32_psllw">,
   Intrinsic<[llvm_v4i16_ty, llvm_v4i16_ty,
- llvm_v2i32_ty], [IntrNoMem]>;
+ llvm_v1i64_ty], [IntrNoMem]>;
   def int_x86_mmx_psll_d : GCCBuiltin<"__builtin_ia32_pslld">,
   Intrinsic<[llvm_v2i32_ty, llvm_v2i32_ty,
- llvm_v2i32_ty], [IntrNoMem]>;
+ llvm_v1i64_ty], [IntrNoMem]>;
   def int_x86_mmx_psll_q : GCCBuiltin<"__builtin_ia32_psllq">,
   Intrinsic<[llvm_v1i64_ty, llvm_v1i64_ty,
- llvm_v2i32_ty], [IntrNoMem]>;
+ llvm_v1i64_ty], [IntrNoMem]>;
 
   def int_x86_mmx_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw">,
   Intrinsic<[llvm_v4i16_ty, llvm_v4i16_ty,
- llvm_v2i32_ty], [IntrNoMem]>;
+ llvm_v1i64_ty], [IntrNoMem]>;
   def int_x86_mmx_psrl_d : GCCBuiltin<"__builtin_ia32_psrld">,
   Intrinsic<[llvm_v2i32_ty, llvm_v2i32_ty,
- llvm_v2i32_ty], [IntrNoMem]>;
+ llvm_v1i64_ty], [IntrNoMem]>;
   def int_x86_mmx_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq">,
   Intrinsic<[llvm_v1i64_ty,   llvm_v1i64_ty,
- llvm_v2i32_ty], [IntrNoMem]>;
+ llvm_v1i64_ty], [IntrNoMem]>;
 
   def int_x86_mmx_psra_w : GCCBuiltin<"__builtin_ia32_psraw">,
   Intrinsic<[llvm_v4i16_ty, llvm_v4i16_ty,
- llvm_v2i32_ty], [IntrNoMem]>;
+ llvm_v1i64_ty], [IntrNoMem]>;
   def int_x86_mmx_psra_d : GCCBuiltin<"__builtin_ia32_psrad">,
   Intrinsic<[llvm_v2i32_ty, llvm_v2i32_ty,
- llvm_v2i32_ty], [IntrNoMem]>;
+ llvm_v1i64_ty], [IntrNoMem]>;
 }
 
 // Pack ops.

Modified: llvm/trunk/lib/VMCore/AutoUpgrade.cpp
URL: 
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AutoUpgrade.cpp?rev=45027&r1=45026&r2=45027&view=diff

==
--- llvm/trunk/lib/VMCore/AutoUpgrade.cpp (original)
+++ llvm/trunk/lib/VMCore/AutoUpgrade.cpp Fri Dec 14 00:38:54 2007
@@ -12,6 +12,7 @@
 
//===--===//
 
 #include "llvm/AutoUpgrade.h"
+#include "llvm/Constants.h"
 #include "llvm/Function.h"
 #include "llvm/Module.h"
 #include "llvm/Instructions.h"
@@ -110,6 +111,39 @@
 }
 
 break;
+  case 'x': 
+// This fixes all MMX shift intrinsic instructions to take a
+// v1i64 instead of a v2i32 as the second parameter.
+if (Name.compare(5,10,"x86.mmx.ps",10) == 0 &&
+(Name.compare(13,4,"psll", 4) == 0 ||
+ Name.compare(13,4,"psra", 4) == 0 ||
+ Name.compare(13,4,"psrl", 4) == 0)) {
+  
+  const llvm::Type *VT = VectorType::get(IntegerType::get(64), 1);
+  
+  // We don't have to do anything if the parameter already has
+  // the correct type.
+  if (FTy->getParamType(1) == VT)
+break;
+  
+  //  We first need to change the name of the old (bad) intrinsic, because 
+  //  its type is incorrect, but we cannot overload that name. We 
+  //  arbitrarily unique it here allowing us to construct a correctly 
named 
+  //  and typed function below.
+  F->setName("");
+
+  assert(FTy->getNumParams() == 2 && "MMX shift intrinsics take 2 args!");
+  
+  //  Now construct the new intrinsic with the correct name and type. We 
+  //  leave the old function around in order to query its type, whatever 
it 
+  //  may be, and correctly convert up to the new type.
+  return cast(M->getOrInsertFunction(Name, 
+   FTy->getReturnType(),
+   FTy->getParamType(0),
+   VT,
+   (Type *)0));
+}
+break;
   }
 
   //  This may not belong here. This function is eff