aboutsummaryrefslogtreecommitdiff
path: root/clang/test/CIR/IR/func.cir
blob: 5636194d13ec244c3405f1bbfd220918937d61e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// RUN: cir-opt %s | 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 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)

// 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: }
}