114 lines · plain
1 // RUN: cir-opt %s -cir-hoist-allocas -o - | FileCheck %s2 3!s32i = !cir.int<s, 32>4#true = #cir.bool<true> : !cir.bool5 6module {7 cir.func @l1() {8 cir.scope {9 %0 = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init] {alignment = 4 : i64}10 %1 = cir.const #cir.int<0> : !s32i11 cir.store %1, %0 : !s32i, !cir.ptr<!s32i>12 cir.for : cond {13 %2 = cir.const #true14 cir.condition(%2)15 } body {16 cir.yield17 } step {18 cir.yield19 }20 }21 cir.return22 }23 // CHECK: cir.func{{.*}} @l124 // CHECK-NEXT: %[[I:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init] {alignment = 4 : i64}25 // CHECK-NEXT: cir.scope {26 // CHECK-NEXT: %[[ZERO:.*]] = cir.const #cir.int<0> : !s32i27 // CHECK-NEXT: cir.store %[[ZERO]], %[[I]] : !s32i, !cir.ptr<!s32i>28 // CHECK-NEXT: cir.for : cond {29 // CHECK-NEXT: %[[TRUE:.*]] = cir.const #true30 // CHECK-NEXT: cir.condition(%[[TRUE]])31 // CHECK-NEXT: } body {32 // CHECK-NEXT: cir.yield33 // CHECK-NEXT: } step {34 // CHECK-NEXT: cir.yield35 // CHECK-NEXT: }36 // CHECK-NEXT: }37 // CHECK-NEXT: cir.return38 // CHECK-NEXT: }39 40 cir.func @l2() {41 cir.scope {42 cir.for : cond {43 %0 = cir.const #true44 cir.condition(%0)45 } body {46 cir.scope {47 %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init] {alignment = 4 : i64}48 %2 = cir.const #cir.int<0> : !s32i49 cir.store %2, %1 : !s32i, !cir.ptr<!s32i>50 }51 cir.yield52 } step {53 cir.yield54 }55 }56 cir.return57 }58 // CHECK: cir.func{{.*}} @l259 // CHECK-NEXT: %[[I:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init] {alignment = 4 : i64}60 // CHECK-NEXT: cir.scope {61 // CHECK-NEXT: cir.for : cond {62 // CHECK-NEXT: %[[TRUE:.*]] = cir.const #true63 // CHECK-NEXT: cir.condition(%[[TRUE]])64 // CHECK-NEXT: } body {65 // CHECK-NEXT: cir.scope {66 // CHECK-NEXT: %[[ZERO:.*]] = cir.const #cir.int<0> : !s32i67 // CHECK-NEXT: cir.store %[[ZERO]], %[[I]] : !s32i, !cir.ptr<!s32i>68 // CHECK-NEXT: }69 // CHECK-NEXT: cir.yield70 // CHECK-NEXT: } step {71 // CHECK-NEXT: cir.yield72 // CHECK-NEXT: }73 // CHECK-NEXT: }74 // CHECK-NEXT: cir.return75 // CHECK-NEXT: }76 77 cir.func @l3() {78 cir.scope {79 cir.for : cond {80 %0 = cir.const #true81 cir.condition(%0)82 } body {83 cir.scope {84 %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init, const] {alignment = 4 : i64}85 %2 = cir.const #cir.int<0> : !s32i86 cir.store %2, %1 : !s32i, !cir.ptr<!s32i>87 }88 cir.yield89 } step {90 cir.yield91 }92 }93 cir.return94 }95 // CHECK: cir.func{{.*}} @l396 // CHECK-NEXT: %[[I:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init] {alignment = 4 : i64}97 // CHECK-NEXT: cir.scope {98 // CHECK-NEXT: cir.for : cond {99 // CHECK-NEXT: %[[TRUE:.*]] = cir.const #true100 // CHECK-NEXT: cir.condition(%[[TRUE]])101 // CHECK-NEXT: } body {102 // CHECK-NEXT: cir.scope {103 // CHECK-NEXT: %[[ZERO:.*]] = cir.const #cir.int<0> : !s32i104 // CHECK-NEXT: cir.store %[[ZERO]], %[[I]] : !s32i, !cir.ptr<!s32i>105 // CHECK-NEXT: }106 // CHECK-NEXT: cir.yield107 // CHECK-NEXT: } step {108 // CHECK-NEXT: cir.yield109 // CHECK-NEXT: }110 // CHECK-NEXT: }111 // CHECK-NEXT: cir.return112 // CHECK-NEXT: }113}114