[llvm] r251534 - WebAssembly: disable some loop-idiom recognition

JF Bastien via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 28 10:55:01 PDT 2015


FYI, it looks like the similar AMDGPU tests aren't quite testing what they
intend to test (code seems correct, but not the test). I initially copied
what AMDGPU was doing, but that wasn't working. You may want to look into
this :-)

On Wed, Oct 28, 2015 at 10:50 AM, JF Bastien via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: jfb
> Date: Wed Oct 28 12:50:23 2015
> New Revision: 251534
>
> URL: http://llvm.org/viewvc/llvm-project?rev=251534&view=rev
> Log:
> WebAssembly: disable some loop-idiom recognition
>
> memset/memcpy aren't fully supported yet. We should invert this test
> once they are supported.
>
> Added:
>     llvm/trunk/test/CodeGen/WebAssembly/loop-idiom.ll
> Modified:
>     llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp
>
> Modified: llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp?rev=251534&r1=251533&r2=251534&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp Wed Oct 28 12:50:23 2015
> @@ -64,7 +64,9 @@ static void initialize(TargetLibraryInfo
>    // There are no library implementations of mempcy and memset for AMD
> gpus and
>    // these can be difficult to lower in the backend.
>    if (T.getArch() == Triple::r600 ||
> -      T.getArch() == Triple::amdgcn) {
> +      T.getArch() == Triple::amdgcn ||
> +      T.getArch() == Triple::wasm32 ||
> +      T.getArch() == Triple::wasm64) {
>      TLI.setUnavailable(LibFunc::memcpy);
>      TLI.setUnavailable(LibFunc::memset);
>      TLI.setUnavailable(LibFunc::memset_pattern16);
>
> Added: llvm/trunk/test/CodeGen/WebAssembly/loop-idiom.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/loop-idiom.ll?rev=251534&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/WebAssembly/loop-idiom.ll (added)
> +++ llvm/trunk/test/CodeGen/WebAssembly/loop-idiom.ll Wed Oct 28 12:50:23
> 2015
> @@ -0,0 +1,53 @@
> +; RUN: opt -loop-idiom -S < %s -march=wasm32 | FileCheck %s
> +
> +target datalayout = "e-p:32:32-i64:64-n32:64-S128"
> +target triple = "wasm32-unknown-unknown"
> +
> +
> +; Make sure loop-idiom doesn't create memcpy or memset. These aren't well
> +; supported in WebAssembly for now.
> +;
> +; TODO Check the patterns are recognized once memcpy / memset are
> supported.
> +
> +; CHECK-LABEL: @cpy(
> +; CHECK-NOT: llvm.memcpy
> +; CHECK: load
> +; CHECK: store
> +define void @cpy(i64 %Size) {
> +bb.nph:
> +  %Base = alloca i8, i32 10000
> +  %Dest = alloca i8, i32 10000
> +  br label %for.body
> +
> +for.body:
> +  %indvar = phi i64 [ 0, %bb.nph ], [ %indvar.next, %for.body ]
> +  %I.0.014 = getelementptr i8, i8* %Base, i64 %indvar
> +  %DestI = getelementptr i8, i8* %Dest, i64 %indvar
> +  %V = load i8, i8* %I.0.014, align 1
> +  store i8 %V, i8* %DestI, align 1
> +  %indvar.next = add i64 %indvar, 1
> +  %exitcond = icmp eq i64 %indvar.next, %Size
> +  br i1 %exitcond, label %for.end, label %for.body
> +
> +for.end:
> +  ret void
> +}
> +
> +; CHECK-LABEL: @set(
> +; CHECK-NOT: llvm.memset
> +; CHECK: store
> +define void @set(i8* %Base, i64 %Size) {
> +bb.nph:
> +  br label %for.body
> +
> +for.body:
> +  %indvar = phi i64 [ 0, %bb.nph ], [ %indvar.next, %for.body ]
> +  %I.0.014 = getelementptr i8, i8* %Base, i64 %indvar
> +  store i8 0, i8* %I.0.014, align 1
> +  %indvar.next = add i64 %indvar, 1
> +  %exitcond = icmp eq i64 %indvar.next, %Size
> +  br i1 %exitcond, label %for.end, label %for.body
> +
> +for.end:
> +  ret void
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151028/6aff64c2/attachment.html>


More information about the llvm-commits mailing list