[PATCH] [AArch64] Implement getMaximumUnrollFactor()

Jiangning Liu liujiangning1 at gmail.com
Thu Apr 17 22:44:41 PDT 2014


Hi Zhaoshi,

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.

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?

Thanks,
-Jiangning


2014-04-18 8:49 GMT+08:00 Z. Zheng <zhaoshiz at codeaurora.org>:

>   Rebased, no code change.
>
>   Reviews, I don't have commit access to llvm trunk, please merge it.
> Thanks in advance.
>
> Hi Jiangning, t.p.northover, hfinkel,
>
> http://reviews.llvm.org/D3320
>
> CHANGE SINCE LAST DIFF
>   http://reviews.llvm.org/D3320?vs=8428&id=8617#toc
>
> Files:
>   lib/Target/AArch64/AArch64TargetTransformInfo.cpp
>   test/Transforms/LoopVectorize/AArch64/aarch64-unroll.ll
>
> Index: lib/Target/AArch64/AArch64TargetTransformInfo.cpp
> ===================================================================
> --- lib/Target/AArch64/AArch64TargetTransformInfo.cpp
> +++ lib/Target/AArch64/AArch64TargetTransformInfo.cpp
> @@ -92,6 +92,7 @@
>      return 64;
>    }
>
> +  unsigned getMaximumUnrollFactor() const override { return 2; }
>    /// @}
>  };
>
> Index: test/Transforms/LoopVectorize/AArch64/aarch64-unroll.ll
> ===================================================================
> --- /dev/null
> +++ test/Transforms/LoopVectorize/AArch64/aarch64-unroll.ll
> @@ -0,0 +1,42 @@
> +; RUN: opt < %s -loop-vectorize -mtriple=aarch64-none-linux-gnu
> -mattr=+neon -S | FileCheck %s
> +target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
> +
> +; Function Attrs: nounwind
> +define i32* @array_add(i32* noalias nocapture readonly %a, i32* noalias
> nocapture readonly %b, i32* %c, i32 %size) {
> +;CHECK-LABEL: array_add
> +;CHECK: load <4 x i32>
> +;CHECK: load <4 x i32>
> +;CHECK: load <4 x i32>
> +;CHECK: load <4 x i32>
> +;CHECK: add nsw <4 x i32>
> +;CHECK: add nsw <4 x i32>
> +;CHECK: store <4 x i32>
> +;CHECK: store <4 x i32>
> +;CHECK: ret
> +entry:
> +  %cmp10 = icmp sgt i32 %size, 0
> +  br i1 %cmp10, label %for.body.preheader, label %for.end
> +
> +for.body.preheader:                               ; preds = %entry
> +  br label %for.body
> +
> +for.body:                                         ; preds =
> %for.body.preheader, %for.body
> +  %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0,
> %for.body.preheader ]
> +  %arrayidx = getelementptr inbounds i32* %a, i64 %indvars.iv
> +  %0 = load i32* %arrayidx, align 4
> +  %arrayidx2 = getelementptr inbounds i32* %b, i64 %indvars.iv
> +  %1 = load i32* %arrayidx2, align 4
> +  %add = add nsw i32 %1, %0
> +  %arrayidx4 = getelementptr inbounds i32* %c, i64 %indvars.iv
> +  store i32 %add, i32* %arrayidx4, align 4
> +  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
> +  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
> +  %exitcond = icmp eq i32 %lftr.wideiv, %size
> +  br i1 %exitcond, label %for.end.loopexit, label %for.body
> +
> +for.end.loopexit:                                 ; preds = %for.body
> +  br label %for.end
> +
> +for.end:                                          ; preds =
> %for.end.loopexit, %entry
> +  ret i32* %c
> +}
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140418/f37b1f39/attachment.html>


More information about the llvm-commits mailing list