Files
clang-p2996/llvm/test/CodeGen/WebAssembly/irreducible-cfg.mir
Thomas Lively 122b0220fd [WebAssembly] Remove datalayout strings from llc tests
The data layout strings do not have any effect on llc tests and will become
misleadingly out of date as we continue to update the canonical data layout, so
remove them from the tests.

Differential Revision: https://reviews.llvm.org/D105842
2021-07-14 11:17:08 -07:00

84 lines
2.5 KiB
YAML

# RUN: llc -mtriple=wasm32-unknown-unknown -run-pass wasm-fix-irreducible-control-flow %s -o - | FileCheck %s
# This tests if we correctly create at most 2 routing blocks per entry block,
# and also whether those routing blocks are generated in the correct place. If
# one of the predecessor is the layout predecessor of an entry, a routing block
# for the entry should be generated right after the layout predecessor.
--- |
target triple = "wasm32-unknown-unknown"
define void @test0() {
pred0:
ret void
pred1:
ret void
entry0:
ret void
entry1:
ret void
}
...
---
# CHECK-LABEL: test0
name: test0
liveins:
- { reg: '$arguments' }
body: |
bb.0.pred0:
successors: %bb.1, %bb.2
liveins: $arguments
%0:i32 = CONST_I32 100, implicit-def $arguments
BR_IF %bb.2, %0:i32, implicit-def $arguments
; CHECK: bb.0.pred0:
; CHECK: BR_IF %bb.2, %0, implicit-def $arguments
bb.1.pred1:
; predecessors: %bb.1
successors: %bb.2, %bb.3
BR_IF %bb.3, %0:i32, implicit-def $arguments
; CHECK: bb.1.pred1:
; CHECK: BR_IF %bb.7, %0, implicit-def $arguments
; This falls through to bb.2, so we don't need an additional BR here
; CHECK-NOT: BR
; Routing block for entry0, when predecessor is outside the loop
; This routing block is shared between the two predecessors: pred0 and pred1.
; CHECK: bb.2:
; CHECK: %1:i32 = CONST_I32 0, implicit-def $arguments
; CHECK: BR %bb.6, implicit-def $arguments
bb.2.entry0:
; predecessors: %bb.0, %bb.1, %bb.1
successors: %bb.3
BR %bb.3, implicit-def $arguments
; CHECK: bb.3.entry0:
; CHECK: BR %bb.4, implicit-def $arguments
; Routing block for entry1, when predecessor is inside the loop
; CHECK: bb.4:
; CHECK: %1:i32 = CONST_I32 1, implicit-def $arguments
; CHECK: BR %bb.6, implicit-def $arguments
bb.3.entry1:
; predecessors: %bb.1, %bb.2
successors: %bb.2
BR %bb.2, implicit-def $arguments
; CHECK: bb.5.entry1:
; CHECK: BR %bb.8, implicit-def $arguments
; Dispatch block
; CHECK: bb.6:
; CHECK: BR_TABLE_I32 %1, %bb.3, %bb.5, %bb.5, implicit-def $arguments
; Routing block for entry1, when predecessor is outside the loop
; CHECK: bb.7:
; CHECK: %1:i32 = CONST_I32 1, implicit-def $arguments
; CHECK: BR %bb.6, implicit-def $arguments
; Routing block for entry0, when predecessor is inside the loop
; CHECK: bb.8:
; CHECK: %1:i32 = CONST_I32 0, implicit-def $arguments
; CHECK: BR %bb.6, implicit-def $arguments