<div dir="ltr">Hi Zhaoshi,<div><br></div><div>As you might have known we are porting AArch64 back-end features to ARM64. So for new features or new test cases, we need to guarantee they will definitely be covered by ARM64, otherwise we would have to file a bug tracker to highlight the missing parts in ARM64.</div>
<div><br></div><div>I know this patch is only a porting from ARM64 to AArch64, but the test case is a brand new one, so could you please either add this test case to ARM64 target, or add a new RUN in your test for -mtriple=arm64-none-linux-gnu? </div>
<div><br></div><div>Thanks,</div><div>-Jiangning</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-04-18 8:49 GMT+08:00 Z. Zheng <span dir="ltr"><<a href="mailto:zhaoshiz@codeaurora.org" target="_blank">zhaoshiz@codeaurora.org</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">  Rebased, no code change.<br>
<br>
  Reviews, I don't have commit access to llvm trunk, please merge it. Thanks in advance.<br>
<br>
Hi Jiangning, t.p.northover, hfinkel,<br>
<br>
<a href="http://reviews.llvm.org/D3320" target="_blank">http://reviews.llvm.org/D3320</a><br>
<br>
CHANGE SINCE LAST DIFF<br>
  <a href="http://reviews.llvm.org/D3320?vs=8428&id=8617#toc" target="_blank">http://reviews.llvm.org/D3320?vs=8428&id=8617#toc</a><br>
<div class="HOEnZb"><div class="h5"><br>
Files:<br>
  lib/Target/AArch64/AArch64TargetTransformInfo.cpp<br>
  test/Transforms/LoopVectorize/AArch64/aarch64-unroll.ll<br>
<br>
Index: lib/Target/AArch64/AArch64TargetTransformInfo.cpp<br>
===================================================================<br>
--- lib/Target/AArch64/AArch64TargetTransformInfo.cpp<br>
+++ lib/Target/AArch64/AArch64TargetTransformInfo.cpp<br>
@@ -92,6 +92,7 @@<br>
     return 64;<br>
   }<br>
<br>
+  unsigned getMaximumUnrollFactor() const override { return 2; }<br>
   /// @}<br>
 };<br>
<br>
Index: test/Transforms/LoopVectorize/AArch64/aarch64-unroll.ll<br>
===================================================================<br>
--- /dev/null<br>
+++ test/Transforms/LoopVectorize/AArch64/aarch64-unroll.ll<br>
@@ -0,0 +1,42 @@<br>
+; RUN: opt < %s -loop-vectorize -mtriple=aarch64-none-linux-gnu -mattr=+neon -S | FileCheck %s<br>
+target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"<br>
+<br>
+; Function Attrs: nounwind<br>
+define i32* @array_add(i32* noalias nocapture readonly %a, i32* noalias nocapture readonly %b, i32* %c, i32 %size) {<br>
+;CHECK-LABEL: array_add<br>
+;CHECK: load <4 x i32><br>
+;CHECK: load <4 x i32><br>
+;CHECK: load <4 x i32><br>
+;CHECK: load <4 x i32><br>
+;CHECK: add nsw <4 x i32><br>
+;CHECK: add nsw <4 x i32><br>
+;CHECK: store <4 x i32><br>
+;CHECK: store <4 x i32><br>
+;CHECK: ret<br>
+entry:<br>
+  %cmp10 = icmp sgt i32 %size, 0<br>
+  br i1 %cmp10, label %for.body.preheader, label %for.end<br>
+<br>
+for.body.preheader:                               ; preds = %entry<br>
+  br label %for.body<br>
+<br>
+for.body:                                         ; preds = %for.body.preheader, %for.body<br>
+  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %for.body.preheader ]<br>
+  %arrayidx = getelementptr inbounds i32* %a, i64 %indvars.iv<br>
+  %0 = load i32* %arrayidx, align 4<br>
+  %arrayidx2 = getelementptr inbounds i32* %b, i64 %indvars.iv<br>
+  %1 = load i32* %arrayidx2, align 4<br>
+  %add = add nsw i32 %1, %0<br>
+  %arrayidx4 = getelementptr inbounds i32* %c, i64 %indvars.iv<br>
+  store i32 %add, i32* %arrayidx4, align 4<br>
+  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1<br>
+  %lftr.wideiv = trunc i64 %indvars.iv.next to i32<br>
+  %exitcond = icmp eq i32 %lftr.wideiv, %size<br>
+  br i1 %exitcond, label %for.end.loopexit, label %for.body<br>
+<br>
+for.end.loopexit:                                 ; preds = %for.body<br>
+  br label %for.end<br>
+<br>
+for.end:                                          ; preds = %for.end.loopexit, %entry<br>
+  ret i32* %c<br>
+}<br>
</div></div></blockquote></div><br></div>