[llvm-commits] [llvm-gcc-4.0] r45755 - /llvm-gcc-4.0/trunk/gcc/config/i386/llvm-i386.cpp

Chris Lattner sabre at nondot.org
Tue Jan 8 13:01:08 PST 2008


Author: lattner
Date: Tue Jan  8 15:01:08 2008
New Revision: 45755

URL: http://llvm.org/viewvc/llvm-project?rev=45755&view=rev
Log:
Fix the MMX related shift/rotate regressions (PR1902)
Patch by Anders Carlsson, thanks!


Modified:
    llvm-gcc-4.0/trunk/gcc/config/i386/llvm-i386.cpp

Modified: llvm-gcc-4.0/trunk/gcc/config/i386/llvm-i386.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/config/i386/llvm-i386.cpp?rev=45755&r1=45754&r2=45755&view=diff

==============================================================================
--- llvm-gcc-4.0/trunk/gcc/config/i386/llvm-i386.cpp (original)
+++ llvm-gcc-4.0/trunk/gcc/config/i386/llvm-i386.cpp Tue Jan  8 15:01:08 2008
@@ -79,7 +79,10 @@
   case IX86_BUILTIN_PSLLWI: {
     Function *psllw =
       Intrinsic::getDeclaration(TheModule, Intrinsic::x86_mmx_psll_w);
-    Ops[1] = BuildVector(Ops[1], UndefValue::get(Type::Int32Ty), NULL);
+    Ops[1] = Builder.CreateZExt(Ops[1], Type::Int64Ty, "zext");
+    Ops[1] = Builder.CreateBitCast(Ops[1], 
+                                   VectorType::get(Type::Int64Ty, 1), 
+                                   "bitcast");      
     Result = Builder.CreateCall(psllw, Ops.begin(), Ops.begin()+2, "tmp");
     Result = Builder.CreateBitCast(Result, ResultType, "tmp");
     return true;
@@ -96,7 +99,10 @@
   case IX86_BUILTIN_PSLLDI: {
     Function *pslld =
       Intrinsic::getDeclaration(TheModule, Intrinsic::x86_mmx_psll_d);
-    Ops[1] = BuildVector(Ops[1], UndefValue::get(Type::Int32Ty), NULL);
+    Ops[1] = Builder.CreateZExt(Ops[1], Type::Int64Ty, "zext");
+    Ops[1] = Builder.CreateBitCast(Ops[1], 
+                                   VectorType::get(Type::Int64Ty, 1), 
+                                   "bitcast");      
     Result = Builder.CreateCall(pslld, Ops.begin(), Ops.begin()+2, "tmp");
     Result = Builder.CreateBitCast(Result, ResultType, "tmp");
     return true;
@@ -113,7 +119,10 @@
   case IX86_BUILTIN_PSLLQI: {
     Function *psllq =
       Intrinsic::getDeclaration(TheModule, Intrinsic::x86_mmx_psll_q);
-    Ops[1] = BuildVector(Ops[1], UndefValue::get(Type::Int32Ty), NULL);
+    Ops[1] = Builder.CreateZExt(Ops[1], Type::Int64Ty, "zext");
+    Ops[1] = Builder.CreateBitCast(Ops[1], 
+                                   VectorType::get(Type::Int64Ty, 1), 
+                                   "bitcast");      
     Result = Builder.CreateCall(psllq, Ops.begin(), Ops.begin()+2, "tmp");
     Result = Builder.CreateBitCast(Result, ResultType, "tmp");
     return true;
@@ -130,7 +139,10 @@
   case IX86_BUILTIN_PSRLWI: {
     Function *psrlw =
       Intrinsic::getDeclaration(TheModule, Intrinsic::x86_mmx_psrl_w);
-    Ops[1] = BuildVector(Ops[1], UndefValue::get(Type::Int32Ty), NULL);
+    Ops[1] = Builder.CreateZExt(Ops[1], Type::Int64Ty, "zext");
+    Ops[1] = Builder.CreateBitCast(Ops[1], 
+                                   VectorType::get(Type::Int64Ty, 1), 
+                                   "bitcast");      
     Result = Builder.CreateCall(psrlw, Ops.begin(), Ops.begin()+2, "tmp");
     Result = Builder.CreateBitCast(Result, ResultType, "tmp");
     return true;
@@ -147,7 +159,10 @@
   case IX86_BUILTIN_PSRLDI: {
     Function *psrld =
       Intrinsic::getDeclaration(TheModule, Intrinsic::x86_mmx_psrl_d);
-    Ops[1] = BuildVector(Ops[1], UndefValue::get(Type::Int32Ty), NULL);
+    Ops[1] = Builder.CreateZExt(Ops[1], Type::Int64Ty, "zext");
+    Ops[1] = Builder.CreateBitCast(Ops[1], 
+                                   VectorType::get(Type::Int64Ty, 1), 
+                                   "bitcast");      
     Result = Builder.CreateCall(psrld, Ops.begin(), Ops.begin()+2, "tmp");
     Result = Builder.CreateBitCast(Result, ResultType, "tmp");
     return true;
@@ -164,7 +179,10 @@
   case IX86_BUILTIN_PSRLQI: {
     Function *psrlq =
       Intrinsic::getDeclaration(TheModule, Intrinsic::x86_mmx_psrl_q);
-    Ops[1] = BuildVector(Ops[1], UndefValue::get(Type::Int32Ty), NULL);
+    Ops[1] = Builder.CreateZExt(Ops[1], Type::Int64Ty, "zext");
+    Ops[1] = Builder.CreateBitCast(Ops[1], 
+                                   VectorType::get(Type::Int64Ty, 1),
+                                   "bitcast");      
     Result = Builder.CreateCall(psrlq, Ops.begin(), Ops.begin()+2, "tmp");
     Result = Builder.CreateBitCast(Result, ResultType, "tmp");
     return true;
@@ -181,7 +199,10 @@
   case IX86_BUILTIN_PSRAWI: {
     Function *psraw =
       Intrinsic::getDeclaration(TheModule, Intrinsic::x86_mmx_psra_w);
-    Ops[1] = BuildVector(Ops[1], UndefValue::get(Type::Int32Ty), NULL);
+    Ops[1] = Builder.CreateZExt(Ops[1], Type::Int64Ty, "zext");
+    Ops[1] = Builder.CreateBitCast(Ops[1], 
+                                   VectorType::get(Type::Int64Ty, 1),
+                                   "bitcast");      
     Result = Builder.CreateCall(psraw, Ops.begin(), Ops.begin()+2, "tmp");
     Result = Builder.CreateBitCast(Result, ResultType, "tmp");
     return true;
@@ -198,7 +219,10 @@
   case IX86_BUILTIN_PSRADI: {
     Function *psrad =
       Intrinsic::getDeclaration(TheModule, Intrinsic::x86_mmx_psra_d);
-    Ops[1] = BuildVector(Ops[1], UndefValue::get(Type::Int32Ty), NULL);
+    Ops[1] = Builder.CreateZExt(Ops[1], Type::Int64Ty, "zext");
+    Ops[1] = Builder.CreateBitCast(Ops[1], 
+                                   VectorType::get(Type::Int64Ty, 1),
+                                   "bitcast");      
     Result = Builder.CreateCall(psrad, Ops.begin(), Ops.begin()+2, "tmp");
     Result = Builder.CreateBitCast(Result, ResultType, "tmp");
     return true;





More information about the llvm-commits mailing list