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