[llvm-commits] [llvm-gcc-4.2] r112273 - in /llvm-gcc-4.2/trunk/gcc: config/arm/llvm-arm.cpp llvm-convert.cpp llvm-internal.h

Bob Wilson bob.wilson at apple.com
Fri Aug 27 10:15:02 PDT 2010


Author: bwilson
Date: Fri Aug 27 12:15:02 2010
New Revision: 112273

URL: http://llvm.org/viewvc/llvm-project?rev=112273&view=rev
Log:
Add the new alignment operands for calls to NEON load/store intrinsics.

Modified:
    llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp
    llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
    llvm-gcc-4.2/trunk/gcc/llvm-internal.h

Modified: llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp?rev=112273&r1=112272&r2=112273&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp Fri Aug 27 12:15:02 2010
@@ -2010,7 +2010,9 @@
     intID = Intrinsic::arm_neon_vld1;
     intFn = Intrinsic::getDeclaration(TheModule, intID, &ResultType, 1);
     Type *VPTy = PointerType::getUnqual(Type::getInt8Ty(Context));
-    Result = Builder.CreateCall(intFn, BitCastToType(Ops[0], VPTy));
+    unsigned Align = getPointerAlignment(TREE_VALUE(TREE_OPERAND(exp, 1)));
+    Result = Builder.CreateCall2(intFn, BitCastToType(Ops[0], VPTy),
+                                 getInt32Const(Align));
     break;
   }
 
@@ -2028,7 +2030,9 @@
     }
     intFn = Intrinsic::getDeclaration(TheModule, intID, &VTy, 1);
     Type *VPTy = PointerType::getUnqual(Type::getInt8Ty(Context));
-    Result = Builder.CreateCall(intFn, BitCastToType(Ops[0], VPTy));
+    unsigned Align = getPointerAlignment(TREE_VALUE(TREE_OPERAND(exp, 1)));
+    Result = Builder.CreateCall2(intFn, BitCastToType(Ops[0], VPTy),
+                                 getInt32Const(Align));
     Builder.CreateStore(Result, DestLoc->Ptr);
     Result = 0;
     break;
@@ -2074,6 +2078,8 @@
       Args.push_back(Builder.CreateExtractValue(Ops[1], n));
     }
     Args.push_back(Ops[2]); // lane number
+    unsigned Align = getPointerAlignment(TREE_VALUE(TREE_OPERAND(exp, 1)));
+    Args.push_back(getInt32Const(Align));
     Result = Builder.CreateCall(intFn, Args.begin(), Args.end());
     Builder.CreateStore(Result, DestLoc->Ptr);
     Result = 0;
@@ -2103,7 +2109,9 @@
       }
       intFn = Intrinsic::getDeclaration(TheModule, intID, intOpTypes, 1);
       Type *VPTy = PointerType::getUnqual(Type::getInt8Ty(Context));
-      Result = Builder.CreateCall(intFn, BitCastToType(Ops[0], VPTy));
+      unsigned Align = getPointerAlignment(TREE_VALUE(TREE_OPERAND(exp, 1)));
+      Result = Builder.CreateCall2(intFn, BitCastToType(Ops[0], VPTy),
+                                   getInt32Const(Align));
       Builder.CreateStore(Result, DestLoc->Ptr);
       Result = 0;
       break;
@@ -2131,6 +2139,8 @@
       Args.push_back(UndefValue::get(VTy));
     }
     Args.push_back(getInt32Const(0));
+    unsigned Align = getPointerAlignment(TREE_VALUE(TREE_OPERAND(exp, 1)));
+    Args.push_back(getInt32Const(Align));
     Result = Builder.CreateCall(intFn, Args.begin(), Args.end());
 
     // Now splat the values in lane 0 to the rest of the elements.
@@ -2150,7 +2160,9 @@
     intID = Intrinsic::arm_neon_vst1;
     intFn = Intrinsic::getDeclaration(TheModule, intID, &VTy, 1);
     Type *VPTy = PointerType::getUnqual(Type::getInt8Ty(Context));
-    Builder.CreateCall2(intFn, BitCastToType(Ops[0], VPTy), Ops[1]);
+    unsigned Align = getPointerAlignment(TREE_VALUE(TREE_OPERAND(exp, 1)));
+    Builder.CreateCall3(intFn, BitCastToType(Ops[0], VPTy), Ops[1],
+                        getInt32Const(Align));
     Result = 0;
     break;
   }
@@ -2181,6 +2193,8 @@
     for (unsigned n = 0; n != NumVecs; ++n) {
       Args.push_back(Builder.CreateExtractValue(Ops[1], n));
     }
+    unsigned Align = getPointerAlignment(TREE_VALUE(TREE_OPERAND(exp, 1)));
+    Args.push_back(getInt32Const(Align));
     Builder.CreateCall(intFn, Args.begin(), Args.end());
     Result = 0;
     break;
@@ -2226,6 +2240,8 @@
       Args.push_back(Builder.CreateExtractValue(Ops[1], n));
     }
     Args.push_back(Ops[2]); // lane number
+    unsigned Align = getPointerAlignment(TREE_VALUE(TREE_OPERAND(exp, 1)));
+    Args.push_back(getInt32Const(Align));
     Builder.CreateCall(intFn, Args.begin(), Args.end());
     Result = 0;
     break;

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=112273&r1=112272&r2=112273&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Fri Aug 27 12:15:02 2010
@@ -140,7 +140,7 @@
 
 /// getPointerAlignment - Return the alignment in bytes of exp, a pointer valued
 /// expression, or 1 if the alignment is not known.
-static unsigned int getPointerAlignment(tree exp) {
+unsigned int getPointerAlignment(tree exp) {
   assert(POINTER_TYPE_P (TREE_TYPE (exp)) && "Expected a pointer type!");
   unsigned int align = get_pointer_alignment(exp, BIGGEST_ALIGNMENT) / 8;
   return align ? align : 1;

Modified: llvm-gcc-4.2/trunk/gcc/llvm-internal.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-internal.h?rev=112273&r1=112272&r2=112273&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-internal.h (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-internal.h Fri Aug 27 12:15:02 2010
@@ -190,6 +190,10 @@
 /// overflowed constants.  These conditions can be checked by calling isInt64.
 uint64_t getInt64(tree_node *t, bool Unsigned);
 
+/// getPointerAlignment - Return the alignment in bytes of exp, a pointer valued
+/// expression, or 1 if the alignment is not known.
+unsigned int getPointerAlignment(tree_node *exp);
+
 /// isPassedByInvisibleReference - Return true if the specified type should be
 /// passed by 'invisible reference'. In other words, instead of passing the
 /// thing by value, pass the address of a temporary.





More information about the llvm-commits mailing list