1*aa0e167fSKiran Chandramohan! RUN: bbc -emit-fir -o - %s | FileCheck %s 2*aa0e167fSKiran Chandramohan! RUN: %flang_fc1 -emit-fir -o - %s | FileCheck %s 3*aa0e167fSKiran Chandramohan 4*aa0e167fSKiran Chandramohan! Tests for unstructured loops. 5*aa0e167fSKiran Chandramohan 6*aa0e167fSKiran Chandramohan! Test a simple unstructured loop. Test for the existence of, 7*aa0e167fSKiran Chandramohan! -> The initialization of the trip-count and loop-variable 8*aa0e167fSKiran Chandramohan! -> The branch to the body or the exit inside the header 9*aa0e167fSKiran Chandramohan! -> The increment of the trip-count and the loop-variable inside the body 10*aa0e167fSKiran Chandramohansubroutine simple_unstructured() 11*aa0e167fSKiran Chandramohan integer :: i 12*aa0e167fSKiran Chandramohan do i=1,100 13*aa0e167fSKiran Chandramohan goto 404 14*aa0e167fSKiran Chandramohan 404 continue 15*aa0e167fSKiran Chandramohan end do 16*aa0e167fSKiran Chandramohanend subroutine 17*aa0e167fSKiran Chandramohan! CHECK-LABEL: simple_unstructured 18*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_REF:.*]] = fir.alloca i32 19*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_REF:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFsimple_unstructuredEi"} 20*aa0e167fSKiran Chandramohan! CHECK: %[[ONE:.*]] = arith.constant 1 : i32 21*aa0e167fSKiran Chandramohan! CHECK: %[[HUNDRED:.*]] = arith.constant 100 : i32 22*aa0e167fSKiran Chandramohan! CHECK: %[[STEP_ONE:.*]] = arith.constant 1 : i32 23*aa0e167fSKiran Chandramohan! CHECK: %[[TMP1:.*]] = arith.subi %[[HUNDRED]], %[[ONE]] : i32 24*aa0e167fSKiran Chandramohan! CHECK: %[[TMP2:.*]] = arith.addi %[[TMP1]], %[[STEP_ONE]] : i32 25*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_COUNT:.*]] = arith.divsi %[[TMP2]], %[[STEP_ONE]] : i32 26*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_COUNT]] to %[[TRIP_VAR_REF]] : !fir.ref<i32> 27*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[ONE]] to %[[LOOP_VAR_REF]] : !fir.ref<i32> 28*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER:.*]] 29*aa0e167fSKiran Chandramohan! CHECK: ^[[HEADER]]: 30*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR:.*]] = fir.load %[[TRIP_VAR_REF]] : !fir.ref<i32> 31*aa0e167fSKiran Chandramohan! CHECK: %[[ZERO:.*]] = arith.constant 0 : i32 32*aa0e167fSKiran Chandramohan! CHECK: %[[COND:.*]] = arith.cmpi sgt, %[[TRIP_VAR]], %[[ZERO]] : i32 33*aa0e167fSKiran Chandramohan! CHECK: cf.cond_br %[[COND]], ^[[BODY:.*]], ^[[EXIT:.*]] 34*aa0e167fSKiran Chandramohan! CHECK: ^[[BODY]]: 35*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR:.*]] = fir.load %[[TRIP_VAR_REF]] : !fir.ref<i32> 36*aa0e167fSKiran Chandramohan! CHECK: %[[ONE_1:.*]] = arith.constant 1 : i32 37*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_NEXT:.*]] = arith.subi %[[TRIP_VAR]], %[[ONE_1]] : i32 38*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_VAR_NEXT]] to %[[TRIP_VAR_REF]] : !fir.ref<i32> 39*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR:.*]] = fir.load %[[LOOP_VAR_REF]] : !fir.ref<i32> 40*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_NEXT:.*]] = arith.addi %[[LOOP_VAR]], %[[STEP_ONE]] : i32 41*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[LOOP_VAR_NEXT]] to %[[LOOP_VAR_REF]] : !fir.ref<i32> 42*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER]] 43*aa0e167fSKiran Chandramohan! CHECK: ^[[EXIT]]: 44*aa0e167fSKiran Chandramohan! CHECK: return 45*aa0e167fSKiran Chandramohan 46*aa0e167fSKiran Chandramohan! Test an unstructured loop with a step. Mostly similar to the previous one. 47*aa0e167fSKiran Chandramohan! Only difference is a non-unit step. 48*aa0e167fSKiran Chandramohansubroutine simple_unstructured_with_step() 49*aa0e167fSKiran Chandramohan integer :: i 50*aa0e167fSKiran Chandramohan do i=1,100,2 51*aa0e167fSKiran Chandramohan goto 404 52*aa0e167fSKiran Chandramohan 404 continue 53*aa0e167fSKiran Chandramohan end do 54*aa0e167fSKiran Chandramohanend subroutine 55*aa0e167fSKiran Chandramohan! CHECK-LABEL: simple_unstructured_with_step 56*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_REF:.*]] = fir.alloca i32 57*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_REF:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFsimple_unstructured_with_stepEi"} 58*aa0e167fSKiran Chandramohan! CHECK: %[[ONE:.*]] = arith.constant 1 : i32 59*aa0e167fSKiran Chandramohan! CHECK: %[[HUNDRED:.*]] = arith.constant 100 : i32 60*aa0e167fSKiran Chandramohan! CHECK: %[[STEP:.*]] = arith.constant 2 : i32 61*aa0e167fSKiran Chandramohan! CHECK: %[[TMP1:.*]] = arith.subi %[[HUNDRED]], %[[ONE]] : i32 62*aa0e167fSKiran Chandramohan! CHECK: %[[TMP2:.*]] = arith.addi %[[TMP1]], %[[STEP]] : i32 63*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_COUNT:.*]] = arith.divsi %[[TMP2]], %[[STEP]] : i32 64*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_COUNT]] to %[[TRIP_VAR_REF]] : !fir.ref<i32> 65*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[ONE]] to %[[LOOP_VAR_REF]] : !fir.ref<i32> 66*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER:.*]] 67*aa0e167fSKiran Chandramohan! CHECK: ^[[HEADER]]: 68*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR:.*]] = fir.load %[[TRIP_VAR_REF]] : !fir.ref<i32> 69*aa0e167fSKiran Chandramohan! CHECK: %[[ZERO:.*]] = arith.constant 0 : i32 70*aa0e167fSKiran Chandramohan! CHECK: %[[COND:.*]] = arith.cmpi sgt, %[[TRIP_VAR]], %[[ZERO]] : i32 71*aa0e167fSKiran Chandramohan! CHECK: cf.cond_br %[[COND]], ^[[BODY:.*]], ^[[EXIT:.*]] 72*aa0e167fSKiran Chandramohan! CHECK: ^[[BODY]]: 73*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR:.*]] = fir.load %[[TRIP_VAR_REF]] : !fir.ref<i32> 74*aa0e167fSKiran Chandramohan! CHECK: %[[ONE_1:.*]] = arith.constant 1 : i32 75*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_NEXT:.*]] = arith.subi %[[TRIP_VAR]], %[[ONE_1]] : i32 76*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_VAR_NEXT]] to %[[TRIP_VAR_REF]] : !fir.ref<i32> 77*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR:.*]] = fir.load %[[LOOP_VAR_REF]] : !fir.ref<i32> 78*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_NEXT:.*]] = arith.addi %[[LOOP_VAR]], %[[STEP]] : i32 79*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[LOOP_VAR_NEXT]] to %[[LOOP_VAR_REF]] : !fir.ref<i32> 80*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER]] 81*aa0e167fSKiran Chandramohan! CHECK: ^[[EXIT]]: 82*aa0e167fSKiran Chandramohan! CHECK: return 83*aa0e167fSKiran Chandramohan 84*aa0e167fSKiran Chandramohan! Test a three nested unstructured loop. Three nesting is the basic case where 85*aa0e167fSKiran Chandramohan! we have loops that are neither innermost or outermost. 86*aa0e167fSKiran Chandramohansubroutine nested_unstructured() 87*aa0e167fSKiran Chandramohan integer :: i, j, k 88*aa0e167fSKiran Chandramohan do i=1,100 89*aa0e167fSKiran Chandramohan do j=1,200 90*aa0e167fSKiran Chandramohan do k=1,300 91*aa0e167fSKiran Chandramohan goto 404 92*aa0e167fSKiran Chandramohan 404 continue 93*aa0e167fSKiran Chandramohan end do 94*aa0e167fSKiran Chandramohan end do 95*aa0e167fSKiran Chandramohan end do 96*aa0e167fSKiran Chandramohanend subroutine 97*aa0e167fSKiran Chandramohan! CHECK-LABEL: nested_unstructured 98*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_K_REF:.*]] = fir.alloca i32 99*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_J_REF:.*]] = fir.alloca i32 100*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_I_REF:.*]] = fir.alloca i32 101*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_I_REF:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFnested_unstructuredEi"} 102*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_J_REF:.*]] = fir.alloca i32 {bindc_name = "j", uniq_name = "_QFnested_unstructuredEj"} 103*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_K_REF:.*]] = fir.alloca i32 {bindc_name = "k", uniq_name = "_QFnested_unstructuredEk"} 104*aa0e167fSKiran Chandramohan! CHECK: %[[I_START:.*]] = arith.constant 1 : i32 105*aa0e167fSKiran Chandramohan! CHECK: %[[I_END:.*]] = arith.constant 100 : i32 106*aa0e167fSKiran Chandramohan! CHECK: %[[I_STEP:.*]] = arith.constant 1 : i32 107*aa0e167fSKiran Chandramohan! CHECK: %[[TMP1:.*]] = arith.subi %[[I_END]], %[[I_START]] : i32 108*aa0e167fSKiran Chandramohan! CHECK: %[[TMP2:.*]] = arith.addi %[[TMP1]], %[[I_STEP]] : i32 109*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_COUNT_I:.*]] = arith.divsi %[[TMP2]], %[[I_STEP]] : i32 110*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_COUNT_I]] to %[[TRIP_VAR_I_REF]] : !fir.ref<i32> 111*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[I_START]] to %[[LOOP_VAR_I_REF]] : !fir.ref<i32> 112*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER_I:.*]] 113*aa0e167fSKiran Chandramohan! CHECK: ^[[HEADER_I]]: 114*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_I:.*]] = fir.load %[[TRIP_VAR_I_REF]] : !fir.ref<i32> 115*aa0e167fSKiran Chandramohan! CHECK: %[[ZERO_1:.*]] = arith.constant 0 : i32 116*aa0e167fSKiran Chandramohan! CHECK: %[[COND_I:.*]] = arith.cmpi sgt, %[[TRIP_VAR_I]], %[[ZERO_1]] : i32 117*aa0e167fSKiran Chandramohan! CHECK: cf.cond_br %[[COND_I]], ^[[BODY_I:.*]], ^[[EXIT_I:.*]] 118*aa0e167fSKiran Chandramohan! CHECK: ^[[BODY_I]]: 119*aa0e167fSKiran Chandramohan! CHECK: %[[J_START:.*]] = arith.constant 1 : i32 120*aa0e167fSKiran Chandramohan! CHECK: %[[J_END:.*]] = arith.constant 200 : i32 121*aa0e167fSKiran Chandramohan! CHECK: %[[J_STEP:.*]] = arith.constant 1 : i32 122*aa0e167fSKiran Chandramohan! CHECK: %[[TMP3:.*]] = arith.subi %[[J_END]], %[[J_START]] : i32 123*aa0e167fSKiran Chandramohan! CHECK: %[[TMP4:.*]] = arith.addi %[[TMP3]], %[[J_STEP]] : i32 124*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_COUNT_J:.*]] = arith.divsi %[[TMP4]], %[[J_STEP]] : i32 125*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_COUNT_J]] to %[[TRIP_VAR_J_REF]] : !fir.ref<i32> 126*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[J_START]] to %[[LOOP_VAR_J_REF]] : !fir.ref<i32> 127*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER_J:.*]] 128*aa0e167fSKiran Chandramohan! CHECK: ^[[HEADER_J]]: 129*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_J:.*]] = fir.load %[[TRIP_VAR_J_REF]] : !fir.ref<i32> 130*aa0e167fSKiran Chandramohan! CHECK: %[[ZERO_2:.*]] = arith.constant 0 : i32 131*aa0e167fSKiran Chandramohan! CHECK: %[[COND_J:.*]] = arith.cmpi sgt, %[[TRIP_VAR_J]], %[[ZERO_2]] : i32 132*aa0e167fSKiran Chandramohan! CHECK: cf.cond_br %[[COND_J]], ^[[BODY_J:.*]], ^[[EXIT_J:.*]] 133*aa0e167fSKiran Chandramohan! CHECK: ^[[BODY_J]]: 134*aa0e167fSKiran Chandramohan! CHECK: %[[K_START:.*]] = arith.constant 1 : i32 135*aa0e167fSKiran Chandramohan! CHECK: %[[K_END:.*]] = arith.constant 300 : i32 136*aa0e167fSKiran Chandramohan! CHECK: %[[K_STEP:.*]] = arith.constant 1 : i32 137*aa0e167fSKiran Chandramohan! CHECK: %[[TMP3:.*]] = arith.subi %[[K_END]], %[[K_START]] : i32 138*aa0e167fSKiran Chandramohan! CHECK: %[[TMP4:.*]] = arith.addi %[[TMP3]], %[[K_STEP]] : i32 139*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_COUNT_K:.*]] = arith.divsi %[[TMP4]], %[[K_STEP]] : i32 140*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_COUNT_K]] to %[[TRIP_VAR_K_REF]] : !fir.ref<i32> 141*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[K_START]] to %[[LOOP_VAR_K_REF]] : !fir.ref<i32> 142*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER_K:.*]] 143*aa0e167fSKiran Chandramohan! CHECK: ^[[HEADER_K]]: 144*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_K:.*]] = fir.load %[[TRIP_VAR_K_REF]] : !fir.ref<i32> 145*aa0e167fSKiran Chandramohan! CHECK: %[[ZERO_2:.*]] = arith.constant 0 : i32 146*aa0e167fSKiran Chandramohan! CHECK: %[[COND_K:.*]] = arith.cmpi sgt, %[[TRIP_VAR_K]], %[[ZERO_2]] : i32 147*aa0e167fSKiran Chandramohan! CHECK: cf.cond_br %[[COND_K]], ^[[BODY_K:.*]], ^[[EXIT_K:.*]] 148*aa0e167fSKiran Chandramohan! CHECK: ^[[BODY_K]]: 149*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_K:.*]] = fir.load %[[TRIP_VAR_K_REF]] : !fir.ref<i32> 150*aa0e167fSKiran Chandramohan! CHECK: %[[ONE_1:.*]] = arith.constant 1 : i32 151*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_K_NEXT:.*]] = arith.subi %[[TRIP_VAR_K]], %[[ONE_1]] : i32 152*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_VAR_K_NEXT]] to %[[TRIP_VAR_K_REF]] : !fir.ref<i32> 153*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_K:.*]] = fir.load %[[LOOP_VAR_K_REF]] : !fir.ref<i32> 154*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_K_NEXT:.*]] = arith.addi %[[LOOP_VAR_K]], %[[K_STEP]] : i32 155*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[LOOP_VAR_K_NEXT]] to %[[LOOP_VAR_K_REF]] : !fir.ref<i32> 156*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER_K]] 157*aa0e167fSKiran Chandramohan! CHECK: ^[[EXIT_K]]: 158*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_J:.*]] = fir.load %[[TRIP_VAR_J_REF]] : !fir.ref<i32> 159*aa0e167fSKiran Chandramohan! CHECK: %[[ONE_1:.*]] = arith.constant 1 : i32 160*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_J_NEXT:.*]] = arith.subi %[[TRIP_VAR_J]], %[[ONE_1]] : i32 161*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_VAR_J_NEXT]] to %[[TRIP_VAR_J_REF]] : !fir.ref<i32> 162*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_J:.*]] = fir.load %[[LOOP_VAR_J_REF]] : !fir.ref<i32> 163*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_J_NEXT:.*]] = arith.addi %[[LOOP_VAR_J]], %[[J_STEP]] : i32 164*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[LOOP_VAR_J_NEXT]] to %[[LOOP_VAR_J_REF]] : !fir.ref<i32> 165*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER_J]] 166*aa0e167fSKiran Chandramohan! CHECK: ^[[EXIT_J]]: 167*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_I:.*]] = fir.load %[[TRIP_VAR_I_REF]] : !fir.ref<i32> 168*aa0e167fSKiran Chandramohan! CHECK: %[[ONE_1:.*]] = arith.constant 1 : i32 169*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_I_NEXT:.*]] = arith.subi %[[TRIP_VAR_I]], %[[ONE_1]] : i32 170*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_VAR_I_NEXT]] to %[[TRIP_VAR_I_REF]] : !fir.ref<i32> 171*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_I:.*]] = fir.load %[[LOOP_VAR_I_REF]] : !fir.ref<i32> 172*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_I_NEXT:.*]] = arith.addi %[[LOOP_VAR_I]], %[[I_STEP]] : i32 173*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[LOOP_VAR_I_NEXT]] to %[[LOOP_VAR_I_REF]] : !fir.ref<i32> 174*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER_I]] 175*aa0e167fSKiran Chandramohan! CHECK: ^[[EXIT_I]]: 176*aa0e167fSKiran Chandramohan! CHECK: return 177*aa0e167fSKiran Chandramohan 178*aa0e167fSKiran Chandramohan! Test the existence of a structured loop inside an unstructured loop. 179*aa0e167fSKiran Chandramohan! Only minimal checks are inserted for the structured loop. 180*aa0e167fSKiran Chandramohansubroutine nested_structured_in_unstructured() 181*aa0e167fSKiran Chandramohan integer :: i, j 182*aa0e167fSKiran Chandramohan do i=1,100 183*aa0e167fSKiran Chandramohan do j=1,100 184*aa0e167fSKiran Chandramohan end do 185*aa0e167fSKiran Chandramohan goto 404 186*aa0e167fSKiran Chandramohan 404 continue 187*aa0e167fSKiran Chandramohan end do 188*aa0e167fSKiran Chandramohanend subroutine 189*aa0e167fSKiran Chandramohan! CHECK-LABEL: nested_structured_in_unstructured 190*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_I_REF:.*]] = fir.alloca i32 191*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_I_REF:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFnested_structured_in_unstructuredEi"} 192*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_J_REF:.*]] = fir.alloca i32 {bindc_name = "j", uniq_name = "_QFnested_structured_in_unstructuredEj"} 193*aa0e167fSKiran Chandramohan! CHECK: %[[I_START:.*]] = arith.constant 1 : i32 194*aa0e167fSKiran Chandramohan! CHECK: %[[I_END:.*]] = arith.constant 100 : i32 195*aa0e167fSKiran Chandramohan! CHECK: %[[I_STEP:.*]] = arith.constant 1 : i32 196*aa0e167fSKiran Chandramohan! CHECK: %[[TMP1:.*]] = arith.subi %[[I_END]], %[[I_START]] : i32 197*aa0e167fSKiran Chandramohan! CHECK: %[[TMP2:.*]] = arith.addi %[[TMP1]], %[[I_STEP]] : i32 198*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_COUNT:.*]] = arith.divsi %[[TMP2]], %[[I_STEP]] : i32 199*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_COUNT]] to %[[TRIP_VAR_I_REF]] : !fir.ref<i32> 200*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[I_START]] to %[[LOOP_VAR_I_REF]] : !fir.ref<i32> 201*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER:.*]] 202*aa0e167fSKiran Chandramohan! CHECK: ^[[HEADER]]: 203*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR:.*]] = fir.load %[[TRIP_VAR_I_REF]] : !fir.ref<i32> 204*aa0e167fSKiran Chandramohan! CHECK: %[[ZERO:.*]] = arith.constant 0 : i32 205*aa0e167fSKiran Chandramohan! CHECK: %[[COND:.*]] = arith.cmpi sgt, %[[TRIP_VAR]], %[[ZERO]] : i32 206*aa0e167fSKiran Chandramohan! CHECK: cf.cond_br %[[COND]], ^[[BODY:.*]], ^[[EXIT:.*]] 207*aa0e167fSKiran Chandramohan! CHECK: ^[[BODY]]: 208*aa0e167fSKiran Chandramohan! CHECK: %{{.*}} = fir.do_loop %[[J_INDEX:.*]] = %{{.*}} to %{{.*}} step %{{.*}} -> index { 209*aa0e167fSKiran Chandramohan! CHECK: %[[J_INDEX_CVT:.*]] = fir.convert %[[J_INDEX]] : (index) -> i32 210*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[J_INDEX_CVT]] to %[[LOOP_VAR_J_REF]] : !fir.ref<i32> 211*aa0e167fSKiran Chandramohan! CHECK: } 212*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_I:.*]] = fir.load %[[TRIP_VAR_I_REF]] : !fir.ref<i32> 213*aa0e167fSKiran Chandramohan! CHECK: %[[C1_3:.*]] = arith.constant 1 : i32 214*aa0e167fSKiran Chandramohan! CHECK: %[[TRIP_VAR_I_NEXT:.*]] = arith.subi %[[TRIP_VAR_I]], %[[C1_3]] : i32 215*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[TRIP_VAR_I_NEXT]] to %[[TRIP_VAR_I_REF]] : !fir.ref<i32> 216*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_I:.*]] = fir.load %[[LOOP_VAR_I_REF]] : !fir.ref<i32> 217*aa0e167fSKiran Chandramohan! CHECK: %[[LOOP_VAR_I_NEXT:.*]] = arith.addi %[[LOOP_VAR_I]], %c1_i32_0 : i32 218*aa0e167fSKiran Chandramohan! CHECK: fir.store %[[LOOP_VAR_I_NEXT]] to %[[LOOP_VAR_I_REF]] : !fir.ref<i32> 219*aa0e167fSKiran Chandramohan! CHECK: cf.br ^[[HEADER]] 220*aa0e167fSKiran Chandramohan! CHECK: ^[[EXIT]]: 221*aa0e167fSKiran Chandramohan! CHECK: return 222