blob: 4c6bd33b386ab949371180913f8f52d570b2a213 [file] [edit]
// RUN: cir-opt %s --verify-roundtrip | FileCheck %s
!s32i = !cir.int<s, 32>
!s64i = !cir.int<s, 64>
!u32i = !cir.int<u, 32>
!u64i = !cir.int<u, 64>
module {
// void empty() { }
cir.func @empty() {
cir.return
}
// CHECK: cir.func{{.*}} @empty() {
// CHECK: cir.return
// CHECK: }
// void empty() { }
cir.func no_proto @noProto() {
cir.return
}
// CHECK: cir.func no_proto @noProto() {
// CHECK: cir.return
// CHECK: }
// void voidret() { return; }
cir.func @voidret() {
cir.return
}
// CHECK: cir.func{{.*}} @voidret() {
// CHECK: cir.return
// CHECK: }
// int intfunc() { return 42; }
cir.func @intfunc() -> !s32i {
%0 = cir.const #cir.int<42> : !s32i
cir.return %0 : !s32i
}
// CHECK: cir.func{{.*}} @intfunc() -> !s32i {
// CHECK: %[[VAL:.*]] = cir.const #cir.int<42> : !s32i
// CHECK: cir.return %[[VAL]] : !s32i
// CHECK: }
// Should print/parse function aliases.
cir.func @a_empty() alias(@empty)
// CHECK: cir.func @a_empty() alias(@empty)
// Should print/parse function personality.
cir.func @personality_func() personality(@__gxx_personality_v0) {
cir.return
}
// CHECK: cir.func @personality_func() personality(@__gxx_personality_v0) {
// CHECK: cir.return
// CHECK: }
// int scopes() {
// {
// {
// return 99;
// }
// }
//}
cir.func @scopes() -> !s32i {
cir.scope {
cir.scope {
%0 = cir.const #cir.int<99> : !s32i
cir.return %0 : !s32i
}
}
cir.trap
}
// CHECK: cir.func{{.*}} @scopes() -> !s32i {
// CHECK: cir.scope {
// CHECK: cir.scope {
// CHECK: %[[VAL:.*]] = cir.const #cir.int<99> : !s32i
// CHECK: cir.return %[[VAL]] : !s32i
// CHECK: }
// CHECK: }
// CHECK: cir.trap
// CHECK: }
// long longfunc() { return 42l; }
cir.func @longfunc() -> !s64i {
%0 = cir.const #cir.int<42> : !s64i
cir.return %0 : !s64i
}
// CHECK: cir.func{{.*}} @longfunc() -> !s64i
// CHECK: %0 = cir.const #cir.int<42> : !s64i
// CHECK: cir.return %0 : !s64i
// CHECK: }
// unsigned unsignedfunc() { return 42u; }
cir.func @unsignedfunc() -> !u32i {
%0 = cir.const #cir.int<42> : !u32i
cir.return %0 : !u32i
}
// CHECK: cir.func{{.*}} @unsignedfunc() -> !u32i
// CHECK: %[[VAL:.*]] = cir.const #cir.int<42> : !u32i
// CHECK: cir.return %[[VAL]] : !u32i
// CHECK: }
// unsigned long long ullfunc() { return 42ull; }
cir.func @ullfunc() -> !u64i {
%0 = cir.const #cir.int<42> : !u64i
cir.return %0 : !u64i
}
// CHECK: cir.func{{.*}} @ullfunc() -> !u64i
// CHECK: %[[VAL:.*]] = cir.const #cir.int<42> : !u64i
// CHECK: cir.return %[[VAL:.*]] : !u64i
// CHECK: }
cir.func coroutine @coro() {
cir.coro.body {
cir.await(init, ready : {
%0 = cir.alloca "" align(1) : !cir.ptr<!cir.bool>
%1 = cir.load align(1) %0 : !cir.ptr<!cir.bool>, !cir.bool
cir.condition(%1)
}, suspend : {
cir.yield
}, resume : {
cir.yield
},)
cir.yield
}
cir.return
}
// CHECK: cir.func{{.*}} coroutine @coro()
cir.func builtin @builtin() {
cir.return
}
// CHECK: cir.func{{.*}} builtin @builtin()
cir.func @global_ctor_func() global_ctor {
cir.return
}
// CHECK: cir.func @global_ctor_func() global_ctor {
// CHECK: cir.return
// CHECK: }
cir.func @global_ctor_with_priority() global_ctor(200) {
cir.return
}
// CHECK: cir.func @global_ctor_with_priority() global_ctor(200) {
// CHECK: cir.return
// CHECK: }
cir.func @global_dtor_func() global_dtor {
cir.return
}
// CHECK: cir.func @global_dtor_func() global_dtor {
// CHECK: cir.return
// CHECK: }
cir.func @global_dtor_with_priority() global_dtor(201) {
cir.return
}
// CHECK: cir.func @global_dtor_with_priority() global_dtor(201) {
// CHECK: cir.return
// CHECK: }
}
!rec_Foo = !cir.struct<"Foo" {!s32i}>
cir.func @Foo_default() func_info<#cir.cxx_ctor<!rec_Foo, default>> {
cir.return
}
// CHECK: cir.func @Foo_default() func_info<#cir.cxx_ctor<!rec_Foo, default>> {
// CHECK: cir.return
// CHECK: }
cir.func @Foo_trivial_copy() func_info<#cir.cxx_ctor<!rec_Foo, copy, trivial true>> {
cir.return
}
// CHECK: cir.func @Foo_trivial_copy() func_info<#cir.cxx_ctor<!rec_Foo, copy, trivial true>> {
// CHECK: cir.return
// CHECK: }
cir.func @Foo_destructor() func_info<#cir.cxx_dtor<!rec_Foo>> {
cir.return
}
// CHECK: cir.func @Foo_destructor() func_info<#cir.cxx_dtor<!rec_Foo>> {
// CHECK: cir.return
// CHECK: }
cir.func @Foo_move_assign() func_info<#cir.cxx_assign<!rec_Foo, move>> {
cir.return
}
// CHECK: cir.func @Foo_move_assign() func_info<#cir.cxx_assign<!rec_Foo, move>> {
// CHECK: cir.return
// CHECK: }
cir.func @has_attrs() attributes {foo, baz = 5, floof = "flop"} {
cir.return
}
// CHECK: cir.func @has_attrs() attributes {baz = 5 : i64{{.*}}, floof = "flop", foo} {
// CHECK: cir.return
// CHECK: }