brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.8 KiB · 43a4693 Raw
131 lines · plain
1// RUN: mlir-opt %s -test-wrap-scf-while-loop-in-zero-trip-check -split-input-file  | FileCheck %s2// RUN: mlir-opt %s -test-wrap-scf-while-loop-in-zero-trip-check='force-create-check=true' -split-input-file  | FileCheck %s --check-prefix FORCE-CREATE-CHECK3 4func.func @wrap_while_loop_in_zero_trip_check(%bound : i32) -> i32 {5  %cst0 = arith.constant 0 : i326  %cst5 = arith.constant 5 : i327  %res:2 = scf.while (%iter = %cst0) : (i32) -> (i32, i32) {8    %cond = arith.cmpi slt, %iter, %bound : i329    %inv = arith.addi %bound, %cst5 : i3210    scf.condition(%cond) %iter, %inv : i32, i3211  } do {12  ^bb0(%arg1: i32, %arg2: i32):13    %next = arith.addi %arg1, %arg2 : i3214    scf.yield %next : i3215  }16  return %res#0 : i3217}18 19// CHECK-LABEL: func.func @wrap_while_loop_in_zero_trip_check(20// CHECK-SAME:      %[[BOUND:.*]]: i32) -> i32 {21// CHECK-DAG:     %[[C0:.*]] = arith.constant 0 : i3222// CHECK-DAG:     %[[C5:.*]] = arith.constant 5 : i3223// CHECK-DAG:     %[[PRE_COND:.*]] = arith.cmpi sgt, %[[BOUND]], %[[C0]] : i3224// CHECK-DAG:     %[[PRE_INV:.*]] = arith.addi %[[BOUND]], %[[C5]] : i3225// CHECK:         %[[IF:.*]]:2 = scf.if %[[PRE_COND]] -> (i32, i32) {26// CHECK:           %[[WHILE:.*]]:2 = scf.while (27// CHECK-SAME:          %[[ARG1:.*]] = %[[C0]], %[[ARG2:.*]] = %[[PRE_INV]]28// CHECK-SAME:      ) : (i32, i32) -> (i32, i32) {29// CHECK:             %[[NEXT:.*]] = arith.addi %[[ARG1]], %[[ARG2]] : i3230// CHECK:             %[[COND:.*]] = arith.cmpi slt, %[[NEXT]], %[[BOUND]] : i3231// CHECK:             %[[INV:.*]] = arith.addi %[[BOUND]], %[[C5]] : i3232// CHECK:             scf.condition(%[[COND]]) %[[NEXT]], %[[INV]] : i32, i3233// CHECK:           } do {34// CHECK:           ^bb0(%[[ARG3:.*]]: i32, %[[ARG4:.*]]: i32):35// CHECK:             scf.yield %[[ARG3]], %[[ARG4]] : i32, i3236// CHECK:           }37// CHECK:           scf.yield %[[WHILE]]#0, %[[WHILE]]#1 : i32, i3238// CHECK:         } else {39// CHECK:           scf.yield %[[C0]], %[[PRE_INV]] : i32, i3240// CHECK:         }41// CHECK:         return %[[IF]]#0 : i3242 43// -----44 45func.func @wrap_while_loop_with_minimal_before_block(%bound : i32) -> i32 {46  %cst0 = arith.constant 0 : i3247  %true = arith.constant true48  %cst5 = arith.constant 5 : i3249  %res = scf.while (%iter = %cst0, %arg0 = %true) : (i32, i1) -> i32 {50    scf.condition(%arg0) %iter : i3251  } do {52  ^bb0(%arg1: i32):53    %next = arith.addi %arg1, %cst5 : i3254    %cond = arith.cmpi slt, %next, %bound : i3255    scf.yield %next, %cond : i32, i156  }57  return %res : i3258}59 60// CHECK-LABEL: func.func @wrap_while_loop_with_minimal_before_block(61// CHECK-SAME:      %[[BOUND:.*]]: i32) -> i32 {62// CHECK-DAG:     %[[C0:.*]] = arith.constant 0 : i3263// CHECK-DAG:     %[[TRUE:.*]] = arith.constant true64// CHECK-DAG:     %[[C5:.*]] = arith.constant 5 : i3265// CHECK:         %[[IF:.*]] = scf.if %[[TRUE]] -> (i32) {66// CHECK:           %[[WHILE:.*]] = scf.while (%[[ARG1:.*]] = %[[C0]]) : (i32) -> i32 {67// CHECK:             %[[NEXT:.*]] = arith.addi %[[ARG1]], %[[C5]] : i3268// CHECK:             %[[COND:.*]] = arith.cmpi slt, %[[NEXT]], %[[BOUND]] : i3269// CHECK:             scf.condition(%[[COND]]) %[[NEXT]] : i3270// CHECK:           } do {71// CHECK:           ^bb0(%[[ARG2:.*]]: i32):72// CHECK:             scf.yield %[[ARG2]] : i3273// CHECK:           }74// CHECK:           scf.yield %[[WHILE]] : i3275// CHECK:         } else {76// CHECK:           scf.yield %[[C0]] : i3277// CHECK:         }78// CHECK:         return %[[IF]] : i3279 80// -----81 82func.func @wrap_do_while_loop_in_zero_trip_check(%bound : i32) -> i32 {83  %cst0 = arith.constant 0 : i3284  %cst5 = arith.constant 5 : i3285  %res = scf.while (%iter = %cst0) : (i32) -> i32 {86    %next = arith.addi %iter, %cst5 : i3287    %cond = arith.cmpi slt, %next, %bound : i3288    scf.condition(%cond) %next : i3289  } do {90  ^bb0(%arg1: i32):91    scf.yield %arg1 : i3292  }93  return %res : i3294}95 96// CHECK-LABEL: func.func @wrap_do_while_loop_in_zero_trip_check(97// CHECK-SAME:      %[[BOUND:.*]]: i32) -> i32 {98// CHECK-DAG:     %[[C0:.*]] = arith.constant 0 : i3299// CHECK-DAG:     %[[C5:.*]] = arith.constant 5 : i32100// CHECK-NOT:     scf.if101// CHECK:         %[[WHILE:.*]] = scf.while (%[[ARG1:.*]] = %[[C0]]) : (i32) -> i32 {102// CHECK:             %[[NEXT:.*]] = arith.addi %[[ARG1]], %[[C5]] : i32103// CHECK:             %[[COND:.*]] = arith.cmpi slt, %[[NEXT]], %[[BOUND]] : i32104// CHECK:             scf.condition(%[[COND]]) %[[NEXT]] : i32105// CHECK:           } do {106// CHECK:           ^bb0(%[[ARG2:.*]]: i32):107// CHECK:             scf.yield %[[ARG2]] : i32108// CHECK:           }109// CHECK:         return %[[WHILE]] : i32110 111// FORCE-CREATE-CHECK-LABEL: func.func @wrap_do_while_loop_in_zero_trip_check(112// FORCE-CREATE-CHECK-SAME:      %[[BOUND:.*]]: i32) -> i32 {113// FORCE-CREATE-CHECK-DAG:     %[[C0:.*]] = arith.constant 0 : i32114// FORCE-CREATE-CHECK-DAG:     %[[C5:.*]] = arith.constant 5 : i32115// FORCE-CREATE-CHECK:         %[[PRE_NEXT:.*]] = arith.addi %[[C0]], %[[C5]] : i32116// FORCE-CREATE-CHECK:         %[[PRE_COND:.*]] = arith.cmpi slt, %[[PRE_NEXT]], %[[BOUND]] : i32117// FORCE-CREATE-CHECK:         %[[IF:.*]] = scf.if %[[PRE_COND]] -> (i32) {118// FORCE-CREATE-CHECK:           %[[WHILE:.*]] = scf.while (%[[ARG1:.*]] = %[[PRE_NEXT]]) : (i32) -> i32 {119// FORCE-CREATE-CHECK:             %[[NEXT:.*]] = arith.addi %[[ARG1]], %[[C5]] : i32120// FORCE-CREATE-CHECK:             %[[COND:.*]] = arith.cmpi slt, %[[NEXT]], %[[BOUND]] : i32121// FORCE-CREATE-CHECK:             scf.condition(%[[COND]]) %[[NEXT]] : i32122// FORCE-CREATE-CHECK:           } do {123// FORCE-CREATE-CHECK:           ^bb0(%[[ARG2:.*]]: i32):124// FORCE-CREATE-CHECK:             scf.yield %[[ARG2]] : i32125// FORCE-CREATE-CHECK:           }126// FORCE-CREATE-CHECK:           scf.yield %[[WHILE]] : i32127// FORCE-CREATE-CHECK:         } else {128// FORCE-CREATE-CHECK:           scf.yield %[[PRE_NEXT]] : i32129// FORCE-CREATE-CHECK:         }130// FORCE-CREATE-CHECK:         return %[[IF]] : i32131