brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 2eb888b Raw
61 lines · plain
1// RUN: mlir-opt -split-input-file -control-flow-sink %s | FileCheck %s2 3// CHECK-LABEL: @test_scf_if_sink4// CHECK-SAME:  (%[[ARG0:.*]]: i1, %[[ARG1:.*]]: i32)5// CHECK: %[[V0:.*]] = scf.if %[[ARG0]]6// CHECK:   %[[V1:.*]] = arith.addi %[[ARG1]], %[[ARG1]]7// CHECK:   scf.yield %[[V1]]8// CHECK: else9// CHECK:   %[[V1:.*]] = arith.muli %[[ARG1]], %[[ARG1]]10// CHECK:   scf.yield %[[V1]]11// CHECK: return %[[V0]]12func.func @test_scf_if_sink(%arg0: i1, %arg1: i32) -> i32 {13  %0 = arith.addi %arg1, %arg1 : i3214  %1 = arith.muli %arg1, %arg1 : i3215  %result = scf.if %arg0 -> i32 {16    scf.yield %0 : i3217  } else {18    scf.yield %1 : i3219  }20  return %result : i3221}22 23// -----24 25func.func private @consume(i32) -> ()26 27// CHECK-LABEL: @test_scf_if_then_only_sink28// CHECK-SAME:  (%[[ARG0:.*]]: i1, %[[ARG1:.*]]: i32)29// CHECK: scf.if %[[ARG0]]30// CHECK:   %[[V0:.*]] = arith.addi %[[ARG1]], %[[ARG1]]31// CHECK:   call @consume(%[[V0]])32func.func @test_scf_if_then_only_sink(%arg0: i1, %arg1: i32) {33  %0 = arith.addi %arg1, %arg1 : i3234  scf.if %arg0 {35    func.call @consume(%0) : (i32) -> ()36    scf.yield37  }38  return39}40 41// -----42 43func.func private @consume(i32) -> ()44 45// CHECK-LABEL: @test_scf_if_double_sink46// CHECK-SAME:  (%[[ARG0:.*]]: i1, %[[ARG1:.*]]: i32)47// CHECK: scf.if %[[ARG0]]48// CHECK:   scf.if %[[ARG0]]49// CHECK:     %[[V0:.*]] = arith.addi %[[ARG1]], %[[ARG1]]50// CHECK:     call @consume(%[[V0]])51func.func @test_scf_if_double_sink(%arg0: i1, %arg1: i32) {52  %0 = arith.addi %arg1, %arg1 : i3253  scf.if %arg0 {54    scf.if %arg0 {55      func.call @consume(%0) : (i32) -> ()56      scf.yield57    }58  }59  return60}61