113 lines · plain
1// RUN: yaml2obj %S/inputs/if.yaml.wasm -o - | mlir-translate --import-wasm | FileCheck %s2 3/* Source code used to create this test:4(module5(type $intMapper (func (param $input i32) (result i32)))6(func $if_else (type $intMapper)7 local.get 08 i32.const 19 i32.and10 if $isOdd (result i32)11 local.get 012 i32.const 313 i32.mul14 i32.const 115 i32.add16 else17 local.get 018 i32.const 119 i32.shr_u20 end21)22 23(func $if_only (type $intMapper)24 local.get 025 local.get 026 i32.const 127 i32.and28 if $isOdd (type $intMapper)29 i32.const 130 i32.add31 end32)33 34(func $if_if (type $intMapper)35 local.get 036 i32.ctz37 if $isEven (result i32)38 i32.const 239 local.get 040 i32.const 141 i32.shr_u42 i32.ctz43 if $isMultipleOfFour (type $intMapper)44 i32.const 245 i32.add46 end47 else48 i32.const 149 end50)51)52*/53// CHECK-LABEL: wasmssa.func @func_0(54// CHECK-SAME: %[[ARG0:.*]]: !wasmssa<local ref to i32>) -> i32 {55// CHECK: %[[VAL_0:.*]] = wasmssa.local_get %[[ARG0]] : ref to i3256// CHECK: %[[VAL_1:.*]] = wasmssa.const 1 : i3257// CHECK: %[[VAL_2:.*]] = wasmssa.and %[[VAL_0]] %[[VAL_1]] : i3258// CHECK: wasmssa.if %[[VAL_2]] : {59// CHECK: %[[VAL_3:.*]] = wasmssa.local_get %[[ARG0]] : ref to i3260// CHECK: %[[VAL_4:.*]] = wasmssa.const 3 : i3261// CHECK: %[[VAL_5:.*]] = wasmssa.mul %[[VAL_3]] %[[VAL_4]] : i3262// CHECK: %[[VAL_6:.*]] = wasmssa.const 1 : i3263// CHECK: %[[VAL_7:.*]] = wasmssa.add %[[VAL_5]] %[[VAL_6]] : i3264// CHECK: wasmssa.block_return %[[VAL_7]] : i3265// CHECK: } "else "{66// CHECK: %[[VAL_8:.*]] = wasmssa.local_get %[[ARG0]] : ref to i3267// CHECK: %[[VAL_9:.*]] = wasmssa.const 1 : i3268// CHECK: %[[VAL_10:.*]] = wasmssa.shr_u %[[VAL_8]] by %[[VAL_9]] bits : i3269// CHECK: wasmssa.block_return %[[VAL_10]] : i3270// CHECK: }> ^bb171// CHECK: ^bb1(%[[VAL_11:.*]]: i32):72// CHECK: wasmssa.return %[[VAL_11]] : i3273 74// CHECK-LABEL: wasmssa.func @func_1(75// CHECK-SAME: %[[ARG0:.*]]: !wasmssa<local ref to i32>) -> i32 {76// CHECK: %[[VAL_0:.*]] = wasmssa.local_get %[[ARG0]] : ref to i3277// CHECK: %[[VAL_1:.*]] = wasmssa.local_get %[[ARG0]] : ref to i3278// CHECK: %[[VAL_2:.*]] = wasmssa.const 1 : i3279// CHECK: %[[VAL_3:.*]] = wasmssa.and %[[VAL_1]] %[[VAL_2]] : i3280// CHECK: wasmssa.if %[[VAL_3]](%[[VAL_0]]) : i32 : {81// CHECK: ^bb0(%[[VAL_4:.*]]: i32):82// CHECK: %[[VAL_5:.*]] = wasmssa.const 1 : i3283// CHECK: %[[VAL_6:.*]] = wasmssa.add %[[VAL_4]] %[[VAL_5]] : i3284// CHECK: wasmssa.block_return %[[VAL_6]] : i3285// CHECK: } > ^bb186// CHECK: ^bb1(%[[VAL_7:.*]]: i32):87// CHECK: wasmssa.return %[[VAL_7]] : i3288 89// CHECK-LABEL: wasmssa.func @func_2(90// CHECK-SAME: %[[ARG0:.*]]: !wasmssa<local ref to i32>) -> i32 {91// CHECK: %[[VAL_0:.*]] = wasmssa.local_get %[[ARG0]] : ref to i3292// CHECK: %[[VAL_1:.*]] = wasmssa.ctz %[[VAL_0]] : i3293// CHECK: wasmssa.if %[[VAL_1]] : {94// CHECK: %[[VAL_2:.*]] = wasmssa.const 2 : i3295// CHECK: %[[VAL_3:.*]] = wasmssa.local_get %[[ARG0]] : ref to i3296// CHECK: %[[VAL_4:.*]] = wasmssa.const 1 : i3297// CHECK: %[[VAL_5:.*]] = wasmssa.shr_u %[[VAL_3]] by %[[VAL_4]] bits : i3298// CHECK: %[[VAL_6:.*]] = wasmssa.ctz %[[VAL_5]] : i3299// CHECK: wasmssa.if %[[VAL_6]](%[[VAL_2]]) : i32 : {100// CHECK: ^bb0(%[[VAL_7:.*]]: i32):101// CHECK: %[[VAL_8:.*]] = wasmssa.const 2 : i32102// CHECK: %[[VAL_9:.*]] = wasmssa.add %[[VAL_7]] %[[VAL_8]] : i32103// CHECK: wasmssa.block_return %[[VAL_9]] : i32104// CHECK: } > ^bb1105// CHECK: ^bb1(%[[VAL_10:.*]]: i32):106// CHECK: wasmssa.block_return %[[VAL_10]] : i32107// CHECK: } "else "{108// CHECK: %[[VAL_11:.*]] = wasmssa.const 1 : i32109// CHECK: wasmssa.block_return %[[VAL_11]] : i32110// CHECK: }> ^bb1111// CHECK: ^bb1(%[[VAL_12:.*]]: i32):112// CHECK: wasmssa.return %[[VAL_12]] : i32113