@@ -767,6 +767,7 @@ func.func @stage_0_value_escape(%A: memref<?xf32>, %result: memref<?xf32>, %ub:
767767// Check for predicated epilogue for dynamic loop.
768768// CHECK-LABEL: dynamic_loop(
769769// CHECK-DAG: %[[C1:.*]] = arith.constant 1 : index
770+ // CHECK-DAG: %[[C2:.*]] = arith.constant 2 : index
770771// CHECK-DAG: %[[C0:.*]] = arith.constant 0 : index
771772// CHECK-DAG: %[[CM1:.*]] = arith.constant -1 : index
772773// CHECK: %[[UBM:.*]] = arith.subi %[[UB:.*]], %{{.*}}
@@ -779,32 +780,32 @@ func.func @stage_0_value_escape(%A: memref<?xf32>, %result: memref<?xf32>, %ub:
779780// CHECK: scf.yield %[[ADDF_24]], %[[LOAD_27]]
780781// CHECK: }
781782// CHECK: %[[CMPI_10:.*]] = arith.cmpi slt, %[[STEP]], %[[C0]]
782- // CHECK: %[[SEL_10 :.*]] = arith.select %[[CMPI_10]], %[[C1]], %[[CM1]]
783- // CHECK: %[[SUBI_10 :.*]] = arith.subi %[[UB]], %[[LB]]
784- // CHECK: %[[ADDI_11 :.*]] = arith.addi %[[SUBI_10 ]], %[[STEP]]
785- // CHECK: %[[ADDI_12 :.*]] = arith.addi %[[ADDI_11 ]], %[[SEL_10 ]]
786- // CHECK: %[[DIVSI_13 :.*]] = arith.divsi %[[ADDI_12 ]], %[[STEP]]
787- // CHECK: %[[ADDI_14 :.*]] = arith.addi %[[DIVSI_13 ]], %[[CM1 ]]
788- // CHECK: %[[MULI_15 :.*]] = arith.muli %{{.*}} , %[[ADDI_14 ]]
789- // CHECK: %[[ADDI_16 :.*]] = arith.addi %{{.*}} , %[[MULI_15 ]]
790- // CHECK: %[[CMPI_17 :.*]] = arith.cmpi sge, %[[ADDI_14 ]], %[[C0 ]]
791- // CHECK: %[[ADDI_18 :.*]] = arith.addi %[[DIVSI_13 ]], %{{.*}}-1
792- // CHECK: %[[ADDI_19 :.*]] = arith.addi %[[ADDI_18 ]], %{{.*}}-1
793- // CHECK: %[[MULI_20 :.*]] = arith.muli %{{.*}} , %[[ADDI_19 ]]
794- // CHECK: %[[ADDI_21 :.*]] = arith.addi %{{.*}} , %[[MULI_20 ]]
795- // CHECK: %[[CMPI_22 :.*]] = arith.cmpi sge, %[[ADDI_19 ]], %[[C0 ]]
796- // CHECK: scf.if %[[CMPI_17 ]] {
797- // CHECK: memref.store %{{.*}}#0, %{{.*}}[%[[ADDI_21 ]]]
783+ // CHECK: %[[SELECT_11 :.*]] = arith.select %[[CMPI_10]], %[[C1]], %[[CM1]]
784+ // CHECK: %[[SUBI_12 :.*]] = arith.subi %[[UB]], %[[LB]]
785+ // CHECK: %[[ADDI_13 :.*]] = arith.addi %[[SUBI_12 ]], %[[STEP]]
786+ // CHECK: %[[ADDI_14 :.*]] = arith.addi %[[ADDI_13 ]], %[[SELECT_11 ]]
787+ // CHECK: %[[DIVSI_15 :.*]] = arith.divsi %[[ADDI_14 ]], %[[STEP]]
788+ // CHECK: %[[SUBI_17 :.*]] = arith.subi %[[DIVSI_15 ]], %[[C2 ]]
789+ // CHECK: %[[MAXSI_18 :.*]] = arith.maxsi %[[SUBI_17]] , %[[C0 ]]
790+ // CHECK: %[[MULI_19 :.*]] = arith.muli %[[STEP]] , %[[MAXSI_18 ]]
791+ // CHECK: %[[ADDI_20 :.*]] = arith.addi %[[LB ]], %[[MULI_19 ]]
792+ // CHECK: %[[ADDI_21 :.*]] = arith.addi %[[MAXSI_18 ]], %[[C1]]
793+ // CHECK: %[[CMPI_22 :.*]] = arith.cmpi sge, %[[DIVSI_15 ]], %[[C1]]
794+ // CHECK: %[[MULI_23 :.*]] = arith.muli %[[STEP]] , %[[ADDI_21 ]]
795+ // CHECK: %[[ADDI_24 :.*]] = arith.addi %[[LB]] , %[[MULI_23 ]]
796+ // CHECK: %[[CMPI_25 :.*]] = arith.cmpi sge, %[[DIVSI_15 ]], %[[C2 ]]
797+ // CHECK: scf.if %[[CMPI_22 ]] {
798+ // CHECK: memref.store %{{.*}}#0, %{{.*}}[%[[ADDI_20 ]]]
798799// CHECK: } else {
799800// CHECK: }
800- // CHECK: %[[IF_23 :.*]] = scf.if %[[CMPI_22]] -> (f32) {
801- // CHECK: %[[ADDF_24 :.*]] = arith.addf %{{.*}}#1, %{{.*}}
802- // CHECK: scf.yield %[[ADDF_24 ]]
801+ // CHECK: %[[IF_26 :.*]] = scf.if %[[CMPI_25]]
802+ // CHECK: %[[ADDF_27 :.*]] = arith.addf %{{.*}}#1, %{{.*}}
803+ // CHECK: scf.yield %[[ADDF_27 ]]
803804// CHECK: } else {
804805// CHECK: scf.yield %{{.*}}
805806// CHECK: }
806- // CHECK: scf.if %[[CMPI_22 ]] {
807- // CHECK: memref.store %[[IF_23 ]], %{{.*}}[%[[ADDI_16 ]]]
807+ // CHECK: scf.if %[[CMPI_25 ]] {
808+ // CHECK: memref.store %[[IF_26 ]], %{{.*}}[%[[ADDI_24 ]]]
808809// CHECK: } else {
809810// CHECK: }
810811// CHECK: return
@@ -842,6 +843,7 @@ func.func @dynamic_loop(%A: memref<?xf32>, %result: memref<?xf32>, %lb: index, %
842843// CHECK-DAG: %[[C1:.*]] = arith.constant 1 : index
843844// CHECK-DAG: %[[C0:.*]] = arith.constant 0 : index
844845// CHECK-DAG: %[[CM1:.*]] = arith.constant -1 : index
846+ // CHECK-DAG: %[[CF0:.*]] = arith.constant 0.000000e+00
845847// CHECK: %[[UBM:.*]] = arith.subi %[[UB:.*]], %{{.*}}
846848// CHECK: %{{.*}}:2 = scf.for %[[ARG5:.*]] = %[[LB:.*]] to %[[UBM]] step %[[STEP:.*]] iter_args(%[[ARG6:.*]] = %{{.*}}, %[[ARG7:.*]] = %{{.*}})
847849// CHECK: %[[ADDF_13:.*]] = arith.addf %[[ARG7]], %[[ARG6]]
@@ -856,22 +858,21 @@ func.func @dynamic_loop(%A: memref<?xf32>, %result: memref<?xf32>, %lb: index, %
856858// CHECK: %[[ADDI_7:.*]] = arith.addi %[[SUBI_6]], %[[STEP]]
857859// CHECK: %[[ADDI_8:.*]] = arith.addi %[[ADDI_7]], %[[SELECT_5]]
858860// CHECK: %[[DIVSI_9:.*]] = arith.divsi %[[ADDI_8]], %[[STEP]]
859- // CHECK: %[[ADDI_10:.*]] = arith.addi %[[DIVSI_9]], %[[CM1]]
860- // CHECK: %[[CMPI_11:.*]] = arith.cmpi sge, %[[ADDI_10]], %[[C0]]
861- // CHECK: %[[IF_10:.*]] = scf.if %[[CMPI_11]]
862- // CHECK: %[[ADDF_13:.*]] = arith.addf %{{.*}}#1, %{{.*}}#0
863- // CHECK: scf.yield %[[ADDF_13]]
861+ // CHECK: %[[CMPI_10:.*]] = arith.cmpi sge, %[[DIVSI_9]], %[[C1]]
862+ // CHECK: %[[IF_11:.*]] = scf.if %[[CMPI_10]]
863+ // CHECK: %[[ADDF_14:.*]] = arith.addf %{{.*}}#1, %{{.*}}#0
864+ // CHECK: scf.yield %[[ADDF_14]]
864865// CHECK: } else {
865- // CHECK: scf.yield %{{.*}}
866+ // CHECK: scf.yield %[[CF0]]
866867// CHECK: }
867- // CHECK: %[[IF_11 :.*]] = scf.if %[[CMPI_11 ]]
868- // CHECK: %[[MULF_13 :.*]] = arith.mulf %[[IF_10 ]], %{{.*}}
869- // CHECK: scf.yield %[[MULF_13 ]]
868+ // CHECK: %[[IF_12 :.*]] = scf.if %[[CMPI_10 ]]
869+ // CHECK: %[[MULF_14 :.*]] = arith.mulf %[[IF_11 ]], %{{.*}}
870+ // CHECK: scf.yield %[[MULF_14 ]]
870871// CHECK: } else {
871- // CHECK: scf.yield %{{.*}}
872+ // CHECK: scf.yield %[[CF0]]
872873// CHECK: }
873- // CHECK: %[[SELECT_12 :.*]] = arith.select %[[CMPI_11 ]], %[[IF_11 ]], %{{.*}}#0
874- // CHECK: memref.store %[[SELECT_12 ]], %{{.*}}[%{{.*}} ]
874+ // CHECK: %[[SELECT_13 :.*]] = arith.select %[[CMPI_10 ]], %[[IF_12 ]], %{{.*}}#0
875+ // CHECK: memref.store %[[SELECT_13 ]], %{{.*}}[%[[C0]] ]
875876func.func @dynamic_loop_result (%A: memref <?xf32 >, %result: memref <?xf32 >, %lb: index , %ub: index , %step: index ) {
876877 %cf0 = arith.constant 1.0 : f32
877878 %cf1 = arith.constant 33.0 : f32
0 commit comments