[llvm] r249187 - [WebAssembly] Fix CFG stackification of nested loops.

Richard Trieu via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 2 16:46:05 PDT 2015


Hi Dan,

I am getting the follow testing failure when running the test
cfg-stackify.ll:

cfg-stackify.ll:203:10: error: expected string not found in input
; CHECK: (loop $BB8_1)
         ^
<stdin>:177:2: note: scanning from here
 (loop $BB8_2)
 ^

Diff the output from llc run line between revisions:
11c11
< (loop $BB0_3)
---
> (loop $BB0_2)
32c32
< (loop $BB1_3)
---
> (loop $BB1_2)
55c55
< (loop $BB2_2)
---
> (loop $BB2_1)
162c162
< (loop $BB7_2)
---
> (loop $BB7_1)
177c177
< (loop $BB8_2)
---
> (loop $BB8_1)
239,263d238
<
< ;; .globl test3
< (func $test3
<  (param i32)
< (block $BB11_1)
< (setlocal @0 (argument 0))
< (setlocal @1 (immediate 0))
< (brif $BB11_1 @1)
< (br $BB11_2)
< BB11_1:
< (return)
< BB11_2:
< (loop $BB11_5)
< (block $BB11_4)
< (block $BB11_2)
< (setlocal @3 (eq @4 @1))
< BB11_3:
< (loop $BB11_4)
< (setlocal @5 (eq @6 @0))
< (brif $BB11_4 @5)
< (br $BB11_3)
< BB11_4:
< (call $bar)
< (br $BB11_2)
< ) ;; end func $test3


On Fri, Oct 2, 2015 at 2:11 PM, Dan Gohman via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: djg
> Date: Fri Oct  2 16:11:36 2015
> New Revision: 249187
>
> URL: http://llvm.org/viewvc/llvm-project?rev=249187&view=rev
> Log:
> [WebAssembly] Fix CFG stackification of nested loops.
>
> Modified:
>     llvm/trunk/lib/Target/WebAssembly/WebAssemblyCFGStackify.cpp
>     llvm/trunk/test/CodeGen/WebAssembly/cfg-stackify.ll
>
> Modified: llvm/trunk/lib/Target/WebAssembly/WebAssemblyCFGStackify.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/WebAssembly/WebAssemblyCFGStackify.cpp?rev=249187&r1=249186&r2=249187&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyCFGStackify.cpp (original)
> +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyCFGStackify.cpp Fri Oct
> 2 16:11:36 2015
> @@ -194,8 +194,10 @@ static void SortBlocks(MachineFunction &
>      if (MachineLoop *Loop = MLI.getLoopFor(&MBB)) {
>        // Assert that loops are contiguous.
>        assert(Loop->getHeader() == Loop->getTopBlock());
> -      assert(Loop->getHeader() == &MBB ||
> -             MLI.getLoopFor(prev(MachineFunction::iterator(&MBB))) ==
> Loop);
> +      assert((Loop->getHeader() == &MBB ||
> +              Loop->contains(
> +                  MLI.getLoopFor(prev(MachineFunction::iterator(&MBB)))))
> &&
> +             "Loop isn't contiguous");
>      } else {
>        // Assert that non-loops have no backedge predecessors.
>        for (auto Pred : MBB.predecessors())
> @@ -245,9 +247,18 @@ static void PlaceMarkers(MachineFunction
>    for (auto &MBB : MF) {
>      // Place the LOOP for loops.
>      if (MachineLoop *Loop = MLI.getLoopFor(&MBB))
> -      if (Loop->getHeader() == &MBB)
> +      if (Loop->getHeader() == &MBB) {
> +        // The operand of a LOOP is the first block after the loop. If
> the loop
> +        // is the bottom of the function, insert a dummy block at the end.
> +        MachineBasicBlock *Bottom = Loop->getBottomBlock();
> +        auto Iter = next(MachineFunction::iterator(Bottom));
> +        if (Iter == MF.end()) {
> +          MF.push_back(MF.CreateMachineBasicBlock());
> +          Iter = next(MachineFunction::iterator(Bottom));
> +        }
>          BuildMI(MBB, MBB.begin(), DebugLoc(), TII.get(WebAssembly::LOOP))
> -            .addMBB(Loop->getBottomBlock());
> +            .addMBB(Iter);
> +      }
>
>      // Check for forward branches and switches that need BLOCKS placed.
>      for (auto &Term : MBB.terminators())
>
> Modified: llvm/trunk/test/CodeGen/WebAssembly/cfg-stackify.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/cfg-stackify.ll?rev=249187&r1=249186&r2=249187&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/WebAssembly/cfg-stackify.ll (original)
> +++ llvm/trunk/test/CodeGen/WebAssembly/cfg-stackify.ll Fri Oct  2
> 16:11:36 2015
> @@ -272,3 +272,33 @@ exit:
>    store volatile i32 4, i32* %p
>    ret i32 0
>  }
> +
> +; Test that nested loops are handled.
> +
> +declare void @bar()
> +
> +define void @test3(i32 %w)  {
> +entry:
> +  br i1 undef, label %outer.ph, label %exit
> +
> +outer.ph:
> +  br label %outer
> +
> +outer:
> +  %tobool = icmp eq i32 undef, 0
> +  br i1 %tobool, label %inner, label %unreachable
> +
> +unreachable:
> +  unreachable
> +
> +inner:
> +  %c = icmp eq i32 undef, %w
> +  br i1 %c, label %if.end, label %inner
> +
> +exit:
> +  ret void
> +
> +if.end:
> +  call void @bar()
> +  br label %outer
> +}
>
>
> _______________________________________________
> 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/20151002/69e820ac/attachment.html>


More information about the llvm-commits mailing list