brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · 0de7aab Raw
100 lines · plain
1// RUN: fir-opt %s --fir-to-scf | FileCheck %s2 3// CHECK-LABEL:   func.func @test_simple_iterate_while_1() -> (index, i1, i16, i32) {4// CHECK:           %[[VAL_0:.*]] = arith.constant 11 : index5// CHECK:           %[[VAL_1:.*]] = arith.constant 22 : index6// CHECK:           %[[VAL_2:.*]] = arith.constant 2 : index7// CHECK:           %[[VAL_3:.*]] = arith.constant true8// CHECK:           %[[VAL_4:.*]] = arith.constant 123 : i169// CHECK:           %[[VAL_5:.*]] = arith.constant 456 : i3210// CHECK:           %[[VAL_6:.*]]:4 = scf.while (%[[VAL_7:.*]] = %[[VAL_0]], %[[VAL_8:.*]] = %[[VAL_3]], %[[VAL_9:.*]] = %[[VAL_4]], %[[VAL_10:.*]] = %[[VAL_5]]) : (index, i1, i16, i32) -> (index, i1, i16, i32) {11// CHECK:             %[[VAL_11:.*]] = arith.cmpi sle, %[[VAL_7]], %[[VAL_1]] : index12// CHECK:             %[[VAL_12:.*]] = arith.andi %[[VAL_11]], %[[VAL_8]] : i113// CHECK:             scf.condition(%[[VAL_12]]) %[[VAL_7]], %[[VAL_8]], %[[VAL_9]], %[[VAL_10]] : index, i1, i16, i3214// CHECK:           } do {15// CHECK:           ^bb0(%[[VAL_13:.*]]: index, %[[VAL_14:.*]]: i1, %[[VAL_15:.*]]: i16, %[[VAL_16:.*]]: i32):16// CHECK:             %[[VAL_17:.*]] = arith.addi %[[VAL_13]], %[[VAL_2]] : index17// CHECK:             %[[VAL_18:.*]] = arith.constant true18// CHECK:             %[[VAL_19:.*]] = arith.constant 22 : i1619// CHECK:             %[[VAL_20:.*]] = arith.constant 33 : i3220// CHECK:             scf.yield %[[VAL_17]], %[[VAL_18]], %[[VAL_19]], %[[VAL_20]] : index, i1, i16, i3221// CHECK:           }22// CHECK:           return %[[VAL_21:.*]]#0, %[[VAL_21]]#1, %[[VAL_21]]#2, %[[VAL_21]]#3 : index, i1, i16, i3223// CHECK:         }24func.func @test_simple_iterate_while_1() -> (index, i1, i16, i32) {25  %lo = arith.constant 11 : index26  %up = arith.constant 22 : index27  %step = arith.constant 2 : index28  %ok = arith.constant 1 : i129  %val1 = arith.constant 123 : i1630  %val2 = arith.constant 456 : i3231 32  %res:4 = fir.iterate_while (%i = %lo to %up step %step) and (%c = %ok) iter_args(%v1 = %val1, %v2 = %val2) -> (index, i1, i16, i32) {33    %new_c = arith.constant 1 : i134    %new_v1 = arith.constant 22 : i1635    %new_v2 = arith.constant 33 : i3236    fir.result %i, %new_c, %new_v1, %new_v2 : index, i1, i16, i3237  }38 39  return %res#0, %res#1, %res#2, %res#3 : index, i1, i16, i3240}41 42// CHECK-LABEL:   func.func @test_simple_iterate_while_2(43// CHECK-SAME:        %[[ARG0:.*]]: index, %[[ARG1:.*]]: index, %[[ARG2:.*]]: i1, %[[ARG3:.*]]: i32) -> (index, i1, i32) {44// CHECK:           %[[VAL_0:.*]] = arith.constant 1 : index45// CHECK:           %[[VAL_1:.*]]:3 = scf.while (%[[VAL_2:.*]] = %[[ARG0]], %[[VAL_3:.*]] = %[[ARG2]], %[[VAL_4:.*]] = %[[ARG3]]) : (index, i1, i32) -> (index, i1, i32) {46// CHECK:             %[[VAL_5:.*]] = arith.cmpi sle, %[[VAL_2]], %[[ARG1]] : index47// CHECK:             %[[VAL_6:.*]] = arith.andi %[[VAL_5]], %[[VAL_3]] : i148// CHECK:             scf.condition(%[[VAL_6]]) %[[VAL_2]], %[[VAL_3]], %[[VAL_4]] : index, i1, i3249// CHECK:           } do {50// CHECK:           ^bb0(%[[VAL_7:.*]]: index, %[[VAL_8:.*]]: i1, %[[VAL_9:.*]]: i32):51// CHECK:             %[[VAL_10:.*]] = arith.addi %[[VAL_7]], %[[VAL_0]] : index52// CHECK:             %[[VAL_11:.*]] = arith.constant 123 : i3253// CHECK:             %[[VAL_12:.*]] = arith.constant true54// CHECK:             scf.yield %[[VAL_10]], %[[VAL_12]], %[[VAL_11]] : index, i1, i3255// CHECK:           }56// CHECK:           return %[[VAL_13:.*]]#0, %[[VAL_13]]#1, %[[VAL_13]]#2 : index, i1, i3257// CHECK:         }58func.func @test_simple_iterate_while_2(%start: index, %stop: index, %cond: i1, %val: i32) -> (index, i1, i32) {59  %step = arith.constant 1 : index60 61  %res:3 = fir.iterate_while (%i = %start to %stop step %step) and (%ok = %cond) iter_args(%x = %val) -> (index, i1, i32) {62    %new_x = arith.constant 123 : i3263    %new_ok = arith.constant 1 : i164    fir.result %i, %new_ok, %new_x : index, i1, i3265  }66 67  return %res#0, %res#1, %res#2 : index, i1, i3268}69 70// CHECK-LABEL:   func.func @test_zero_iterations() -> (index, i1, i8) {71// CHECK:           %[[VAL_0:.*]] = arith.constant 10 : index72// CHECK:           %[[VAL_1:.*]] = arith.constant 5 : index73// CHECK:           %[[VAL_2:.*]] = arith.constant 1 : index74// CHECK:           %[[VAL_3:.*]] = arith.constant true75// CHECK:           %[[VAL_4:.*]] = arith.constant 42 : i876// CHECK:           %[[VAL_5:.*]]:3 = scf.while (%[[VAL_6:.*]] = %[[VAL_0]], %[[VAL_7:.*]] = %[[VAL_3]], %[[VAL_8:.*]] = %[[VAL_4]]) : (index, i1, i8) -> (index, i1, i8) {77// CHECK:             %[[VAL_9:.*]] = arith.cmpi sle, %[[VAL_6]], %[[VAL_1]] : index78// CHECK:             %[[VAL_10:.*]] = arith.andi %[[VAL_9]], %[[VAL_7]] : i179// CHECK:             scf.condition(%[[VAL_10]]) %[[VAL_6]], %[[VAL_7]], %[[VAL_8]] : index, i1, i880// CHECK:           } do {81// CHECK:           ^bb0(%[[VAL_11:.*]]: index, %[[VAL_12:.*]]: i1, %[[VAL_13:.*]]: i8):82// CHECK:             %[[VAL_14:.*]] = arith.addi %[[VAL_11]], %[[VAL_2]] : index83// CHECK:             scf.yield %[[VAL_14]], %[[VAL_12]], %[[VAL_13]] : index, i1, i884// CHECK:           }85// CHECK:           return %[[VAL_15:.*]]#0, %[[VAL_15]]#1, %[[VAL_15]]#2 : index, i1, i886// CHECK:         }87func.func @test_zero_iterations() -> (index, i1, i8) {88  %lo = arith.constant 10 : index89  %up = arith.constant 5 : index90  %step = arith.constant 1 : index91  %ok = arith.constant 1 : i192  %x = arith.constant 42 : i893 94  %res:3 = fir.iterate_while (%i = %lo to %up step %step) and (%c = %ok) iter_args(%xv = %x) -> (index, i1, i8) {95    fir.result %i, %c, %xv : index, i1, i896  }97 98  return %res#0, %res#1, %res#2 : index, i1, i899}100