brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · d8906ab Raw
197 lines · plain
1// RUN: cir-opt %s --verify-roundtrip | FileCheck %s2 3!s32i = !cir.int<s, 32>4!s64i = !cir.int<s, 64>5!u32i = !cir.int<u, 32>6!u64i = !cir.int<u, 64>7 8module {9// void empty() { }10cir.func @empty() {11  cir.return12}13// CHECK: cir.func{{.*}} @empty() {14// CHECK:   cir.return15// CHECK: }16 17// void empty() { }18cir.func no_proto @noProto() {19  cir.return20}21// CHECK: cir.func no_proto @noProto() {22// CHECK:   cir.return23// CHECK: }24 25// void voidret() { return; }26cir.func @voidret() {27  cir.return28}29// CHECK: cir.func{{.*}} @voidret() {30// CHECK:   cir.return31// CHECK: }32 33// int intfunc() { return 42; }34cir.func @intfunc() -> !s32i {35  %0 = cir.const #cir.int<42> : !s32i36  cir.return %0 : !s32i37}38// CHECK: cir.func{{.*}} @intfunc() -> !s32i {39// CHECK:   %[[VAL:.*]] = cir.const #cir.int<42> : !s32i40// CHECK:   cir.return %[[VAL]] : !s32i41// CHECK: }42 43// Should print/parse function aliases.44cir.func @a_empty() alias(@empty)45// CHECK: cir.func @a_empty() alias(@empty)46 47// int scopes() {48//  {49//    {50//      return 99;51//    }52//  }53//}54cir.func @scopes() -> !s32i {55  cir.scope {56    cir.scope {57      %0 = cir.const #cir.int<99> : !s32i58      cir.return %0 : !s32i59    }60  }61  cir.trap62}63// CHECK: cir.func{{.*}} @scopes() -> !s32i {64// CHECK:   cir.scope {65// CHECK:     cir.scope {66// CHECK:       %[[VAL:.*]] = cir.const #cir.int<99> : !s32i67// CHECK:       cir.return %[[VAL]] : !s32i68// CHECK:     }69// CHECK:   }70// CHECK:   cir.trap71// CHECK: }72 73// long longfunc() { return 42l; }74cir.func @longfunc() -> !s64i {75  %0 = cir.const #cir.int<42> : !s64i76  cir.return %0 : !s64i77}78// CHECK: cir.func{{.*}} @longfunc() -> !s64i79// CHECK:   %0 = cir.const #cir.int<42> : !s64i80// CHECK:   cir.return %0 : !s64i81// CHECK: }82 83// unsigned unsignedfunc() { return 42u; }84cir.func @unsignedfunc() -> !u32i {85  %0 = cir.const #cir.int<42> : !u32i86  cir.return %0 : !u32i87}88// CHECK: cir.func{{.*}} @unsignedfunc() -> !u32i89// CHECK:   %[[VAL:.*]] = cir.const #cir.int<42> : !u32i90// CHECK:   cir.return %[[VAL]] : !u32i91// CHECK: }92 93// unsigned long long ullfunc() { return 42ull; }94cir.func @ullfunc() -> !u64i {95  %0 = cir.const #cir.int<42> : !u64i96  cir.return %0 : !u64i97}98// CHECK: cir.func{{.*}} @ullfunc() -> !u64i99// CHECK:   %[[VAL:.*]] = cir.const #cir.int<42> : !u64i100// CHECK:   cir.return %[[VAL:.*]] : !u64i101// CHECK: }102 103cir.func coroutine @coro() {104  cir.await(init, ready : {105    %0 = cir.alloca !cir.bool, !cir.ptr<!cir.bool>, [""] {alignment = 1 : i64}106    %1 = cir.load align(1) %0 : !cir.ptr<!cir.bool>, !cir.bool107    cir.condition(%1)108  }, suspend : {109    cir.yield110  }, resume : {111    cir.yield112  },)113  cir.return114}115// CHECK: cir.func{{.*}} coroutine @coro()116 117cir.func builtin @builtin() {118  cir.return119}120// CHECK: cir.func{{.*}} builtin @builtin()121 122cir.func @global_ctor_func() global_ctor {123  cir.return124}125 126// CHECK: cir.func @global_ctor_func() global_ctor {127// CHECK:   cir.return128// CHECK: }129 130cir.func @global_ctor_with_priority() global_ctor(200) {131  cir.return132}133 134// CHECK: cir.func @global_ctor_with_priority() global_ctor(200) {135// CHECK:   cir.return136// CHECK: }137 138cir.func @global_dtor_func() global_dtor {139  cir.return140}141 142// CHECK: cir.func @global_dtor_func() global_dtor {143// CHECK:   cir.return144// CHECK: }145 146cir.func @global_dtor_with_priority() global_dtor(201) {147  cir.return148}149 150// CHECK: cir.func @global_dtor_with_priority() global_dtor(201) {151// CHECK:   cir.return152// CHECK: }153 154}155 156!rec_Foo = !cir.record<struct "Foo" {!s32i}>157 158cir.func @Foo_default() special_member<#cir.cxx_ctor<!rec_Foo, default>> {159  cir.return160}161 162// CHECK: cir.func @Foo_default() special_member<#cir.cxx_ctor<!rec_Foo, default>> {163// CHECK:   cir.return164// CHECK: }165 166cir.func @Foo_trivial_copy() special_member<#cir.cxx_ctor<!rec_Foo, copy, trivial true>> {167  cir.return168}169 170// CHECK: cir.func @Foo_trivial_copy() special_member<#cir.cxx_ctor<!rec_Foo, copy, trivial true>> {171// CHECK:   cir.return172// CHECK: }173 174cir.func @Foo_destructor() special_member<#cir.cxx_dtor<!rec_Foo>> {175  cir.return176}177 178// CHECK: cir.func @Foo_destructor() special_member<#cir.cxx_dtor<!rec_Foo>> {179// CHECK:   cir.return180// CHECK: }181 182cir.func @Foo_move_assign() special_member<#cir.cxx_assign<!rec_Foo, move>> {183  cir.return184}185 186// CHECK: cir.func @Foo_move_assign() special_member<#cir.cxx_assign<!rec_Foo, move>> {187// CHECK:   cir.return188// CHECK: }189 190cir.func @has_attrs() attributes {foo, baz = 5, floof = "flop"} {191  cir.return192}193 194// CHECK: cir.func @has_attrs() attributes {baz = 5 : i64{{.*}}, floof = "flop", foo} {195// CHECK:   cir.return196// CHECK: }197