<div style="font-family: arial, helvetica, sans-serif; font-size: 10pt"><div dir="ltr"><div class="gmail_default" style>On Mon, Dec 17, 2012 at 9:23 PM, Nadav Rotem <span dir="ltr"><<a href="mailto:nrotem@apple.com" target="_blank" class="cremed">nrotem@apple.com</a>></span> wrote:<br>
</div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: nadav<br>
Date: Mon Dec 17 23:23:31 2012<br>
New Revision: 170412<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=170412&view=rev" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project?rev=170412&view=rev</a><br>
Log:<br>
SROA: Replace calls to getScalarSizeInBits to DataLayout's API because<br>
getScalarSizeInBits could not handle vectors of pointers.<br>
<br>
<br>
Added:<br>
    llvm/trunk/test/Transforms/SROA/2012-12-17-vpointers.ll<br></blockquote><div><br></div><div style>It's a small thing, but there is a general desire to move away from date-based test cases. They make the test cases harder to remember and type with no real benefit -- SVN has the date afterall....</div>
<div style><br></div><div style>Also, it works better to have more tests in a single file in terms of scaling the test system. I'd rather start a test file specifically for vector pointers and geps.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Modified:<br>
    llvm/trunk/lib/Transforms/Scalar/SROA.cpp<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/SROA.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=170412&r1=170411&r2=170412&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=170412&r1=170411&r2=170412&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/SROA.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/SROA.cpp Mon Dec 17 23:23:31 2012<br>
@@ -1669,9 +1669,9 @@<br>
     APInt TypeSize(Offset.getBitWidth(),<br>
                    TD.getTypeAllocSize(GTI.getIndexedType()));<br>
     if (VectorType *VTy = dyn_cast<VectorType>(*GTI)) {<br>
-      assert((VTy->getScalarSizeInBits() % 8) == 0 &&<br>
+      assert((TD.getTypeSizeInBits(VTy->getScalarType()) % 8) == 0 &&<br>
              "vector element size is not a multiple of 8, cannot GEP over it");<br>
-      TypeSize = VTy->getScalarSizeInBits() / 8;<br>
+      TypeSize = TD.getTypeSizeInBits(VTy->getScalarType()) / 8;<br>
     }<br>
<br>
     GEPOffset += OpC->getValue().sextOrTrunc(Offset.getBitWidth()) * TypeSize;<br>
@@ -1762,7 +1762,7 @@<br>
   // extremely poorly defined currently. The long-term goal is to remove GEPing<br>
   // over a vector from the IR completely.<br>
   if (VectorType *VecTy = dyn_cast<VectorType>(Ty)) {<br>
-    unsigned ElementSizeInBits = VecTy->getScalarSizeInBits();<br>
+    unsigned ElementSizeInBits = TD.getTypeSizeInBits(VecTy->getScalarType());<br>
     if (ElementSizeInBits % 8)<br>
       return 0; // GEPs over non-multiple of 8 size vector elements are invalid.<br>
     APInt ElementSize(Offset.getBitWidth(), ElementSizeInBits / 8);<br>
@@ -2010,7 +2010,7 @@<br>
     return false;<br>
<br>
   uint64_t VecSize = TD.getTypeSizeInBits(Ty);<br>
-  uint64_t ElementSize = Ty->getScalarSizeInBits();<br>
+  uint64_t ElementSize = TD.getTypeSizeInBits(Ty->getScalarType());<br>
<br>
   // While the definition of LLVM vectors is bitpacked, we don't support sizes<br>
   // that aren't byte sized.<br>
@@ -2370,9 +2370,9 @@<br>
       ++NumVectorized;<br>
       VecTy = cast<VectorType>(NewAI.getAllocatedType());<br>
       ElementTy = VecTy->getElementType();<br>
-      assert((VecTy->getScalarSizeInBits() % 8) == 0 &&<br>
+      assert((TD.getTypeSizeInBits(VecTy->getScalarType()) % 8) == 0 &&<br>
              "Only multiple-of-8 sized vector elements are viable");<br>
-      ElementSize = VecTy->getScalarSizeInBits() / 8;<br>
+      ElementSize = TD.getTypeSizeInBits(VecTy->getScalarType()) / 8;<br>
     } else if (isIntegerWideningViable(TD, NewAI.getAllocatedType(),<br>
                                        NewAllocaBeginOffset, P, I, E)) {<br>
       IntTy = Type::getIntNTy(NewAI.getContext(),<br>
<br>
Added: llvm/trunk/test/Transforms/SROA/2012-12-17-vpointers.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SROA/2012-12-17-vpointers.ll?rev=170412&view=auto" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SROA/2012-12-17-vpointers.ll?rev=170412&view=auto</a><br>

==============================================================================<br>
--- llvm/trunk/test/Transforms/SROA/2012-12-17-vpointers.ll (added)<br>
+++ llvm/trunk/test/Transforms/SROA/2012-12-17-vpointers.ll Mon Dec 17 23:23:31 2012<br>
@@ -0,0 +1,25 @@<br>
+; RUN: opt < %s -sroa<br>
+<br>
+; Make sure we don't crash on this one.<br>
+<br>
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"<br>
+target triple = "x86_64-apple-macosx10.8.0"<br>
+<br>
+define void @foo() {<br>
+entry:<br>
+  %Args.i = alloca <2 x i32*>, align 16<br>
+  br i1 undef, label %bb0.exit158, label %if.then.i.i.i.i.i138<br>
+<br>
+if.then.i.i.i.i.i138:<br>
+  unreachable<br>
+<br>
+bb0.exit158:<br>
+  br i1 undef, label %bb0.exit257, label %if.then.i.i.i.i.i237<br>
+<br>
+if.then.i.i.i.i.i237:<br>
+  unreachable<br>
+<br>
+bb0.exit257:<br>
+  %0 = load <2 x i32*>* %Args.i, align 16<br>
+  unreachable<br>
+}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" class="cremed">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank" class="cremed">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div></div>