Skip to content

Commit a635a7d

Browse files
committed
[CIR] Upstream support for type aliases and clean up tests
CIR uses aliases for standard integer types and void. This change adds upstream support for those aliases and updates existing tests. This also updates a few tests that were out of step with the canonicalize pass running.
1 parent 8e773d8 commit a635a7d

File tree

20 files changed

+408
-398
lines changed

20 files changed

+408
-398
lines changed

clang/lib/CIR/Dialect/IR/CIRDialect.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,20 @@ struct CIROpAsmDialectInterface : public OpAsmDialectInterface {
3131
using OpAsmDialectInterface::OpAsmDialectInterface;
3232

3333
AliasResult getAlias(Type type, raw_ostream &os) const final {
34+
if (auto intType = dyn_cast<cir::IntType>(type)) {
35+
// We only provide alias for standard integer types (i.e. integer types
36+
// whose width is a power of 2 and at least 8).
37+
unsigned width = intType.getWidth();
38+
if (width < 8 || !llvm::isPowerOf2_32(width))
39+
return AliasResult::NoAlias;
40+
os << intType.getAlias();
41+
return AliasResult::OverridableAlias;
42+
}
43+
if (auto voidType = dyn_cast<cir::VoidType>(type)) {
44+
os << voidType.getAlias();
45+
return AliasResult::OverridableAlias;
46+
}
47+
3448
return AliasResult::NoAlias;
3549
}
3650

clang/test/CIR/CodeGen/array.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,41 @@
11
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o - 2>&1 | FileCheck %s
22

33
int a[10];
4-
// CHECK: cir.global external @a : !cir.array<!cir.int<s, 32> x 10>
4+
// CHECK: cir.global external @a : !cir.array<!s32i x 10>
55

66
int aa[10][5];
7-
// CHECK: cir.global external @aa : !cir.array<!cir.array<!cir.int<s, 32> x 5> x 10>
7+
// CHECK: cir.global external @aa : !cir.array<!cir.array<!s32i x 5> x 10>
88

99
extern int b[10];
10-
// CHECK: cir.global external @b : !cir.array<!cir.int<s, 32> x 10>
10+
// CHECK: cir.global external @b : !cir.array<!s32i x 10>
1111

1212
extern int bb[10][5];
13-
// CHECK: cir.global external @bb : !cir.array<!cir.array<!cir.int<s, 32> x 5> x 10>
13+
// CHECK: cir.global external @bb : !cir.array<!cir.array<!s32i x 5> x 10>
1414

1515
int c[10] = {};
16-
// CHECK: cir.global external @c = #cir.zero : !cir.array<!cir.int<s, 32> x 10>
16+
// CHECK: cir.global external @c = #cir.zero : !cir.array<!s32i x 10>
1717

1818
int d[3] = {1, 2, 3};
19-
// CHECK: cir.global external @d = #cir.const_array<[#cir.int<1> : !cir.int<s, 32>, #cir.int<2> : !cir.int<s, 32>, #cir.int<3> : !cir.int<s, 32>]> : !cir.array<!cir.int<s, 32> x 3>
19+
// CHECK: cir.global external @d = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i]> : !cir.array<!s32i x 3>
2020

2121
int dd[3][2] = {{1, 2}, {3, 4}, {5, 6}};
22-
// CHECK: cir.global external @dd = #cir.const_array<[#cir.const_array<[#cir.int<1> : !cir.int<s, 32>, #cir.int<2> : !cir.int<s, 32>]> : !cir.array<!cir.int<s, 32> x 2>, #cir.const_array<[#cir.int<3> : !cir.int<s, 32>, #cir.int<4> : !cir.int<s, 32>]> : !cir.array<!cir.int<s, 32> x 2>, #cir.const_array<[#cir.int<5> : !cir.int<s, 32>, #cir.int<6> : !cir.int<s, 32>]> : !cir.array<!cir.int<s, 32> x 2>]> : !cir.array<!cir.array<!cir.int<s, 32> x 2> x 3>
22+
// CHECK: cir.global external @dd = #cir.const_array<[#cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i]> : !cir.array<!s32i x 2>, #cir.const_array<[#cir.int<3> : !s32i, #cir.int<4> : !s32i]> : !cir.array<!s32i x 2>, #cir.const_array<[#cir.int<5> : !s32i, #cir.int<6> : !s32i]> : !cir.array<!s32i x 2>]> : !cir.array<!cir.array<!s32i x 2> x 3>
2323

2424
int e[10] = {1, 2};
25-
// CHECK: cir.global external @e = #cir.const_array<[#cir.int<1> : !cir.int<s, 32>, #cir.int<2> : !cir.int<s, 32>], trailing_zeros> : !cir.array<!cir.int<s, 32> x 10>
25+
// CHECK: cir.global external @e = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i], trailing_zeros> : !cir.array<!s32i x 10>
2626

2727
int f[5] = {1, 2};
28-
// CHECK: cir.global external @f = #cir.const_array<[#cir.int<1> : !cir.int<s, 32>, #cir.int<2> : !cir.int<s, 32>, #cir.int<0> : !cir.int<s, 32>, #cir.int<0> : !cir.int<s, 32>, #cir.int<0> : !cir.int<s, 32>]> : !cir.array<!cir.int<s, 32> x 5>
28+
// CHECK: cir.global external @f = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<0> : !s32i, #cir.int<0> : !s32i, #cir.int<0> : !s32i]> : !cir.array<!s32i x 5>
2929

3030
void func() {
3131
int l[10];
32-
// CHECK: %[[ARR:.*]] = cir.alloca !cir.array<!cir.int<s, 32> x 10>, !cir.ptr<!cir.array<!cir.int<s, 32> x 10>>, ["l"]
32+
// CHECK: %[[ARR:.*]] = cir.alloca !cir.array<!s32i x 10>, !cir.ptr<!cir.array<!s32i x 10>>, ["l"]
3333
}
3434

3535
void func2(int p[10]) {}
36-
// CHECK: cir.func @func2(%arg0: !cir.ptr<!cir.int<s, 32>>
37-
// CHECK: cir.alloca !cir.ptr<!cir.int<s, 32>>, !cir.ptr<!cir.ptr<!cir.int<s, 32>>>, ["p", init]
36+
// CHECK: cir.func @func2(%arg0: !cir.ptr<!s32i>
37+
// CHECK: cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["p", init]
3838

3939
void func3(int pp[10][5]) {}
40-
// CHECK: cir.func @func3(%arg0: !cir.ptr<!cir.array<!cir.int<s, 32> x 5>>
41-
// CHECK: cir.alloca !cir.ptr<!cir.array<!cir.int<s, 32> x 5>>, !cir.ptr<!cir.ptr<!cir.array<!cir.int<s, 32> x 5>>>
40+
// CHECK: cir.func @func3(%arg0: !cir.ptr<!cir.array<!s32i x 5>>
41+
// CHECK: cir.alloca !cir.ptr<!cir.array<!s32i x 5>>, !cir.ptr<!cir.ptr<!cir.array<!s32i x 5>>>

clang/test/CIR/CodeGen/basic.c

Lines changed: 24 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,15 @@ int f1(int i) {
1313
}
1414

1515
// CIR: module
16-
// CIR-NEXT: cir.func @f1(%arg0: !cir.int<s, 32> loc({{.*}})) -> !cir.int<s, 32>
17-
// CIR-NEXT: %[[I_PTR:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["i", init] {alignment = 4 : i64}
18-
// CIR-NEXT: %[[RV:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["__retval"] {alignment = 4 : i64}
19-
// CIR-NEXT: cir.store %arg0, %[[I_PTR]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
20-
// CIR-NEXT: %[[I_IGNORED:.*]] = cir.load %[[I_PTR]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
21-
// CIR-NEXT: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
22-
// CIR-NEXT: cir.store %[[I]], %[[RV]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
23-
// CIR-NEXT: cir.br ^[[BB1:[^ ]+]]
24-
// CIR-NEXT: ^[[BB1]]:
25-
// CIR-NEXT: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
26-
// CIR-NEXT: cir.return %[[R]] : !cir.int<s, 32>
16+
// CIR-NEXT: cir.func @f1(%arg0: !s32i loc({{.*}})) -> !s32i
17+
// CIR-NEXT: %[[I_PTR:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init] {alignment = 4 : i64}
18+
// CIR-NEXT: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
19+
// CIR-NEXT: cir.store %arg0, %[[I_PTR]] : !s32i, !cir.ptr<!s32i>
20+
// CIR-NEXT: %[[I_IGNORED:.*]] = cir.load %[[I_PTR]] : !cir.ptr<!s32i>, !s32i
21+
// CIR-NEXT: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr<!s32i>, !s32i
22+
// CIR-NEXT: cir.store %[[I]], %[[RV]] : !s32i, !cir.ptr<!s32i>
23+
// CIR-NEXT: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!s32i>, !s32i
24+
// CIR-NEXT: cir.return %[[R]] : !s32i
2725

2826
// LLVM: define i32 @f1(i32 %[[IP:.*]])
2927
// LLVM-NEXT: %[[I_PTR:.*]] = alloca i32, i64 1, align 4
@@ -32,8 +30,6 @@ int f1(int i) {
3230
// LLVM-NEXT: %[[I_IGNORED:.*]] = load i32, ptr %[[I_PTR]], align 4
3331
// LLVM-NEXT: %[[I:.*]] = load i32, ptr %[[I_PTR]], align 4
3432
// LLVM-NEXT: store i32 %[[I]], ptr %[[RV]], align 4
35-
// LLVM-NEXT: br label %[[BB1:.*]]
36-
// LLVM: [[BB1]]:
3733
// LLVM-NEXT: %[[R:.*]] = load i32, ptr %[[RV]], align 4
3834
// LLVM-NEXT: ret i32 %[[R]]
3935

@@ -47,20 +43,16 @@ int f1(int i) {
4743

4844
int f2(void) { return 3; }
4945

50-
// CIR: cir.func @f2() -> !cir.int<s, 32>
51-
// CIR-NEXT: %[[RV:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["__retval"] {alignment = 4 : i64}
52-
// CIR-NEXT: %[[THREE:.*]] = cir.const #cir.int<3> : !cir.int<s, 32>
53-
// CIR-NEXT: cir.store %[[THREE]], %[[RV]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
54-
// CIR-NEXT: cir.br ^[[BB1:[^ ]+]]
55-
// CIR-NEXT: ^[[BB1]]:
56-
// CIR-NEXT: %[[R:.*]] = cir.load %0 : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
57-
// CIR-NEXT: cir.return %[[R]] : !cir.int<s, 32>
46+
// CIR: cir.func @f2() -> !s32i
47+
// CIR-NEXT: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
48+
// CIR-NEXT: %[[THREE:.*]] = cir.const #cir.int<3> : !s32i
49+
// CIR-NEXT: cir.store %[[THREE]], %[[RV]] : !s32i, !cir.ptr<!s32i>
50+
// CIR-NEXT: %[[R:.*]] = cir.load %0 : !cir.ptr<!s32i>, !s32i
51+
// CIR-NEXT: cir.return %[[R]] : !s32i
5852

5953
// LLVM: define i32 @f2()
6054
// LLVM-NEXT: %[[RV:.*]] = alloca i32, i64 1, align 4
6155
// LLVM-NEXT: store i32 3, ptr %[[RV]], align 4
62-
// LLVM-NEXT: br label %[[BB1:.*]]
63-
// LLVM: [[BB1]]:
6456
// LLVM-NEXT: %[[R:.*]] = load i32, ptr %[[RV]], align 4
6557
// LLVM-NEXT: ret i32 %[[R]]
6658

@@ -73,26 +65,22 @@ int f3(void) {
7365
return i;
7466
}
7567

76-
// CIR: cir.func @f3() -> !cir.int<s, 32>
77-
// CIR-NEXT: %[[RV:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["__retval"] {alignment = 4 : i64}
78-
// CIR-NEXT: %[[I_PTR:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["i", init] {alignment = 4 : i64}
79-
// CIR-NEXT: %[[THREE:.*]] = cir.const #cir.int<3> : !cir.int<s, 32>
80-
// CIR-NEXT: cir.store %[[THREE]], %[[I_PTR]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
81-
// CIR-NEXT: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
82-
// CIR-NEXT: cir.store %[[I]], %[[RV]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
83-
// CIR-NEXT: cir.br ^[[BB1:[^ ]+]]
84-
// CIR-NEXT: ^[[BB1]]:
85-
// CIR-NEXT: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
86-
// CIR-NEXT: cir.return %[[R]] : !cir.int<s, 32>
68+
// CIR: cir.func @f3() -> !s32i
69+
// CIR-NEXT: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
70+
// CIR-NEXT: %[[I_PTR:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init] {alignment = 4 : i64}
71+
// CIR-NEXT: %[[THREE:.*]] = cir.const #cir.int<3> : !s32i
72+
// CIR-NEXT: cir.store %[[THREE]], %[[I_PTR]] : !s32i, !cir.ptr<!s32i>
73+
// CIR-NEXT: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr<!s32i>, !s32i
74+
// CIR-NEXT: cir.store %[[I]], %[[RV]] : !s32i, !cir.ptr<!s32i>
75+
// CIR-NEXT: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!s32i>, !s32i
76+
// CIR-NEXT: cir.return %[[R]] : !s32i
8777

8878
// LLVM: define i32 @f3()
8979
// LLVM-NEXT: %[[RV:.*]] = alloca i32, i64 1, align 4
9080
// LLVM-NEXT: %[[I_PTR:.*]] = alloca i32, i64 1, align 4
9181
// LLVM-NEXT: store i32 3, ptr %[[I_PTR]], align 4
9282
// LLVM-NEXT: %[[I:.*]] = load i32, ptr %[[I_PTR]], align 4
9383
// LLVM-NEXT: store i32 %[[I]], ptr %[[RV]], align 4
94-
// LLVM-NEXT: br label %[[BB1:.*]]
95-
// LLVM: [[BB1]]:
9684
// LLVM-NEXT: %[[R:.*]] = load i32, ptr %[[RV]], align 4
9785
// LLVM-NEXT: ret i32 %[[R]]
9886

clang/test/CIR/CodeGen/basic.cpp

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,51 +6,51 @@ int f1() {
66
}
77

88
// CHECK: module
9-
// CHECK: cir.func @f1() -> !cir.int<s, 32>
10-
// CHECK: %[[RV:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["__retval"] {alignment = 4 : i64}
11-
// CHECK: %[[I_PTR:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["i"] {alignment = 4 : i64}
12-
// CHECK: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
13-
// CHECK: cir.store %[[I]], %[[RV]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
14-
// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
15-
// CHECK: cir.return %[[R]] : !cir.int<s, 32>
9+
// CHECK: cir.func @f1() -> !s32i
10+
// CHECK: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
11+
// CHECK: %[[I_PTR:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["i"] {alignment = 4 : i64}
12+
// CHECK: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr<!s32i>, !s32i
13+
// CHECK: cir.store %[[I]], %[[RV]] : !s32i, !cir.ptr<!s32i>
14+
// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!s32i>, !s32i
15+
// CHECK: cir.return %[[R]] : !s32i
1616

1717
int f2() {
1818
const int i = 2;
1919
return i;
2020
}
2121

22-
// CHECK: cir.func @f2() -> !cir.int<s, 32>
23-
// CHECK: %[[RV:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["__retval"] {alignment = 4 : i64}
24-
// CHECK: %[[I_PTR:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["i", init, const] {alignment = 4 : i64}
25-
// CHECK: %[[TWO:.*]] = cir.const #cir.int<2> : !cir.int<s, 32>
26-
// CHECK: cir.store %[[TWO]], %[[I_PTR]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
27-
// CHECK: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
28-
// CHECK: cir.store %[[I]], %[[RV]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
29-
// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
30-
// CHECK: cir.return %[[R]] : !cir.int<s, 32>
22+
// CHECK: cir.func @f2() -> !s32i
23+
// CHECK: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
24+
// CHECK: %[[I_PTR:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init, const] {alignment = 4 : i64}
25+
// CHECK: %[[TWO:.*]] = cir.const #cir.int<2> : !s32i
26+
// CHECK: cir.store %[[TWO]], %[[I_PTR]] : !s32i, !cir.ptr<!s32i>
27+
// CHECK: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr<!s32i>, !s32i
28+
// CHECK: cir.store %[[I]], %[[RV]] : !s32i, !cir.ptr<!s32i>
29+
// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!s32i>, !s32i
30+
// CHECK: cir.return %[[R]] : !s32i
3131

3232
int f3(int i) {
3333
return i;
3434
}
3535

36-
// CHECK: cir.func @f3(%[[ARG:.*]]: !cir.int<s, 32> loc({{.*}})) -> !cir.int<s, 32>
37-
// CHECK: %[[ARG_ALLOCA:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["i", init] {alignment = 4 : i64}
38-
// CHECK: %[[RV:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["__retval"] {alignment = 4 : i64}
39-
// CHECK: cir.store %[[ARG]], %[[ARG_ALLOCA]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
40-
// CHECK: %[[ARG_VAL:.*]] = cir.load %[[ARG_ALLOCA]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
41-
// CHECK: cir.store %[[ARG_VAL]], %[[RV]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
42-
// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
43-
// CHECK: cir.return %[[R]] : !cir.int<s, 32>
36+
// CHECK: cir.func @f3(%[[ARG:.*]]: !s32i loc({{.*}})) -> !s32i
37+
// CHECK: %[[ARG_ALLOCA:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init] {alignment = 4 : i64}
38+
// CHECK: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
39+
// CHECK: cir.store %[[ARG]], %[[ARG_ALLOCA]] : !s32i, !cir.ptr<!s32i>
40+
// CHECK: %[[ARG_VAL:.*]] = cir.load %[[ARG_ALLOCA]] : !cir.ptr<!s32i>, !s32i
41+
// CHECK: cir.store %[[ARG_VAL]], %[[RV]] : !s32i, !cir.ptr<!s32i>
42+
// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!s32i>, !s32i
43+
// CHECK: cir.return %[[R]] : !s32i
4444

4545
int f4(const int i) {
4646
return i;
4747
}
4848

49-
// CHECK: cir.func @f4(%[[ARG:.*]]: !cir.int<s, 32> loc({{.*}})) -> !cir.int<s, 32>
50-
// CHECK: %[[ARG_ALLOCA:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["i", init, const] {alignment = 4 : i64}
51-
// CHECK: %[[RV:.*]] = cir.alloca !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>, ["__retval"] {alignment = 4 : i64}
52-
// CHECK: cir.store %[[ARG]], %[[ARG_ALLOCA]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
53-
// CHECK: %[[ARG_VAL:.*]] = cir.load %[[ARG_ALLOCA]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
54-
// CHECK: cir.store %[[ARG_VAL]], %[[RV]] : !cir.int<s, 32>, !cir.ptr<!cir.int<s, 32>>
55-
// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!cir.int<s, 32>>, !cir.int<s, 32>
56-
// CHECK: cir.return %[[R]] : !cir.int<s, 32>
49+
// CHECK: cir.func @f4(%[[ARG:.*]]: !s32i loc({{.*}})) -> !s32i
50+
// CHECK: %[[ARG_ALLOCA:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["i", init, const] {alignment = 4 : i64}
51+
// CHECK: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["__retval"] {alignment = 4 : i64}
52+
// CHECK: cir.store %[[ARG]], %[[ARG_ALLOCA]] : !s32i, !cir.ptr<!s32i>
53+
// CHECK: %[[ARG_VAL:.*]] = cir.load %[[ARG_ALLOCA]] : !cir.ptr<!s32i>, !s32i
54+
// CHECK: cir.store %[[ARG_VAL]], %[[RV]] : !s32i, !cir.ptr<!s32i>
55+
// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr<!s32i>, !s32i
56+
// CHECK: cir.return %[[R]] : !s32i

clang/test/CIR/CodeGen/cast.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ unsigned char cxxstaticcast_0(unsigned int x) {
88
}
99

1010
// CIR: cir.func @cxxstaticcast_0
11-
// CIR: %[[XPTR:[0-9]+]] = cir.alloca !cir.int<u, 32>, !cir.ptr<!cir.int<u, 32>>, ["x", init] {alignment = 4 : i64}
12-
// CIR: %[[RV:[0-9]+]] = cir.alloca !cir.int<u, 8>, !cir.ptr<!cir.int<u, 8>>, ["__retval"] {alignment = 1 : i64}
13-
// CIR: cir.store %arg0, %[[XPTR]] : !cir.int<u, 32>, !cir.ptr<!cir.int<u, 32>>
14-
// CIR: %[[XVAL:[0-9]+]] = cir.load %[[XPTR]] : !cir.ptr<!cir.int<u, 32>>, !cir.int<u, 32>
15-
// CIR: %[[CASTED:[0-9]+]] = cir.cast(integral, %[[XVAL]] : !cir.int<u, 32>), !cir.int<u, 8>
16-
// CIR: cir.store %[[CASTED]], %[[RV]] : !cir.int<u, 8>, !cir.ptr<!cir.int<u, 8>>
17-
// CIR: %[[R:[0-9]+]] = cir.load %1 : !cir.ptr<!cir.int<u, 8>>, !cir.int<u, 8>
18-
// CIR: cir.return %[[R]] : !cir.int<u, 8>
11+
// CIR: %[[XPTR:[0-9]+]] = cir.alloca !u32i, !cir.ptr<!u32i>, ["x", init] {alignment = 4 : i64}
12+
// CIR: %[[RV:[0-9]+]] = cir.alloca !u8i, !cir.ptr<!u8i>, ["__retval"] {alignment = 1 : i64}
13+
// CIR: cir.store %arg0, %[[XPTR]] : !u32i, !cir.ptr<!u32i>
14+
// CIR: %[[XVAL:[0-9]+]] = cir.load %[[XPTR]] : !cir.ptr<!u32i>, !u32i
15+
// CIR: %[[CASTED:[0-9]+]] = cir.cast(integral, %[[XVAL]] : !u32i), !u8i
16+
// CIR: cir.store %[[CASTED]], %[[RV]] : !u8i, !cir.ptr<!u8i>
17+
// CIR: %[[R:[0-9]+]] = cir.load %1 : !cir.ptr<!u8i>, !u8i
18+
// CIR: cir.return %[[R]] : !u8i
1919
// CIR: }
2020

2121
// LLVM: define i8 @cxxstaticcast_0(i32 %{{[0-9]+}})
@@ -31,41 +31,41 @@ int cStyleCasts_0(unsigned x1, int x2, float x3, short x4, double x5) {
3131
// LLVM: define i32 @cStyleCasts_0
3232

3333
char a = (char)x1; // truncate
34-
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int<u, 32>), !cir.int<s, 8>
34+
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !u32i), !s8i
3535
// LLVM: %{{[0-9]+}} = trunc i32 %{{[0-9]+}} to i8
3636

3737
short b = (short)x2; // truncate with sign
38-
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int<s, 32>), !cir.int<s, 16>
38+
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !s32i), !s16i
3939
// LLVM: %{{[0-9]+}} = trunc i32 %{{[0-9]+}} to i16
4040

4141
long long c = (long long)x1; // zero extend
42-
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int<u, 32>), !cir.int<s, 64>
42+
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !u32i), !s64i
4343
// LLVM: %{{[0-9]+}} = zext i32 %{{[0-9]+}} to i64
4444

4545
long long d = (long long)x2; // sign extend
46-
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int<s, 32>), !cir.int<s, 64>
46+
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !s32i), !s64i
4747
// LLVM: %{{[0-9]+}} = sext i32 %{{[0-9]+}} to i64
4848

4949
unsigned ui = (unsigned)x2; // sign drop
50-
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int<s, 32>), !cir.int<u, 32>
50+
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !s32i), !u32i
5151

5252
int si = (int)x1; // sign add
53-
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int<u, 32>), !cir.int<s, 32>
53+
// CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !u32i), !s32i
5454

5555
bool ib;
5656
int bi = (int)ib; // bool to int
57-
// CIR: %{{[0-9]+}} = cir.cast(bool_to_int, %{{[0-9]+}} : !cir.bool), !cir.int<s, 32>
57+
// CIR: %{{[0-9]+}} = cir.cast(bool_to_int, %{{[0-9]+}} : !cir.bool), !s32i
5858
// LLVM: %{{[0-9]+}} = zext i1 %{{[0-9]+}} to i32
5959

6060
#ifdef CIR_ONLY
6161
bool b2 = x2; // int to bool
62-
// CIR: %{{[0-9]+}} = cir.cast(int_to_bool, %{{[0-9]+}} : !cir.int<s, 32>), !cir.bool
62+
// CIR: %{{[0-9]+}} = cir.cast(int_to_bool, %{{[0-9]+}} : !s32i), !cir.bool
6363
#endif
6464

6565
#ifdef CIR_ONLY
6666
void *p;
6767
bool b3 = p; // ptr to bool
68-
// CIR: %{{[0-9]+}} = cir.cast(ptr_to_bool, %{{[0-9]+}} : !cir.ptr<!cir.void>), !cir.bool
68+
// CIR: %{{[0-9]+}} = cir.cast(ptr_to_bool, %{{[0-9]+}} : !cir.ptr<!void>), !cir.bool
6969
#endif
7070

7171
float f;
@@ -83,11 +83,11 @@ bool cptr(void *d) {
8383
return x;
8484
}
8585

86-
// CIR: cir.func @cptr(%arg0: !cir.ptr<!cir.void>
87-
// CIR: %[[DPTR:[0-9]+]] = cir.alloca !cir.ptr<!cir.void>, !cir.ptr<!cir.ptr<!cir.void>>, ["d", init] {alignment = 8 : i64}
86+
// CIR: cir.func @cptr(%arg0: !cir.ptr<!void>
87+
// CIR: %[[DPTR:[0-9]+]] = cir.alloca !cir.ptr<!void>, !cir.ptr<!cir.ptr<!void>>, ["d", init] {alignment = 8 : i64}
8888

89-
// CIR: %[[DVAL:[0-9]+]] = cir.load %[[DPTR]] : !cir.ptr<!cir.ptr<!cir.void>>, !cir.ptr<!cir.void>
90-
// CIR: %{{[0-9]+}} = cir.cast(ptr_to_bool, %[[DVAL]] : !cir.ptr<!cir.void>), !cir.bool
89+
// CIR: %[[DVAL:[0-9]+]] = cir.load %[[DPTR]] : !cir.ptr<!cir.ptr<!void>>, !cir.ptr<!void>
90+
// CIR: %{{[0-9]+}} = cir.cast(ptr_to_bool, %[[DVAL]] : !cir.ptr<!void>), !cir.bool
9191
#endif
9292

9393
void should_not_cast() {

0 commit comments

Comments
 (0)