[llvm] r328506 - [Hexagon] Give priority to post-incremementing memory accesses in LSR

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 12 07:34:30 PDT 2018


Hi Galina,

Thanks.  There seems to be some non-determinism.  I'll try to diagnose this.

-Krzysztof

On 4/10/2018 5:29 PM, Galina Kistanova wrote:
> Hello Krzysztof,
> 
>  > llvm/trunk/test/CodeGen/Hexagon/swp-vmult.ll
> 
> This test is flaky as it depends on a certain order of commands which 
> could be different time to time. Either test or CodeGen shall be fixed.
> 
> C:\ps4-buildslave2\llvm-clang-x86_64-expensive-checks-win\llvm\test\CodeGen\Hexagon\swp-vmult.ll:5:15: 
> error: CHECK-NEXT: is not on the line after the previous match
> ; CHECK-NEXT: [[REG1]] = memw(r{{[0-9]+}}++#4)
>                ^
> <stdin>:30:2: note: 'next' match was here
>   r3 = memw(r2++#4)
>   ^
> <stdin>:28:19: note: previous match ended here
>   r0 += mpyi(r4,r3)
>                    ^
> <stdin>:29:1: note: non-matching line after previous match is here
>   r4 = memw(r1++#4)
> ^
> 
> Please also find attached the intermediate IR file I have got on the 
> buildbot in case that would help with your debugging.
> I have made this test unsupported in r329763 for now with till it gets 
> fixed.
> 
> Hope this helps.
> 
> Thanks
> 
> Galina
> 
> 
> On Mon, Mar 26, 2018 at 8:32 AM, Krzysztof Parzyszek via llvm-commits 
> <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
> 
>     Author: kparzysz
>     Date: Mon Mar 26 08:32:03 2018
>     New Revision: 328506
> 
>     URL: http://llvm.org/viewvc/llvm-project?rev=328506&view=rev
>     <http://llvm.org/viewvc/llvm-project?rev=328506&view=rev>
>     Log:
>     [Hexagon] Give priority to post-incremementing memory accesses in LSR
> 
>     Modified:
>          llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.cpp
>          llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.h
>          llvm/trunk/test/CodeGen/Hexagon/swp-epilog-numphis.ll
>          llvm/trunk/test/CodeGen/Hexagon/swp-vmult.ll
>          llvm/trunk/test/CodeGen/Hexagon/swp-vsum.ll
>          llvm/trunk/test/CodeGen/Hexagon/vect-downscale.ll
> 
>     Modified: llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.cpp
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.cpp?rev=328506&r1=328505&r2=328506&view=diff
>     <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.cpp?rev=328506&r1=328505&r2=328506&view=diff>
>     ==============================================================================
>     --- llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.cpp
>     (original)
>     +++ llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.cpp Mon
>     Mar 26 08:32:03 2018
>     @@ -43,6 +43,10 @@ void HexagonTTIImpl::getUnrollingPrefere
>         UP.Runtime = UP.Partial = true;
>       }
> 
>     +bool HexagonTTIImpl::shouldFavorPostInc() const {
>     +  return true;
>     +}
>     +
>       unsigned HexagonTTIImpl::getNumberOfRegisters(bool vector) const {
>         return vector ? 0 : 32;
>       }
>     @@ -81,5 +85,5 @@ int HexagonTTIImpl::getUserCost(const Us
>       }
> 
>       bool HexagonTTIImpl::shouldBuildLookupTables() const {
>     -   return EmitLookupTables;
>     +  return EmitLookupTables;
>       }
> 
>     Modified: llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.h
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.h?rev=328506&r1=328505&r2=328506&view=diff
>     <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.h?rev=328506&r1=328505&r2=328506&view=diff>
>     ==============================================================================
>     --- llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.h
>     (original)
>     +++ llvm/trunk/lib/Target/Hexagon/HexagonTargetTransformInfo.h Mon
>     Mar 26 08:32:03 2018
>     @@ -57,6 +57,9 @@ public:
>         void getUnrollingPreferences(Loop *L, ScalarEvolution &SE,
>                                      TTI::UnrollingPreferences &UP);
> 
>     +  /// Bias LSR towards creating post-increment opportunities.
>     +  bool shouldFavorPostInc() const;
>     +
>         // L1 cache prefetch.
>         unsigned getPrefetchDistance() const;
>         unsigned getCacheLineSize() const;
> 
>     Modified: llvm/trunk/test/CodeGen/Hexagon/swp-epilog-numphis.ll
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/swp-epilog-numphis.ll?rev=328506&r1=328505&r2=328506&view=diff
>     <http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/swp-epilog-numphis.ll?rev=328506&r1=328505&r2=328506&view=diff>
>     ==============================================================================
>     --- llvm/trunk/test/CodeGen/Hexagon/swp-epilog-numphis.ll (original)
>     +++ llvm/trunk/test/CodeGen/Hexagon/swp-epilog-numphis.ll Mon Mar 26
>     08:32:03 2018
>     @@ -1,3 +1,5 @@
>     +; XFAIL: *
>     +; Needs some fixed in the pipeliner.
>       ; RUN: llc -march=hexagon < %s | FileCheck %s
> 
>       ; CHECK: endloop0
> 
>     Modified: llvm/trunk/test/CodeGen/Hexagon/swp-vmult.ll
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/swp-vmult.ll?rev=328506&r1=328505&r2=328506&view=diff
>     <http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/swp-vmult.ll?rev=328506&r1=328505&r2=328506&view=diff>
>     ==============================================================================
>     --- llvm/trunk/test/CodeGen/Hexagon/swp-vmult.ll (original)
>     +++ llvm/trunk/test/CodeGen/Hexagon/swp-vmult.ll Mon Mar 26 08:32:03
>     2018
>     @@ -1,33 +1,30 @@
>       ; RUN: llc -march=hexagon -mcpu=hexagonv5 -enable-pipeliner < %s |
>     FileCheck %s
>     -; RUN: llc -march=hexagon -mcpu=hexagonv5 -O3 < %s | FileCheck %s
> 
>       ; Multiply and accumulate
>       ; CHECK: mpyi([[REG0:r([0-9]+)]],[[REG1:r([0-9]+)]])
>     -; CHECK-NEXT: add(r{{[0-9]+}},#4)
>     -; CHECK-DAG: [[REG1]] = memw(r{{[0-9]+}}+r{{[0-9]+}}<<#0)
>     -; CHECK-DAG: [[REG0]] = memw(r{{[0-9]+}}+r{{[0-9]+}}<<#0)
>     +; CHECK-NEXT: [[REG1]] = memw(r{{[0-9]+}}++#4)
>     +; CHECK-NEXT: [[REG0]] = memw(r{{[0-9]+}}++#4)
>       ; CHECK-NEXT: endloop0
> 
>     -define i32 @foo(i32* %a, i32* %b, i32 %n) {
>     -entry:
>     -  br label %for.body
>     +define i32 @f0(i32* %a0, i32* %a1, i32 %a2) {
>     +b0:
>     +  br label %b1
> 
>     -for.body:
>     -  %sum.03 = phi i32 [ 0, %entry ], [ %add, %for.body ]
>     -  %arrayidx.phi = phi i32* [ %a, %entry ], [ %arrayidx.inc, %for.body ]
>     -  %arrayidx1.phi = phi i32* [ %b, %entry ], [ %arrayidx1.inc,
>     %for.body ]
>     -  %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
>     -  %0 = load i32, i32* %arrayidx.phi, align 4
>     -  %1 = load i32, i32* %arrayidx1.phi, align 4
>     -  %mul = mul nsw i32 %1, %0
>     -  %add = add nsw i32 %mul, %sum.03
>     -  %inc = add nsw i32 %i.02, 1
>     -  %exitcond = icmp eq i32 %inc, 10000
>     -  %arrayidx.inc = getelementptr i32, i32* %arrayidx.phi, i32 1
>     -  %arrayidx1.inc = getelementptr i32, i32* %arrayidx1.phi, i32 1
>     -  br i1 %exitcond, label %for.end, label %for.body
>     +b1:                                               ; preds = %b1, %b0
>     +  %v0 = phi i32 [ 0, %b0 ], [ %v7, %b1 ]
>     +  %v1 = phi i32* [ %a0, %b0 ], [ %v10, %b1 ]
>     +  %v2 = phi i32* [ %a1, %b0 ], [ %v11, %b1 ]
>     +  %v3 = phi i32 [ 0, %b0 ], [ %v8, %b1 ]
>     +  %v4 = load i32, i32* %v1, align 4
>     +  %v5 = load i32, i32* %v2, align 4
>     +  %v6 = mul nsw i32 %v5, %v4
>     +  %v7 = add nsw i32 %v6, %v0
>     +  %v8 = add nsw i32 %v3, 1
>     +  %v9 = icmp eq i32 %v8, 10000
>     +  %v10 = getelementptr i32, i32* %v1, i32 1
>     +  %v11 = getelementptr i32, i32* %v2, i32 1
>     +  br i1 %v9, label %b2, label %b1
> 
>     -for.end:
>     -  ret i32 %add
>     +b2:                                               ; preds = %b1
>     +  ret i32 %v7
>       }
>     -
> 
>     Modified: llvm/trunk/test/CodeGen/Hexagon/swp-vsum.ll
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/swp-vsum.ll?rev=328506&r1=328505&r2=328506&view=diff
>     <http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/swp-vsum.ll?rev=328506&r1=328505&r2=328506&view=diff>
>     ==============================================================================
>     --- llvm/trunk/test/CodeGen/Hexagon/swp-vsum.ll (original)
>     +++ llvm/trunk/test/CodeGen/Hexagon/swp-vsum.ll Mon Mar 26 08:32:03 2018
>     @@ -1,29 +1,32 @@
>       ; RUN: llc -march=hexagon -mcpu=hexagonv5 -enable-pipeliner < %s |
>     FileCheck %s
>     -; RUN: llc -march=hexagon -mcpu=hexagonv5 -O3 < %s | FileCheck %s
>     +; RUN: llc -march=hexagon -mcpu=hexagonv60 -enable-pipeliner < %s |
>     FileCheck %s --check-prefix=CHECKV60
> 
>       ; Simple vector total.
>       ; CHECK: loop0(.LBB0_[[LOOP:.]],
>       ; CHECK: .LBB0_[[LOOP]]:
>     -; CHECK: add([[REG:r([0-9]+)]],r{{[0-9]+}})
>     -; CHECK-NEXT: add(r{{[0-9]+}},#4)
>     -; CHECK-NEXT: [[REG]] = memw(r{{[0-9]+}}+r{{[0-9]+}}<<#0)
>     +; CHECK: add(r{{[0-9]+}},r{{[0-9]+}})
>     +; CHECK-NEXT: memw(r{{[0-9]+}}++#4)
>       ; CHECK-NEXT: endloop0
> 
>     -define i32 @foo(i32* %a, i32 %n) {
>     -entry:
>     -  br label %for.body
>     +; V60 does not pipeline due to latencies.
>     +; CHECKV60: memw(r{{[0-9]+}}++#4)
>     +; CHECKV60: add(r{{[0-9]+}},r{{[0-9]+}})
> 
>     -for.body:
>     -  %sum.02 = phi i32 [ 0, %entry ], [ %add, %for.body ]
>     -  %arrayidx.phi = phi i32* [ %a, %entry ], [ %arrayidx.inc, %for.body ]
>     -  %i.01 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
>     -  %0 = load i32, i32* %arrayidx.phi, align 4
>     -  %add = add nsw i32 %0, %sum.02
>     -  %inc = add nsw i32 %i.01, 1
>     -  %exitcond = icmp eq i32 %inc, 10000
>     -  %arrayidx.inc = getelementptr i32, i32* %arrayidx.phi, i32 1
>     -  br i1 %exitcond, label %for.end, label %for.body
>     +define i32 @f0(i32* %a0, i32 %a1) {
>     +b0:
>     +  br label %b1
> 
>     -for.end:
>     -  ret i32 %add
>     +b1:                                               ; preds = %b1, %b0
>     +  %v0 = phi i32 [ 0, %b0 ], [ %v4, %b1 ]
>     +  %v1 = phi i32* [ %a0, %b0 ], [ %v7, %b1 ]
>     +  %v2 = phi i32 [ 0, %b0 ], [ %v5, %b1 ]
>     +  %v3 = load i32, i32* %v1, align 4
>     +  %v4 = add nsw i32 %v3, %v0
>     +  %v5 = add nsw i32 %v2, 1
>     +  %v6 = icmp eq i32 %v5, 10000
>     +  %v7 = getelementptr i32, i32* %v1, i32 1
>     +  br i1 %v6, label %b2, label %b1
>     +
>     +b2:                                               ; preds = %b1
>     +  ret i32 %v4
>       }
> 
>     Modified: llvm/trunk/test/CodeGen/Hexagon/vect-downscale.ll
>     URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/vect-downscale.ll?rev=328506&r1=328505&r2=328506&view=diff
>     <http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/vect-downscale.ll?rev=328506&r1=328505&r2=328506&view=diff>
>     ==============================================================================
>     --- llvm/trunk/test/CodeGen/Hexagon/vect-downscale.ll (original)
>     +++ llvm/trunk/test/CodeGen/Hexagon/vect-downscale.ll Mon Mar 26
>     08:32:03 2018
>     @@ -12,6 +12,8 @@
>       ; CHECK: {
>       ; CHECK: }
>       ; CHECK: {
>     +; CHECK: }
>     +; CHECK: {
>       ; CHECK-NOT: }
>       ; CHECK: }{{[ \t]*}}:endloop0
> 
> 
> 
>     _______________________________________________
>     llvm-commits mailing list
>     llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>     http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>     <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
> 
> 

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, 
hosted by The Linux Foundation


More information about the llvm-commits mailing list