diff --git a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp index e3872bf73f750..e94aba0d7ac4a 100644 --- a/clang/lib/CIR/Dialect/IR/CIRDialect.cpp +++ b/clang/lib/CIR/Dialect/IR/CIRDialect.cpp @@ -31,6 +31,20 @@ struct CIROpAsmDialectInterface : public OpAsmDialectInterface { using OpAsmDialectInterface::OpAsmDialectInterface; AliasResult getAlias(Type type, raw_ostream &os) const final { + if (auto intType = dyn_cast(type)) { + // We only provide alias for standard integer types (i.e. integer types + // whose width is a power of 2 and at least 8). + unsigned width = intType.getWidth(); + if (width < 8 || !llvm::isPowerOf2_32(width)) + return AliasResult::NoAlias; + os << intType.getAlias(); + return AliasResult::OverridableAlias; + } + if (auto voidType = dyn_cast(type)) { + os << voidType.getAlias(); + return AliasResult::OverridableAlias; + } + return AliasResult::NoAlias; } diff --git a/clang/test/CIR/CodeGen/array.cpp b/clang/test/CIR/CodeGen/array.cpp index 294c4af822c44..a59880352e050 100644 --- a/clang/test/CIR/CodeGen/array.cpp +++ b/clang/test/CIR/CodeGen/array.cpp @@ -1,41 +1,41 @@ // RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o - 2>&1 | FileCheck %s int a[10]; -// CHECK: cir.global external @a : !cir.array x 10> +// CHECK: cir.global external @a : !cir.array int aa[10][5]; -// CHECK: cir.global external @aa : !cir.array x 5> x 10> +// CHECK: cir.global external @aa : !cir.array x 10> extern int b[10]; -// CHECK: cir.global external @b : !cir.array x 10> +// CHECK: cir.global external @b : !cir.array extern int bb[10][5]; -// CHECK: cir.global external @bb : !cir.array x 5> x 10> +// CHECK: cir.global external @bb : !cir.array x 10> int c[10] = {}; -// CHECK: cir.global external @c = #cir.zero : !cir.array x 10> +// CHECK: cir.global external @c = #cir.zero : !cir.array int d[3] = {1, 2, 3}; -// CHECK: cir.global external @d = #cir.const_array<[#cir.int<1> : !cir.int, #cir.int<2> : !cir.int, #cir.int<3> : !cir.int]> : !cir.array x 3> +// CHECK: cir.global external @d = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i]> : !cir.array int dd[3][2] = {{1, 2}, {3, 4}, {5, 6}}; -// CHECK: cir.global external @dd = #cir.const_array<[#cir.const_array<[#cir.int<1> : !cir.int, #cir.int<2> : !cir.int]> : !cir.array x 2>, #cir.const_array<[#cir.int<3> : !cir.int, #cir.int<4> : !cir.int]> : !cir.array x 2>, #cir.const_array<[#cir.int<5> : !cir.int, #cir.int<6> : !cir.int]> : !cir.array x 2>]> : !cir.array x 2> x 3> +// CHECK: cir.global external @dd = #cir.const_array<[#cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i]> : !cir.array, #cir.const_array<[#cir.int<3> : !s32i, #cir.int<4> : !s32i]> : !cir.array, #cir.const_array<[#cir.int<5> : !s32i, #cir.int<6> : !s32i]> : !cir.array]> : !cir.array x 3> int e[10] = {1, 2}; -// CHECK: cir.global external @e = #cir.const_array<[#cir.int<1> : !cir.int, #cir.int<2> : !cir.int], trailing_zeros> : !cir.array x 10> +// CHECK: cir.global external @e = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i], trailing_zeros> : !cir.array int f[5] = {1, 2}; -// CHECK: cir.global external @f = #cir.const_array<[#cir.int<1> : !cir.int, #cir.int<2> : !cir.int, #cir.int<0> : !cir.int, #cir.int<0> : !cir.int, #cir.int<0> : !cir.int]> : !cir.array x 5> +// 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 void func() { int l[10]; - // CHECK: %[[ARR:.*]] = cir.alloca !cir.array x 10>, !cir.ptr x 10>>, ["l"] + // CHECK: %[[ARR:.*]] = cir.alloca !cir.array, !cir.ptr>, ["l"] } void func2(int p[10]) {} -// CHECK: cir.func @func2(%arg0: !cir.ptr> -// CHECK: cir.alloca !cir.ptr>, !cir.ptr>>, ["p", init] +// CHECK: cir.func @func2(%arg0: !cir.ptr +// CHECK: cir.alloca !cir.ptr, !cir.ptr>, ["p", init] void func3(int pp[10][5]) {} -// CHECK: cir.func @func3(%arg0: !cir.ptr x 5>> -// CHECK: cir.alloca !cir.ptr x 5>>, !cir.ptr x 5>>> +// CHECK: cir.func @func3(%arg0: !cir.ptr> +// CHECK: cir.alloca !cir.ptr>, !cir.ptr>> diff --git a/clang/test/CIR/CodeGen/basic.c b/clang/test/CIR/CodeGen/basic.c index 01e58398a6438..673ff256c22af 100644 --- a/clang/test/CIR/CodeGen/basic.c +++ b/clang/test/CIR/CodeGen/basic.c @@ -13,17 +13,15 @@ int f1(int i) { } // CIR: module -// CIR-NEXT: cir.func @f1(%arg0: !cir.int loc({{.*}})) -> !cir.int -// CIR-NEXT: %[[I_PTR:.*]] = cir.alloca !cir.int, !cir.ptr>, ["i", init] {alignment = 4 : i64} -// CIR-NEXT: %[[RV:.*]] = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} -// CIR-NEXT: cir.store %arg0, %[[I_PTR]] : !cir.int, !cir.ptr> -// CIR-NEXT: %[[I_IGNORED:.*]] = cir.load %[[I_PTR]] : !cir.ptr>, !cir.int -// CIR-NEXT: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr>, !cir.int -// CIR-NEXT: cir.store %[[I]], %[[RV]] : !cir.int, !cir.ptr> -// CIR-NEXT: cir.br ^[[BB1:[^ ]+]] -// CIR-NEXT: ^[[BB1]]: -// CIR-NEXT: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr>, !cir.int -// CIR-NEXT: cir.return %[[R]] : !cir.int +// CIR-NEXT: cir.func @f1(%arg0: !s32i loc({{.*}})) -> !s32i +// CIR-NEXT: %[[I_PTR:.*]] = cir.alloca !s32i, !cir.ptr, ["i", init] {alignment = 4 : i64} +// CIR-NEXT: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} +// CIR-NEXT: cir.store %arg0, %[[I_PTR]] : !s32i, !cir.ptr +// CIR-NEXT: %[[I_IGNORED:.*]] = cir.load %[[I_PTR]] : !cir.ptr, !s32i +// CIR-NEXT: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr, !s32i +// CIR-NEXT: cir.store %[[I]], %[[RV]] : !s32i, !cir.ptr +// CIR-NEXT: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr, !s32i +// CIR-NEXT: cir.return %[[R]] : !s32i // LLVM: define i32 @f1(i32 %[[IP:.*]]) // LLVM-NEXT: %[[I_PTR:.*]] = alloca i32, i64 1, align 4 @@ -32,8 +30,6 @@ int f1(int i) { // LLVM-NEXT: %[[I_IGNORED:.*]] = load i32, ptr %[[I_PTR]], align 4 // LLVM-NEXT: %[[I:.*]] = load i32, ptr %[[I_PTR]], align 4 // LLVM-NEXT: store i32 %[[I]], ptr %[[RV]], align 4 -// LLVM-NEXT: br label %[[BB1:.*]] -// LLVM: [[BB1]]: // LLVM-NEXT: %[[R:.*]] = load i32, ptr %[[RV]], align 4 // LLVM-NEXT: ret i32 %[[R]] @@ -47,20 +43,16 @@ int f1(int i) { int f2(void) { return 3; } -// CIR: cir.func @f2() -> !cir.int -// CIR-NEXT: %[[RV:.*]] = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} -// CIR-NEXT: %[[THREE:.*]] = cir.const #cir.int<3> : !cir.int -// CIR-NEXT: cir.store %[[THREE]], %[[RV]] : !cir.int, !cir.ptr> -// CIR-NEXT: cir.br ^[[BB1:[^ ]+]] -// CIR-NEXT: ^[[BB1]]: -// CIR-NEXT: %[[R:.*]] = cir.load %0 : !cir.ptr>, !cir.int -// CIR-NEXT: cir.return %[[R]] : !cir.int +// CIR: cir.func @f2() -> !s32i +// CIR-NEXT: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} +// CIR-NEXT: %[[THREE:.*]] = cir.const #cir.int<3> : !s32i +// CIR-NEXT: cir.store %[[THREE]], %[[RV]] : !s32i, !cir.ptr +// CIR-NEXT: %[[R:.*]] = cir.load %0 : !cir.ptr, !s32i +// CIR-NEXT: cir.return %[[R]] : !s32i // LLVM: define i32 @f2() // LLVM-NEXT: %[[RV:.*]] = alloca i32, i64 1, align 4 // LLVM-NEXT: store i32 3, ptr %[[RV]], align 4 -// LLVM-NEXT: br label %[[BB1:.*]] -// LLVM: [[BB1]]: // LLVM-NEXT: %[[R:.*]] = load i32, ptr %[[RV]], align 4 // LLVM-NEXT: ret i32 %[[R]] @@ -73,17 +65,15 @@ int f3(void) { return i; } -// CIR: cir.func @f3() -> !cir.int -// CIR-NEXT: %[[RV:.*]] = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} -// CIR-NEXT: %[[I_PTR:.*]] = cir.alloca !cir.int, !cir.ptr>, ["i", init] {alignment = 4 : i64} -// CIR-NEXT: %[[THREE:.*]] = cir.const #cir.int<3> : !cir.int -// CIR-NEXT: cir.store %[[THREE]], %[[I_PTR]] : !cir.int, !cir.ptr> -// CIR-NEXT: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr>, !cir.int -// CIR-NEXT: cir.store %[[I]], %[[RV]] : !cir.int, !cir.ptr> -// CIR-NEXT: cir.br ^[[BB1:[^ ]+]] -// CIR-NEXT: ^[[BB1]]: -// CIR-NEXT: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr>, !cir.int -// CIR-NEXT: cir.return %[[R]] : !cir.int +// CIR: cir.func @f3() -> !s32i +// CIR-NEXT: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} +// CIR-NEXT: %[[I_PTR:.*]] = cir.alloca !s32i, !cir.ptr, ["i", init] {alignment = 4 : i64} +// CIR-NEXT: %[[THREE:.*]] = cir.const #cir.int<3> : !s32i +// CIR-NEXT: cir.store %[[THREE]], %[[I_PTR]] : !s32i, !cir.ptr +// CIR-NEXT: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr, !s32i +// CIR-NEXT: cir.store %[[I]], %[[RV]] : !s32i, !cir.ptr +// CIR-NEXT: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr, !s32i +// CIR-NEXT: cir.return %[[R]] : !s32i // LLVM: define i32 @f3() // LLVM-NEXT: %[[RV:.*]] = alloca i32, i64 1, align 4 @@ -91,8 +81,6 @@ int f3(void) { // LLVM-NEXT: store i32 3, ptr %[[I_PTR]], align 4 // LLVM-NEXT: %[[I:.*]] = load i32, ptr %[[I_PTR]], align 4 // LLVM-NEXT: store i32 %[[I]], ptr %[[RV]], align 4 -// LLVM-NEXT: br label %[[BB1:.*]] -// LLVM: [[BB1]]: // LLVM-NEXT: %[[R:.*]] = load i32, ptr %[[RV]], align 4 // LLVM-NEXT: ret i32 %[[R]] diff --git a/clang/test/CIR/CodeGen/basic.cpp b/clang/test/CIR/CodeGen/basic.cpp index 04687c340843a..6918825bd76a7 100644 --- a/clang/test/CIR/CodeGen/basic.cpp +++ b/clang/test/CIR/CodeGen/basic.cpp @@ -6,51 +6,51 @@ int f1() { } // CHECK: module -// CHECK: cir.func @f1() -> !cir.int -// CHECK: %[[RV:.*]] = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} -// CHECK: %[[I_PTR:.*]] = cir.alloca !cir.int, !cir.ptr>, ["i"] {alignment = 4 : i64} -// CHECK: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr>, !cir.int -// CHECK: cir.store %[[I]], %[[RV]] : !cir.int, !cir.ptr> -// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr>, !cir.int -// CHECK: cir.return %[[R]] : !cir.int +// CHECK: cir.func @f1() -> !s32i +// CHECK: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} +// CHECK: %[[I_PTR:.*]] = cir.alloca !s32i, !cir.ptr, ["i"] {alignment = 4 : i64} +// CHECK: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr, !s32i +// CHECK: cir.store %[[I]], %[[RV]] : !s32i, !cir.ptr +// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr, !s32i +// CHECK: cir.return %[[R]] : !s32i int f2() { const int i = 2; return i; } -// CHECK: cir.func @f2() -> !cir.int -// CHECK: %[[RV:.*]] = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} -// CHECK: %[[I_PTR:.*]] = cir.alloca !cir.int, !cir.ptr>, ["i", init, const] {alignment = 4 : i64} -// CHECK: %[[TWO:.*]] = cir.const #cir.int<2> : !cir.int -// CHECK: cir.store %[[TWO]], %[[I_PTR]] : !cir.int, !cir.ptr> -// CHECK: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr>, !cir.int -// CHECK: cir.store %[[I]], %[[RV]] : !cir.int, !cir.ptr> -// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr>, !cir.int -// CHECK: cir.return %[[R]] : !cir.int +// CHECK: cir.func @f2() -> !s32i +// CHECK: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} +// CHECK: %[[I_PTR:.*]] = cir.alloca !s32i, !cir.ptr, ["i", init, const] {alignment = 4 : i64} +// CHECK: %[[TWO:.*]] = cir.const #cir.int<2> : !s32i +// CHECK: cir.store %[[TWO]], %[[I_PTR]] : !s32i, !cir.ptr +// CHECK: %[[I:.*]] = cir.load %[[I_PTR]] : !cir.ptr, !s32i +// CHECK: cir.store %[[I]], %[[RV]] : !s32i, !cir.ptr +// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr, !s32i +// CHECK: cir.return %[[R]] : !s32i int f3(int i) { return i; } -// CHECK: cir.func @f3(%[[ARG:.*]]: !cir.int loc({{.*}})) -> !cir.int -// CHECK: %[[ARG_ALLOCA:.*]] = cir.alloca !cir.int, !cir.ptr>, ["i", init] {alignment = 4 : i64} -// CHECK: %[[RV:.*]] = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} -// CHECK: cir.store %[[ARG]], %[[ARG_ALLOCA]] : !cir.int, !cir.ptr> -// CHECK: %[[ARG_VAL:.*]] = cir.load %[[ARG_ALLOCA]] : !cir.ptr>, !cir.int -// CHECK: cir.store %[[ARG_VAL]], %[[RV]] : !cir.int, !cir.ptr> -// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr>, !cir.int -// CHECK: cir.return %[[R]] : !cir.int +// CHECK: cir.func @f3(%[[ARG:.*]]: !s32i loc({{.*}})) -> !s32i +// CHECK: %[[ARG_ALLOCA:.*]] = cir.alloca !s32i, !cir.ptr, ["i", init] {alignment = 4 : i64} +// CHECK: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} +// CHECK: cir.store %[[ARG]], %[[ARG_ALLOCA]] : !s32i, !cir.ptr +// CHECK: %[[ARG_VAL:.*]] = cir.load %[[ARG_ALLOCA]] : !cir.ptr, !s32i +// CHECK: cir.store %[[ARG_VAL]], %[[RV]] : !s32i, !cir.ptr +// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr, !s32i +// CHECK: cir.return %[[R]] : !s32i int f4(const int i) { return i; } -// CHECK: cir.func @f4(%[[ARG:.*]]: !cir.int loc({{.*}})) -> !cir.int -// CHECK: %[[ARG_ALLOCA:.*]] = cir.alloca !cir.int, !cir.ptr>, ["i", init, const] {alignment = 4 : i64} -// CHECK: %[[RV:.*]] = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} -// CHECK: cir.store %[[ARG]], %[[ARG_ALLOCA]] : !cir.int, !cir.ptr> -// CHECK: %[[ARG_VAL:.*]] = cir.load %[[ARG_ALLOCA]] : !cir.ptr>, !cir.int -// CHECK: cir.store %[[ARG_VAL]], %[[RV]] : !cir.int, !cir.ptr> -// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr>, !cir.int -// CHECK: cir.return %[[R]] : !cir.int +// CHECK: cir.func @f4(%[[ARG:.*]]: !s32i loc({{.*}})) -> !s32i +// CHECK: %[[ARG_ALLOCA:.*]] = cir.alloca !s32i, !cir.ptr, ["i", init, const] {alignment = 4 : i64} +// CHECK: %[[RV:.*]] = cir.alloca !s32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} +// CHECK: cir.store %[[ARG]], %[[ARG_ALLOCA]] : !s32i, !cir.ptr +// CHECK: %[[ARG_VAL:.*]] = cir.load %[[ARG_ALLOCA]] : !cir.ptr, !s32i +// CHECK: cir.store %[[ARG_VAL]], %[[RV]] : !s32i, !cir.ptr +// CHECK: %[[R:.*]] = cir.load %[[RV]] : !cir.ptr, !s32i +// CHECK: cir.return %[[R]] : !s32i diff --git a/clang/test/CIR/CodeGen/cast.cpp b/clang/test/CIR/CodeGen/cast.cpp index 4d9e364b3c186..ceae355a3ae1c 100644 --- a/clang/test/CIR/CodeGen/cast.cpp +++ b/clang/test/CIR/CodeGen/cast.cpp @@ -8,14 +8,14 @@ unsigned char cxxstaticcast_0(unsigned int x) { } // CIR: cir.func @cxxstaticcast_0 -// CIR: %[[XPTR:[0-9]+]] = cir.alloca !cir.int, !cir.ptr>, ["x", init] {alignment = 4 : i64} -// CIR: %[[RV:[0-9]+]] = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 1 : i64} -// CIR: cir.store %arg0, %[[XPTR]] : !cir.int, !cir.ptr> -// CIR: %[[XVAL:[0-9]+]] = cir.load %[[XPTR]] : !cir.ptr>, !cir.int -// CIR: %[[CASTED:[0-9]+]] = cir.cast(integral, %[[XVAL]] : !cir.int), !cir.int -// CIR: cir.store %[[CASTED]], %[[RV]] : !cir.int, !cir.ptr> -// CIR: %[[R:[0-9]+]] = cir.load %1 : !cir.ptr>, !cir.int -// CIR: cir.return %[[R]] : !cir.int +// CIR: %[[XPTR:[0-9]+]] = cir.alloca !u32i, !cir.ptr, ["x", init] {alignment = 4 : i64} +// CIR: %[[RV:[0-9]+]] = cir.alloca !u8i, !cir.ptr, ["__retval"] {alignment = 1 : i64} +// CIR: cir.store %arg0, %[[XPTR]] : !u32i, !cir.ptr +// CIR: %[[XVAL:[0-9]+]] = cir.load %[[XPTR]] : !cir.ptr, !u32i +// CIR: %[[CASTED:[0-9]+]] = cir.cast(integral, %[[XVAL]] : !u32i), !u8i +// CIR: cir.store %[[CASTED]], %[[RV]] : !u8i, !cir.ptr +// CIR: %[[R:[0-9]+]] = cir.load %1 : !cir.ptr, !u8i +// CIR: cir.return %[[R]] : !u8i // CIR: } // 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) { // LLVM: define i32 @cStyleCasts_0 char a = (char)x1; // truncate - // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int), !cir.int + // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !u32i), !s8i // LLVM: %{{[0-9]+}} = trunc i32 %{{[0-9]+}} to i8 short b = (short)x2; // truncate with sign - // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int), !cir.int + // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !s32i), !s16i // LLVM: %{{[0-9]+}} = trunc i32 %{{[0-9]+}} to i16 long long c = (long long)x1; // zero extend - // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int), !cir.int + // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !u32i), !s64i // LLVM: %{{[0-9]+}} = zext i32 %{{[0-9]+}} to i64 long long d = (long long)x2; // sign extend - // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int), !cir.int + // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !s32i), !s64i // LLVM: %{{[0-9]+}} = sext i32 %{{[0-9]+}} to i64 unsigned ui = (unsigned)x2; // sign drop - // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int), !cir.int + // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !s32i), !u32i int si = (int)x1; // sign add - // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !cir.int), !cir.int + // CIR: %{{[0-9]+}} = cir.cast(integral, %{{[0-9]+}} : !u32i), !s32i bool ib; int bi = (int)ib; // bool to int - // CIR: %{{[0-9]+}} = cir.cast(bool_to_int, %{{[0-9]+}} : !cir.bool), !cir.int + // CIR: %{{[0-9]+}} = cir.cast(bool_to_int, %{{[0-9]+}} : !cir.bool), !s32i // LLVM: %{{[0-9]+}} = zext i1 %{{[0-9]+}} to i32 #ifdef CIR_ONLY bool b2 = x2; // int to bool - // CIR: %{{[0-9]+}} = cir.cast(int_to_bool, %{{[0-9]+}} : !cir.int), !cir.bool + // CIR: %{{[0-9]+}} = cir.cast(int_to_bool, %{{[0-9]+}} : !s32i), !cir.bool #endif #ifdef CIR_ONLY void *p; bool b3 = p; // ptr to bool - // CIR: %{{[0-9]+}} = cir.cast(ptr_to_bool, %{{[0-9]+}} : !cir.ptr), !cir.bool + // CIR: %{{[0-9]+}} = cir.cast(ptr_to_bool, %{{[0-9]+}} : !cir.ptr), !cir.bool #endif float f; @@ -83,11 +83,11 @@ bool cptr(void *d) { return x; } -// CIR: cir.func @cptr(%arg0: !cir.ptr -// CIR: %[[DPTR:[0-9]+]] = cir.alloca !cir.ptr, !cir.ptr>, ["d", init] {alignment = 8 : i64} +// CIR: cir.func @cptr(%arg0: !cir.ptr +// CIR: %[[DPTR:[0-9]+]] = cir.alloca !cir.ptr, !cir.ptr>, ["d", init] {alignment = 8 : i64} -// CIR: %[[DVAL:[0-9]+]] = cir.load %[[DPTR]] : !cir.ptr>, !cir.ptr -// CIR: %{{[0-9]+}} = cir.cast(ptr_to_bool, %[[DVAL]] : !cir.ptr), !cir.bool +// CIR: %[[DVAL:[0-9]+]] = cir.load %[[DPTR]] : !cir.ptr>, !cir.ptr +// CIR: %{{[0-9]+}} = cir.cast(ptr_to_bool, %[[DVAL]] : !cir.ptr), !cir.bool #endif void should_not_cast() { diff --git a/clang/test/CIR/CodeGen/local-vars.cpp b/clang/test/CIR/CodeGen/local-vars.cpp index 14be8f4da902b..6e9f8c39b107f 100644 --- a/clang/test/CIR/CodeGen/local-vars.cpp +++ b/clang/test/CIR/CodeGen/local-vars.cpp @@ -22,27 +22,27 @@ void test() { // CHECK: module // CHECK: cir.func @test() -// CHECK: %[[I_PTR:.*]] = cir.alloca !cir.int, !cir.ptr>, ["i", init] {alignment = 4 : i64} -// CHECK: %[[L_PTR:.*]] = cir.alloca !cir.int, !cir.ptr>, ["l", init] {alignment = 8 : i64} +// CHECK: %[[I_PTR:.*]] = cir.alloca !s32i, !cir.ptr, ["i", init] {alignment = 4 : i64} +// CHECK: %[[L_PTR:.*]] = cir.alloca !s64i, !cir.ptr, ["l", init] {alignment = 8 : i64} // CHECK: %[[F_PTR:.*]] = cir.alloca !cir.float, !cir.ptr, ["f", init] {alignment = 4 : i64} // CHECK: %[[D_PTR:.*]] = cir.alloca !cir.double, !cir.ptr, ["d", init] {alignment = 8 : i64} // CHECK: %[[B1_PTR:.*]] = cir.alloca !cir.bool, !cir.ptr, ["b1", init] {alignment = 1 : i64} // CHECK: %[[B2_PTR:.*]] = cir.alloca !cir.bool, !cir.ptr, ["b2", init] {alignment = 1 : i64} -// CHECK: %[[CI_PTR:.*]] = cir.alloca !cir.int, !cir.ptr>, ["ci", init, const] {alignment = 4 : i64} -// CHECK: %[[CL_PTR:.*]] = cir.alloca !cir.int, !cir.ptr>, ["cl", init, const] {alignment = 8 : i64} +// CHECK: %[[CI_PTR:.*]] = cir.alloca !s32i, !cir.ptr, ["ci", init, const] {alignment = 4 : i64} +// CHECK: %[[CL_PTR:.*]] = cir.alloca !s64i, !cir.ptr, ["cl", init, const] {alignment = 8 : i64} // CHECK: %[[CF_PTR:.*]] = cir.alloca !cir.float, !cir.ptr, ["cf", init, const] {alignment = 4 : i64} // CHECK: %[[CD_PTR:.*]] = cir.alloca !cir.double, !cir.ptr, ["cd", init, const] {alignment = 8 : i64} // CHECK: %[[CB1_PTR:.*]] = cir.alloca !cir.bool, !cir.ptr, ["cb1", init, const] {alignment = 1 : i64} // CHECK: %[[CB2_PTR:.*]] = cir.alloca !cir.bool, !cir.ptr, ["cb2", init, const] {alignment = 1 : i64} -// CHECK: %[[UII_PTR:.*]] = cir.alloca !cir.int, !cir.ptr>, ["uii"] {alignment = 4 : i64} -// CHECK: %[[UIL_PTR:.*]] = cir.alloca !cir.int, !cir.ptr>, ["uil"] {alignment = 8 : i64} +// CHECK: %[[UII_PTR:.*]] = cir.alloca !s32i, !cir.ptr, ["uii"] {alignment = 4 : i64} +// CHECK: %[[UIL_PTR:.*]] = cir.alloca !s64i, !cir.ptr, ["uil"] {alignment = 8 : i64} // CHECK: %[[UIF_PTR:.*]] = cir.alloca !cir.float, !cir.ptr, ["uif"] {alignment = 4 : i64} // CHECK: %[[UID_PTR:.*]] = cir.alloca !cir.double, !cir.ptr, ["uid"] {alignment = 8 : i64} // CHECK: %[[UIB_PTR:.*]] = cir.alloca !cir.bool, !cir.ptr, ["uib"] {alignment = 1 : i64} -// CHECK: %[[ONE:.*]] = cir.const #cir.int<1> : !cir.int -// CHECK: cir.store %[[ONE]], %[[I_PTR]] : !cir.int, !cir.ptr> -// CHECK: %[[TWO:.*]] = cir.const #cir.int<2> : !cir.int -// CHECK: cir.store %[[TWO]], %[[L_PTR]] : !cir.int, !cir.ptr> +// CHECK: %[[ONE:.*]] = cir.const #cir.int<1> : !s32i +// CHECK: cir.store %[[ONE]], %[[I_PTR]] : !s32i, !cir.ptr +// CHECK: %[[TWO:.*]] = cir.const #cir.int<2> : !s64i +// CHECK: cir.store %[[TWO]], %[[L_PTR]] : !s64i, !cir.ptr // CHECK: %[[THREE:.*]] = cir.const #cir.fp<3.0{{.*}}> : !cir.float // CHECK: cir.store %[[THREE]], %[[F_PTR]] : !cir.float, !cir.ptr // CHECK: %[[FOUR:.*]] = cir.const #cir.fp<4.0{{.*}}> : !cir.double @@ -51,10 +51,10 @@ void test() { // CHECK: cir.store %[[TRUE]], %[[B1_PTR]] : !cir.bool, !cir.ptr // CHECK: %[[FALSE:.*]] = cir.const #false // CHECK: cir.store %[[FALSE]], %[[B2_PTR]] : !cir.bool, !cir.ptr -// CHECK: %[[ONEC:.*]] = cir.const #cir.int<1> : !cir.int -// CHECK: cir.store %[[ONEC]], %[[CI_PTR]] : !cir.int, !cir.ptr> -// CHECK: %[[TWOC:.*]] = cir.const #cir.int<2> : !cir.int -// CHECK: cir.store %[[TWOC]], %[[CL_PTR]] : !cir.int, !cir.ptr> +// CHECK: %[[ONEC:.*]] = cir.const #cir.int<1> : !s32i +// CHECK: cir.store %[[ONEC]], %[[CI_PTR]] : !s32i, !cir.ptr +// CHECK: %[[TWOC:.*]] = cir.const #cir.int<2> : !s64i +// CHECK: cir.store %[[TWOC]], %[[CL_PTR]] : !s64i, !cir.ptr // CHECK: %[[THREEC:.*]] = cir.const #cir.fp<3.0{{.*}}> : !cir.float // CHECK: cir.store %[[THREEC]], %[[CF_PTR]] : !cir.float, !cir.ptr // CHECK: %[[FOURC:.*]] = cir.const #cir.fp<4.0{{.*}}> : !cir.double diff --git a/clang/test/CIR/CodeGen/unary-expr-or-type-trait.cpp b/clang/test/CIR/CodeGen/unary-expr-or-type-trait.cpp index fe5e5b434a3f1..071c52a0918e3 100644 --- a/clang/test/CIR/CodeGen/unary-expr-or-type-trait.cpp +++ b/clang/test/CIR/CodeGen/unary-expr-or-type-trait.cpp @@ -2,46 +2,46 @@ void foo() { unsigned long b = sizeof(bool); - // CHECK: cir.const #cir.int<1> : !cir.int + // CHECK: cir.const #cir.int<1> : !u64i unsigned long i = sizeof(int); - // CHECK: cir.const #cir.int<4> : !cir.int + // CHECK: cir.const #cir.int<4> : !u64i unsigned long l = sizeof(long); - // CHECK: cir.const #cir.int<8> : !cir.int + // CHECK: cir.const #cir.int<8> : !u64i unsigned long f = sizeof(float); - // CHECK: cir.const #cir.int<4> : !cir.int + // CHECK: cir.const #cir.int<4> : !u64i unsigned long d = sizeof(double); - // CHECK: cir.const #cir.int<8> : !cir.int + // CHECK: cir.const #cir.int<8> : !u64i unsigned long iArr = sizeof(int[5]); - // CHECK: cir.const #cir.int<20> : !cir.int + // CHECK: cir.const #cir.int<20> : !u64i unsigned long dArr = sizeof(double[5]); - // CHECK: cir.const #cir.int<40> : !cir.int + // CHECK: cir.const #cir.int<40> : !u64i } void foo2() { unsigned long b = alignof(bool); - // CHECK: cir.const #cir.int<1> : !cir.int + // CHECK: cir.const #cir.int<1> : !u64i unsigned long i = alignof(int); - // CHECK: cir.const #cir.int<4> : !cir.int + // CHECK: cir.const #cir.int<4> : !u64i unsigned long l = alignof(long); - // CHECK: cir.const #cir.int<8> : !cir.int + // CHECK: cir.const #cir.int<8> : !u64i unsigned long f = alignof(float); - // CHECK: cir.const #cir.int<4> : !cir.int + // CHECK: cir.const #cir.int<4> : !u64i unsigned long d = alignof(double); - // CHECK: cir.const #cir.int<8> : !cir.int + // CHECK: cir.const #cir.int<8> : !u64i unsigned long iArr = alignof(int[5]); - // CHECK: cir.const #cir.int<4> : !cir.int + // CHECK: cir.const #cir.int<4> : !u64i unsigned long dArr = alignof(double[5]); - // CHECK: cir.const #cir.int<8> : !cir.int + // CHECK: cir.const #cir.int<8> : !u64i } diff --git a/clang/test/CIR/CodeGen/unary.cpp b/clang/test/CIR/CodeGen/unary.cpp index 924f4188199ab..3e041e14ce177 100644 --- a/clang/test/CIR/CodeGen/unary.cpp +++ b/clang/test/CIR/CodeGen/unary.cpp @@ -10,8 +10,8 @@ unsigned up0() { return +a; } -// CHECK: cir.func @up0() -> !cir.int -// CHECK: %[[A:.*]] = cir.alloca !cir.int, !cir.ptr>, ["a", init] +// CHECK: cir.func @up0() -> !u32i +// CHECK: %[[A:.*]] = cir.alloca !u32i, !cir.ptr, ["a", init] // CHECK: %[[INPUT:.*]] = cir.load %[[A]] // CHECK: %[[OUTPUT:.*]] = cir.unary(plus, %[[INPUT]]) @@ -31,8 +31,8 @@ unsigned um0() { return -a; } -// CHECK: cir.func @um0() -> !cir.int -// CHECK: %[[A:.*]] = cir.alloca !cir.int, !cir.ptr>, ["a", init] +// CHECK: cir.func @um0() -> !u32i +// CHECK: %[[A:.*]] = cir.alloca !u32i, !cir.ptr, ["a", init] // CHECK: %[[INPUT:.*]] = cir.load %[[A]] // CHECK: %[[OUTPUT:.*]] = cir.unary(minus, %[[INPUT]]) @@ -54,8 +54,8 @@ unsigned un0() { return ~a; // a ^ -1 , not } -// CHECK: cir.func @un0() -> !cir.int -// CHECK: %[[A:.*]] = cir.alloca !cir.int, !cir.ptr>, ["a", init] +// CHECK: cir.func @un0() -> !u32i +// CHECK: %[[A:.*]] = cir.alloca !u32i, !cir.ptr, ["a", init] // CHECK: %[[INPUT:.*]] = cir.load %[[A]] // CHECK: %[[OUTPUT:.*]] = cir.unary(not, %[[INPUT]]) @@ -78,10 +78,10 @@ int inc0() { return a; } -// CHECK: cir.func @inc0() -> !cir.int -// CHECK: %[[A:.*]] = cir.alloca !cir.int, !cir.ptr>, ["a", init] -// CHECK: %[[ATMP:.*]] = cir.const #cir.int<1> : !cir.int -// CHECK: cir.store %[[ATMP]], %[[A]] : !cir.int +// CHECK: cir.func @inc0() -> !s32i +// CHECK: %[[A:.*]] = cir.alloca !s32i, !cir.ptr, ["a", init] +// CHECK: %[[ATMP:.*]] = cir.const #cir.int<1> : !s32i +// CHECK: cir.store %[[ATMP]], %[[A]] : !s32i // CHECK: %[[INPUT:.*]] = cir.load %[[A]] // CHECK: %[[INCREMENTED:.*]] = cir.unary(inc, %[[INPUT]]) // CHECK: cir.store %[[INCREMENTED]], %[[A]] @@ -106,10 +106,10 @@ int dec0() { return a; } -// CHECK: cir.func @dec0() -> !cir.int -// CHECK: %[[A:.*]] = cir.alloca !cir.int, !cir.ptr>, ["a", init] -// CHECK: %[[ATMP:.*]] = cir.const #cir.int<1> : !cir.int -// CHECK: cir.store %[[ATMP]], %[[A]] : !cir.int +// CHECK: cir.func @dec0() -> !s32i +// CHECK: %[[A:.*]] = cir.alloca !s32i, !cir.ptr, ["a", init] +// CHECK: %[[ATMP:.*]] = cir.const #cir.int<1> : !s32i +// CHECK: cir.store %[[ATMP]], %[[A]] : !s32i // CHECK: %[[INPUT:.*]] = cir.load %[[A]] // CHECK: %[[INCREMENTED:.*]] = cir.unary(dec, %[[INPUT]]) // CHECK: cir.store %[[INCREMENTED]], %[[A]] @@ -134,10 +134,10 @@ int inc1() { return a; } -// CHECK: cir.func @inc1() -> !cir.int -// CHECK: %[[A:.*]] = cir.alloca !cir.int, !cir.ptr>, ["a", init] -// CHECK: %[[ATMP:.*]] = cir.const #cir.int<1> : !cir.int -// CHECK: cir.store %[[ATMP]], %[[A]] : !cir.int +// CHECK: cir.func @inc1() -> !s32i +// CHECK: %[[A:.*]] = cir.alloca !s32i, !cir.ptr, ["a", init] +// CHECK: %[[ATMP:.*]] = cir.const #cir.int<1> : !s32i +// CHECK: cir.store %[[ATMP]], %[[A]] : !s32i // CHECK: %[[INPUT:.*]] = cir.load %[[A]] // CHECK: %[[INCREMENTED:.*]] = cir.unary(inc, %[[INPUT]]) // CHECK: cir.store %[[INCREMENTED]], %[[A]] @@ -162,10 +162,10 @@ int dec1() { return a; } -// CHECK: cir.func @dec1() -> !cir.int -// CHECK: %[[A:.*]] = cir.alloca !cir.int, !cir.ptr>, ["a", init] -// CHECK: %[[ATMP:.*]] = cir.const #cir.int<1> : !cir.int -// CHECK: cir.store %[[ATMP]], %[[A]] : !cir.int +// CHECK: cir.func @dec1() -> !s32i +// CHECK: %[[A:.*]] = cir.alloca !s32i, !cir.ptr, ["a", init] +// CHECK: %[[ATMP:.*]] = cir.const #cir.int<1> : !s32i +// CHECK: cir.store %[[ATMP]], %[[A]] : !s32i // CHECK: %[[INPUT:.*]] = cir.load %[[A]] // CHECK: %[[INCREMENTED:.*]] = cir.unary(dec, %[[INPUT]]) // CHECK: cir.store %[[INCREMENTED]], %[[A]] @@ -191,11 +191,11 @@ int inc2() { return b; } -// CHECK: cir.func @inc2() -> !cir.int -// CHECK: %[[A:.*]] = cir.alloca !cir.int, !cir.ptr>, ["a", init] -// CHECK: %[[B:.*]] = cir.alloca !cir.int, !cir.ptr>, ["b", init] -// CHECK: %[[ATMP:.*]] = cir.const #cir.int<1> : !cir.int -// CHECK: cir.store %[[ATMP]], %[[A]] : !cir.int +// CHECK: cir.func @inc2() -> !s32i +// CHECK: %[[A:.*]] = cir.alloca !s32i, !cir.ptr, ["a", init] +// CHECK: %[[B:.*]] = cir.alloca !s32i, !cir.ptr, ["b", init] +// CHECK: %[[ATMP:.*]] = cir.const #cir.int<1> : !s32i +// CHECK: cir.store %[[ATMP]], %[[A]] : !s32i // CHECK: %[[ATOB:.*]] = cir.load %[[A]] // CHECK: %[[INCREMENTED:.*]] = cir.unary(inc, %[[ATOB]]) // CHECK: cir.store %[[INCREMENTED]], %[[A]] diff --git a/clang/test/CIR/IR/array.cir b/clang/test/CIR/IR/array.cir index 790a988d9b9d8..5995c393730ae 100644 --- a/clang/test/CIR/IR/array.cir +++ b/clang/test/CIR/IR/array.cir @@ -1,62 +1,64 @@ // RUN: cir-opt %s | FileCheck %s +!s32i = !cir.int + module { -cir.global external @a : !cir.array x 10> -// CHECK: cir.global external @a : !cir.array x 10> +cir.global external @a : !cir.array +// CHECK: cir.global external @a : !cir.array -cir.global external @aa : !cir.array x 10> x 10> -// CHECK: cir.global external @aa : !cir.array x 10> x 10> +cir.global external @aa : !cir.array x 10> +// CHECK: cir.global external @aa : !cir.array x 10> -cir.global external @b : !cir.array x 10> -// CHECK: cir.global external @b : !cir.array x 10> +cir.global external @b : !cir.array +// CHECK: cir.global external @b : !cir.array -cir.global external @bb : !cir.array x 10> x 10> -// CHECK: cir.global external @bb : !cir.array x 10> x 10> +cir.global external @bb : !cir.array x 10> +// CHECK: cir.global external @bb : !cir.array x 10> -cir.global external @c = #cir.zero : !cir.array x 10> -// CHECK: cir.global external @c = #cir.zero : !cir.array x 10> +cir.global external @c = #cir.zero : !cir.array +// CHECK: cir.global external @c = #cir.zero : !cir.array -cir.global external @d = #cir.const_array<[#cir.int<1> : !cir.int, #cir.int<2> : !cir.int, #cir.int<3> : !cir.int]> : !cir.array x 3> -// CHECK: cir.global external @d = #cir.const_array<[#cir.int<1> : !cir.int, #cir.int<2> : !cir.int, #cir.int<3> : !cir.int]> : !cir.array x 3> +cir.global external @d = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i]> : !cir.array +// CHECK: cir.global external @d = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i]> : !cir.array -cir.global external @dd = #cir.const_array<[#cir.const_array<[#cir.int<1> : !cir.int, #cir.int<2> : !cir.int]> : !cir.array x 2>, #cir.const_array<[#cir.int<3> : !cir.int, #cir.int<4> : !cir.int]> : !cir.array x 2>, #cir.const_array<[#cir.int<5> : !cir.int, #cir.int<6> : !cir.int]> : !cir.array x 2>]> : !cir.array x 2> x 3> -// CHECK: cir.global external @dd = #cir.const_array<[#cir.const_array<[#cir.int<1> : !cir.int, #cir.int<2> : !cir.int]> : !cir.array x 2>, #cir.const_array<[#cir.int<3> : !cir.int, #cir.int<4> : !cir.int]> : !cir.array x 2>, #cir.const_array<[#cir.int<5> : !cir.int, #cir.int<6> : !cir.int]> : !cir.array x 2>]> : !cir.array x 2> x 3> +cir.global external @dd = #cir.const_array<[#cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i]> : !cir.array, #cir.const_array<[#cir.int<3> : !s32i, #cir.int<4> : !s32i]> : !cir.array, #cir.const_array<[#cir.int<5> : !s32i, #cir.int<6> : !s32i]> : !cir.array]> : !cir.array x 3> +// CHECK: cir.global external @dd = #cir.const_array<[#cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i]> : !cir.array, #cir.const_array<[#cir.int<3> : !s32i, #cir.int<4> : !s32i]> : !cir.array, #cir.const_array<[#cir.int<5> : !s32i, #cir.int<6> : !s32i]> : !cir.array]> : !cir.array x 3> -cir.global external @e = #cir.const_array<[#cir.int<1> : !cir.int, #cir.int<2> : !cir.int], trailing_zeros> : !cir.array x 10> -// CHECK: cir.global external @e = #cir.const_array<[#cir.int<1> : !cir.int, #cir.int<2> : !cir.int], trailing_zeros> : !cir.array x 10> +cir.global external @e = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i], trailing_zeros> : !cir.array +// CHECK: cir.global external @e = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i], trailing_zeros> : !cir.array cir.func @func() { - %0 = cir.alloca !cir.array x 10>, !cir.ptr x 10>>, ["l"] {alignment = 4 : i64} + %0 = cir.alloca !cir.array, !cir.ptr>, ["l"] {alignment = 4 : i64} cir.return } // CHECK: cir.func @func() { -// CHECK: %0 = cir.alloca !cir.array x 10>, !cir.ptr x 10>>, ["l"] {alignment = 4 : i64} +// CHECK: %0 = cir.alloca !cir.array, !cir.ptr>, ["l"] {alignment = 4 : i64} // CHECK: cir.return // CHECK: } -cir.func @func2(%arg0: !cir.ptr>) { - %0 = cir.alloca !cir.ptr>, !cir.ptr>>, ["p", init] {alignment = 8 : i64} - cir.store %arg0, %0 : !cir.ptr>, !cir.ptr>> +cir.func @func2(%arg0: !cir.ptr) { + %0 = cir.alloca !cir.ptr, !cir.ptr>, ["p", init] {alignment = 8 : i64} + cir.store %arg0, %0 : !cir.ptr, !cir.ptr> cir.return } -// CHECK: cir.func @func2(%arg0: !cir.ptr>) { -// CHECK: %0 = cir.alloca !cir.ptr>, !cir.ptr>>, ["p", init] {alignment = 8 : i64} -// CHECK: cir.store %arg0, %0 : !cir.ptr>, !cir.ptr>> +// CHECK: cir.func @func2(%arg0: !cir.ptr) { +// CHECK: %0 = cir.alloca !cir.ptr, !cir.ptr>, ["p", init] {alignment = 8 : i64} +// CHECK: cir.store %arg0, %0 : !cir.ptr, !cir.ptr> // CHECK: cir.return // CHECK: } -cir.func @func3(%arg0: !cir.ptr x 10>>) { - %0 = cir.alloca !cir.ptr x 10>>, !cir.ptr x 10>>>, ["pp", init] {alignment = 8 : i64} - cir.store %arg0, %0 : !cir.ptr x 10>>, !cir.ptr x 10>>> +cir.func @func3(%arg0: !cir.ptr>) { + %0 = cir.alloca !cir.ptr>, !cir.ptr>>, ["pp", init] {alignment = 8 : i64} + cir.store %arg0, %0 : !cir.ptr>, !cir.ptr>> cir.return } -// CHECK: cir.func @func3(%arg0: !cir.ptr x 10>>) { -// CHECK: %0 = cir.alloca !cir.ptr x 10>>, !cir.ptr x 10>>>, ["pp", init] {alignment = 8 : i64} -// CHECK: cir.store %arg0, %0 : !cir.ptr x 10>>, !cir.ptr x 10>>> +// CHECK: cir.func @func3(%arg0: !cir.ptr>) { +// CHECK: %0 = cir.alloca !cir.ptr>, !cir.ptr>>, ["pp", init] {alignment = 8 : i64} +// CHECK: cir.store %arg0, %0 : !cir.ptr>, !cir.ptr>> // CHECK: cir.return // CHECK: } diff --git a/clang/test/CIR/IR/cast.cir b/clang/test/CIR/IR/cast.cir index de3cc37467eff..4881db7fc271f 100644 --- a/clang/test/CIR/IR/cast.cir +++ b/clang/test/CIR/IR/cast.cir @@ -15,9 +15,9 @@ module { } } -// CHECK: cir.func @yolo(%arg0: !cir.int) -// CHECK: %0 = cir.cast(int_to_bool, %arg0 : !cir.int), !cir.bool -// CHECK: %1 = cir.const #cir.int<0> : !cir.int +// CHECK: cir.func @yolo(%arg0: !s32i) +// CHECK: %0 = cir.cast(int_to_bool, %arg0 : !s32i), !cir.bool +// CHECK: %1 = cir.const #cir.int<0> : !s32i // CHECK: cir.func @bitcast -// CHECK: %0 = cir.cast(bitcast, %arg0 : !cir.ptr>), !cir.ptr +// CHECK: %0 = cir.cast(bitcast, %arg0 : !cir.ptr), !cir.ptr diff --git a/clang/test/CIR/IR/func.cir b/clang/test/CIR/IR/func.cir index 4077bd33e0438..9ed44611e195d 100644 --- a/clang/test/CIR/IR/func.cir +++ b/clang/test/CIR/IR/func.cir @@ -1,5 +1,10 @@ // RUN: cir-opt %s | FileCheck %s +!s32i = !cir.int +!s64i = !cir.int +!u32i = !cir.int +!u64i = !cir.int + module { // void empty() { } cir.func @empty() { @@ -18,13 +23,13 @@ cir.func @voidret() { // CHECK: } // int intfunc() { return 42; } -cir.func @intfunc() -> !cir.int { - %0 = cir.const #cir.int<42> : !cir.int - cir.return %0 : !cir.int +cir.func @intfunc() -> !s32i { + %0 = cir.const #cir.int<42> : !s32i + cir.return %0 : !s32i } -// CHECK: cir.func @intfunc() -> !cir.int { -// CHECK: %[[VAL:.*]] = cir.const #cir.int<42> : !cir.int -// CHECK: cir.return %[[VAL]] : !cir.int +// CHECK: cir.func @intfunc() -> !s32i { +// CHECK: %[[VAL:.*]] = cir.const #cir.int<42> : !s32i +// CHECK: cir.return %[[VAL]] : !s32i // CHECK: } // int scopes() { @@ -34,52 +39,52 @@ cir.func @intfunc() -> !cir.int { // } // } //} -cir.func @scopes() -> !cir.int { +cir.func @scopes() -> !s32i { cir.scope { cir.scope { - %0 = cir.const #cir.int<99> : !cir.int - cir.return %0 : !cir.int + %0 = cir.const #cir.int<99> : !s32i + cir.return %0 : !s32i } } cir.trap } -// CHECK: cir.func @scopes() -> !cir.int { +// CHECK: cir.func @scopes() -> !s32i { // CHECK: cir.scope { // CHECK: cir.scope { -// CHECK: %[[VAL:.*]] = cir.const #cir.int<99> : !cir.int -// CHECK: cir.return %[[VAL]] : !cir.int +// 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() -> !cir.int { - %0 = cir.const #cir.int<42> : !cir.int - cir.return %0 : !cir.int +cir.func @longfunc() -> !s64i { + %0 = cir.const #cir.int<42> : !s64i + cir.return %0 : !s64i } -// CHECK: cir.func @longfunc() -> !cir.int -// CHECK: %0 = cir.const #cir.int<42> : !cir.int -// CHECK: cir.return %0 : !cir.int +// 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() -> !cir.int { - %0 = cir.const #cir.int<42> : !cir.int - cir.return %0 : !cir.int +cir.func @unsignedfunc() -> !u32i { + %0 = cir.const #cir.int<42> : !u32i + cir.return %0 : !u32i } -// CHECK: cir.func @unsignedfunc() -> !cir.int -// CHECK: %[[VAL:.*]] = cir.const #cir.int<42> : !cir.int -// CHECK: cir.return %[[VAL]] : !cir.int +// 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() -> !cir.int { - %0 = cir.const #cir.int<42> : !cir.int - cir.return %0 : !cir.int +cir.func @ullfunc() -> !u64i { + %0 = cir.const #cir.int<42> : !u64i + cir.return %0 : !u64i } -// CHECK: cir.func @ullfunc() -> !cir.int -// CHECK: %[[VAL:.*]] = cir.const #cir.int<42> : !cir.int -// CHECK: cir.return %[[VAL:.*]] : !cir.int +// CHECK: cir.func @ullfunc() -> !u64i +// CHECK: %[[VAL:.*]] = cir.const #cir.int<42> : !u64i +// CHECK: cir.return %[[VAL:.*]] : !u64i // CHECK: } } diff --git a/clang/test/CIR/IR/global-var-linkage.cir b/clang/test/CIR/IR/global-var-linkage.cir index 055201b27000d..6486b700bdbb2 100644 --- a/clang/test/CIR/IR/global-var-linkage.cir +++ b/clang/test/CIR/IR/global-var-linkage.cir @@ -1,18 +1,20 @@ // RUN: cir-opt %s -o %t.cir // RUN: FileCheck --input-file=%t.cir %s +!s32i = !cir.int + module attributes {cir.triple = "x86_64-unknown-linux-gnu"} { - cir.global external @aaaa : !cir.int - cir.global internal @bbbb : !cir.int - cir.global linkonce_odr @cccc : !cir.int - cir.global internal @ffff = #cir.int<0> : !cir.int - cir.global weak_odr @dddd : !cir.int + cir.global external @aaaa : !s32i + cir.global internal @bbbb : !s32i + cir.global linkonce_odr @cccc : !s32i + cir.global internal @ffff = #cir.int<0> : !s32i + cir.global weak_odr @dddd : !s32i } // CHECK: module attributes {cir.triple = "x86_64-unknown-linux-gnu"} { -// CHECK: cir.global external @aaaa : !cir.int -// CHECK: cir.global internal @bbbb : !cir.int -// CHECK: cir.global linkonce_odr @cccc : !cir.int -// CHECK: cir.global internal @ffff = #cir.int<0> : !cir.int -// CHECK: cir.global weak_odr @dddd : !cir.int +// CHECK: cir.global external @aaaa : !s32i +// CHECK: cir.global internal @bbbb : !s32i +// CHECK: cir.global linkonce_odr @cccc : !s32i +// CHECK: cir.global internal @ffff = #cir.int<0> : !s32i +// CHECK: cir.global weak_odr @dddd : !s32i // CHECK: } diff --git a/clang/test/CIR/IR/global.cir b/clang/test/CIR/IR/global.cir index 12eda5a946af5..e46a30c7cce40 100644 --- a/clang/test/CIR/IR/global.cir +++ b/clang/test/CIR/IR/global.cir @@ -1,23 +1,35 @@ // RUN: cir-opt %s -o - | FileCheck %s +!s8i = !cir.int +!s16i = !cir.int +!s32i = !cir.int +!s64i = !cir.int +!s128i = !cir.int +!u8i = !cir.int +!u16i = !cir.int +!u32i = !cir.int +!u64i = !cir.int +!u128i = !cir.int +!void = !cir.void + module attributes {cir.triple = "x86_64-unknown-linux-gnu"} { - cir.global external @c : !cir.int - cir.global external @sc : !cir.int - cir.global external @uc : !cir.int - cir.global external @ss : !cir.int - cir.global external @us = #cir.int<100> : !cir.int - cir.global external @si = #cir.int<42> : !cir.int - cir.global external @ui : !cir.int - cir.global external @sl : !cir.int - cir.global external @ul : !cir.int - cir.global external @sll : !cir.int - cir.global external @ull = #cir.int<123456> : !cir.int - cir.global external @s128 : !cir.int - cir.global external @u128 : !cir.int - cir.global external @wc : !cir.int - cir.global external @c8 : !cir.int - cir.global external @c16 : !cir.int - cir.global external @c32 : !cir.int + cir.global external @c : !s8i + cir.global external @sc : !s8i + cir.global external @uc : !u8i + cir.global external @ss : !s16i + cir.global external @us = #cir.int<100> : !u16i + cir.global external @si = #cir.int<42> : !s32i + cir.global external @ui : !u32i + cir.global external @sl : !s64i + cir.global external @ul : !u64i + cir.global external @sll : !s64i + cir.global external @ull = #cir.int<123456> : !u64i + cir.global external @s128 : !s128i + cir.global external @u128 : !u128i + cir.global external @wc : !s32i + cir.global external @c8 : !u8i + cir.global external @c16 : !u16i + cir.global external @c32 : !u32i cir.global external @sb20 : !cir.int cir.global external @ub48 : !cir.int cir.global external @f16 : !cir.f16 @@ -26,32 +38,32 @@ module attributes {cir.triple = "x86_64-unknown-linux-gnu"} { cir.global external @d = #cir.fp<1.250000e+00> : !cir.double cir.global external @ld : !cir.long_double cir.global external @f128 : !cir.f128 - cir.global external @vp : !cir.ptr - cir.global external @ip = #cir.ptr : !cir.ptr> + cir.global external @vp : !cir.ptr + cir.global external @ip = #cir.ptr : !cir.ptr cir.global external @dp : !cir.ptr - cir.global external @cpp : !cir.ptr>> + cir.global external @cpp : !cir.ptr> cir.global external @fp : !cir.ptr> - cir.global external @fpii = #cir.ptr : !cir.ptr) -> !cir.int>> - cir.global external @fpvar : !cir.ptr, ...)>> + cir.global external @fpii = #cir.ptr : !cir.ptr !s32i>> + cir.global external @fpvar : !cir.ptr> } -// CHECK: cir.global external @c : !cir.int -// CHECK: cir.global external @sc : !cir.int -// CHECK: cir.global external @uc : !cir.int -// CHECK: cir.global external @ss : !cir.int +// CHECK: cir.global external @c : !s8i +// CHECK: cir.global external @sc : !s8i +// CHECK: cir.global external @uc : !u8i +// CHECK: cir.global external @ss : !s16i // CHECK: cir.global external @us = #cir.int<100> // CHECK: cir.global external @si = #cir.int<42> -// CHECK: cir.global external @ui : !cir.int -// CHECK: cir.global external @sl : !cir.int -// CHECK: cir.global external @ul : !cir.int -// CHECK: cir.global external @sll : !cir.int -// CHECK: cir.global external @ull = #cir.int<123456> : !cir.int -// CHECK: cir.global external @s128 : !cir.int -// CHECK: cir.global external @u128 : !cir.int -// CHECK: cir.global external @wc : !cir.int -// CHECK: cir.global external @c8 : !cir.int -// CHECK: cir.global external @c16 : !cir.int -// CHECK: cir.global external @c32 : !cir.int +// CHECK: cir.global external @ui : !u32i +// CHECK: cir.global external @sl : !s64i +// CHECK: cir.global external @ul : !u64i +// CHECK: cir.global external @sll : !s64i +// CHECK: cir.global external @ull = #cir.int<123456> : !u64i +// CHECK: cir.global external @s128 : !s128i +// CHECK: cir.global external @u128 : !u128i +// CHECK: cir.global external @wc : !s32i +// CHECK: cir.global external @c8 : !u8i +// CHECK: cir.global external @c16 : !u16i +// CHECK: cir.global external @c32 : !u32i // CHECK: cir.global external @sb20 : !cir.int // CHECK: cir.global external @ub48 : !cir.int // CHECK: cir.global external @f16 : !cir.f16 @@ -60,10 +72,10 @@ module attributes {cir.triple = "x86_64-unknown-linux-gnu"} { // CHECK: cir.global external @d = #cir.fp<1.250000e+00> : !cir.double // CHECK: cir.global external @ld : !cir.long_double // CHECK: cir.global external @f128 : !cir.f128 -// CHECK: cir.global external @vp : !cir.ptr -// CHECK: cir.global external @ip = #cir.ptr : !cir.ptr> +// CHECK: cir.global external @vp : !cir.ptr +// CHECK: cir.global external @ip = #cir.ptr : !cir.ptr // CHECK: cir.global external @dp : !cir.ptr -// CHECK: cir.global external @cpp : !cir.ptr>> +// CHECK: cir.global external @cpp : !cir.ptr> // CHECK: cir.global external @fp : !cir.ptr> -// CHECK: cir.global external @fpii = #cir.ptr : !cir.ptr) -> !cir.int>> -// CHECK: cir.global external @fpvar : !cir.ptr, ...)>> +// CHECK: cir.global external @fpii = #cir.ptr : !cir.ptr !s32i>> +// CHECK: cir.global external @fpvar : !cir.ptr> diff --git a/clang/test/CIR/Lowering/func-simple.cpp b/clang/test/CIR/Lowering/func-simple.cpp index f22562a66e066..1eabc29eea6b0 100644 --- a/clang/test/CIR/Lowering/func-simple.cpp +++ b/clang/test/CIR/Lowering/func-simple.cpp @@ -30,13 +30,11 @@ int scopes() { // CHECK: br label %[[LABEL2:.*]] // CHECK: [[LABEL2]]: // CHECK: store i32 99, ptr %[[RV]], align 4 -// CHECK: br label %[[LABEL3:.*]] -// CHECK: [[LABEL3]]: // CHECK: %[[R:.*]] = load i32, ptr %[[RV]], align 4 // CHECK: ret i32 %[[R]] -// CHECK: [[LABEL4:.*]]: -// CHECK: br label %[[LABEL5:.*]] -// CHECK: [[LABEL5]]: +// CHECK: [[LABEL3:.*]]: +// CHECK: br label %[[LABEL4:.*]] +// CHECK: [[LABEL4]]: // CHECK: call void @llvm.trap() // CHECK: unreachable // CHECK: } diff --git a/clang/test/CIR/Transforms/canonicalize.cir b/clang/test/CIR/Transforms/canonicalize.cir index 9851299893af3..d61991aef6f01 100644 --- a/clang/test/CIR/Transforms/canonicalize.cir +++ b/clang/test/CIR/Transforms/canonicalize.cir @@ -1,20 +1,24 @@ // RUN: cir-opt %s -cir-canonicalize -o - | FileCheck %s +!s32i = !cir.int +!s64i = !cir.int +!u32i = !cir.int + module { cir.func @redundant_br() { cir.br ^bb1 ^bb1: // pred: ^bb0 - %0 = cir.alloca !cir.int, !cir.ptr>, ["a", init] {alignment = 4 : i64} - %1 = cir.const #cir.int<4> : !cir.int - cir.store %1, %0 : !cir.int, !cir.ptr> + %0 = cir.alloca !u32i, !cir.ptr, ["a", init] {alignment = 4 : i64} + %1 = cir.const #cir.int<4> : !u32i + cir.store %1, %0 : !u32i, !cir.ptr cir.br ^bb2 ^bb2: // pred: ^bb1 cir.return } // CHECK: cir.func @redundant_br() { - // CHECK-NEXT: %[[A:.*]] = cir.alloca !cir.int, !cir.ptr>, ["a", init] {alignment = 4 : i64} - // CHECK-NEXT: %[[FOUR:.*]] = cir.const #cir.int<4> : !cir.int - // CHECK-NEXT: cir.store %[[FOUR]], %[[A]] : !cir.int, !cir.ptr> + // CHECK-NEXT: %[[A:.*]] = cir.alloca !u32i, !cir.ptr, ["a", init] {alignment = 4 : i64} + // CHECK-NEXT: %[[FOUR:.*]] = cir.const #cir.int<4> : !u32i + // CHECK-NEXT: cir.store %[[FOUR]], %[[A]] : !u32i, !cir.ptr // CHECK-NEXT: cir.return // CHECK-NEXT: } @@ -28,34 +32,34 @@ module { // CHECK-NEXT: } cir.func @cast1(%arg0: !cir.bool) -> !cir.bool { - %0 = cir.cast(bool_to_int, %arg0 : !cir.bool), !cir.int - %1 = cir.cast(int_to_bool, %0 : !cir.int), !cir.bool + %0 = cir.cast(bool_to_int, %arg0 : !cir.bool), !s32i + %1 = cir.cast(int_to_bool, %0 : !s32i), !cir.bool cir.return %1 : !cir.bool } // CHECK: cir.func @cast1(%[[ARG0:.*]]: !cir.bool) -> !cir.bool // CHECK-NEXT: cir.return %[[ARG0]] : !cir.bool - cir.func @cast2(%arg0: !cir.int) -> !cir.bool { - %0 = cir.cast(int_to_bool, %arg0 : !cir.int), !cir.bool - %1 = cir.cast(bool_to_int, %0 : !cir.bool), !cir.int - %2 = cir.cast(integral, %1 : !cir.int), !cir.int - %3 = cir.cast(int_to_bool, %2 : !cir.int), !cir.bool + cir.func @cast2(%arg0: !s32i) -> !cir.bool { + %0 = cir.cast(int_to_bool, %arg0 : !s32i), !cir.bool + %1 = cir.cast(bool_to_int, %0 : !cir.bool), !s32i + %2 = cir.cast(integral, %1 : !s32i), !s64i + %3 = cir.cast(int_to_bool, %2 : !s64i), !cir.bool cir.return %3 : !cir.bool } - // CHECK: cir.func @cast2(%[[ARG0:.*]]: !cir.int) -> !cir.bool - // CHECK-NEXT: %[[CAST:.*]] = cir.cast(int_to_bool, %[[ARG0]] : !cir.int), !cir.bool + // CHECK: cir.func @cast2(%[[ARG0:.*]]: !s32i) -> !cir.bool + // CHECK-NEXT: %[[CAST:.*]] = cir.cast(int_to_bool, %[[ARG0]] : !s32i), !cir.bool // CHECK-NEXT: cir.return %[[CAST]] : !cir.bool - cir.func @no_fold_cast(%arg0: !cir.int) -> !cir.int { - %0 = cir.cast(int_to_bool, %arg0 : !cir.int), !cir.bool - %1 = cir.cast(bool_to_int, %0 : !cir.bool), !cir.int - %2 = cir.cast(integral, %1 : !cir.int), !cir.int - cir.return %2 : !cir.int + cir.func @no_fold_cast(%arg0: !s32i) -> !s64i { + %0 = cir.cast(int_to_bool, %arg0 : !s32i), !cir.bool + %1 = cir.cast(bool_to_int, %0 : !cir.bool), !s32i + %2 = cir.cast(integral, %1 : !s32i), !s64i + cir.return %2 : !s64i } - // CHECK: cir.func @no_fold_cast(%[[ARG0:.*]]: !cir.int) -> !cir.int - // CHECK-NEXT: %[[CAST:.*]] = cir.cast(int_to_bool, %[[ARG0]] : !cir.int), !cir.bool - // CHECK-NEXT: %[[CAST2:.*]] = cir.cast(bool_to_int, %[[CAST]] : !cir.bool), !cir.int - // CHECK-NEXT: %[[CAST3:.*]] = cir.cast(integral, %[[CAST2]] : !cir.int), !cir.int - // CHECK-NEXT: cir.return %[[CAST3]] : !cir.int + // CHECK: cir.func @no_fold_cast(%[[ARG0:.*]]: !s32i) -> !s64i + // CHECK-NEXT: %[[CAST:.*]] = cir.cast(int_to_bool, %[[ARG0]] : !s32i), !cir.bool + // CHECK-NEXT: %[[CAST2:.*]] = cir.cast(bool_to_int, %[[CAST]] : !cir.bool), !s32i + // CHECK-NEXT: %[[CAST3:.*]] = cir.cast(integral, %[[CAST2]] : !s32i), !s64i + // CHECK-NEXT: cir.return %[[CAST3]] : !s64i } diff --git a/clang/test/CIR/Transforms/scope.cir b/clang/test/CIR/Transforms/scope.cir index d4fc957884a43..2d14784c33f87 100644 --- a/clang/test/CIR/Transforms/scope.cir +++ b/clang/test/CIR/Transforms/scope.cir @@ -1,20 +1,22 @@ // RUN: cir-opt %s -cir-flatten-cfg -o - | FileCheck %s +!u32i = !cir.int + module { cir.func @foo() { cir.scope { - %0 = cir.alloca !cir.int, !cir.ptr>, ["a", init] {alignment = 4 : i64} - %1 = cir.const #cir.int<4> : !cir.int - cir.store %1, %0 : !cir.int, !cir.ptr> + %0 = cir.alloca !u32i, !cir.ptr, ["a", init] {alignment = 4 : i64} + %1 = cir.const #cir.int<4> : !u32i + cir.store %1, %0 : !u32i, !cir.ptr } cir.return } // CHECK: cir.func @foo() { // CHECK: cir.br ^bb1 // CHECK: ^bb1: // pred: ^bb0 -// CHECK: %0 = cir.alloca !cir.int, !cir.ptr>, ["a", init] {alignment = 4 : i64} -// CHECK: %1 = cir.const #cir.int<4> : !cir.int -// CHECK: cir.store %1, %0 : !cir.int, !cir.ptr> +// CHECK: %0 = cir.alloca !u32i, !cir.ptr, ["a", init] {alignment = 4 : i64} +// CHECK: %1 = cir.const #cir.int<4> : !u32i +// CHECK: cir.store %1, %0 : !u32i, !cir.ptr // CHECK: cir.br ^bb2 // CHECK: ^bb2: // pred: ^bb1 // CHECK: cir.return @@ -30,29 +32,29 @@ module { // CHECK: cir.return // CHECK: } - cir.func @scope_with_return() -> !cir.int { - %0 = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} + cir.func @scope_with_return() -> !u32i { + %0 = cir.alloca !u32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} cir.scope { - %2 = cir.const #cir.int<0> : !cir.int - cir.store %2, %0 : !cir.int, !cir.ptr> - %3 = cir.load %0 : !cir.ptr>, !cir.int - cir.return %3 : !cir.int + %2 = cir.const #cir.int<0> : !u32i + cir.store %2, %0 : !u32i, !cir.ptr + %3 = cir.load %0 : !cir.ptr, !u32i + cir.return %3 : !u32i } - %1 = cir.load %0 : !cir.ptr>, !cir.int - cir.return %1 : !cir.int + %1 = cir.load %0 : !cir.ptr, !u32i + cir.return %1 : !u32i } -// CHECK: cir.func @scope_with_return() -> !cir.int { -// CHECK: %0 = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} +// CHECK: cir.func @scope_with_return() -> !u32i { +// CHECK: %0 = cir.alloca !u32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} // CHECK: cir.br ^bb1 // CHECK: ^bb1: // pred: ^bb0 -// CHECK: %1 = cir.const #cir.int<0> : !cir.int -// CHECK: cir.store %1, %0 : !cir.int, !cir.ptr> -// CHECK: %2 = cir.load %0 : !cir.ptr>, !cir.int -// CHECK: cir.return %2 : !cir.int +// CHECK: %1 = cir.const #cir.int<0> : !u32i +// CHECK: cir.store %1, %0 : !u32i, !cir.ptr +// CHECK: %2 = cir.load %0 : !cir.ptr, !u32i +// CHECK: cir.return %2 : !u32i // CHECK: ^bb2: // no predecessors -// CHECK: %3 = cir.load %0 : !cir.ptr>, !cir.int -// CHECK: cir.return %3 : !cir.int +// CHECK: %3 = cir.load %0 : !cir.ptr, !u32i +// CHECK: cir.return %3 : !u32i // CHECK: } } diff --git a/clang/test/CIR/func-simple.cpp b/clang/test/CIR/func-simple.cpp index a0440a941d388..8ccf2110c6bd0 100644 --- a/clang/test/CIR/func-simple.cpp +++ b/clang/test/CIR/func-simple.cpp @@ -8,20 +8,16 @@ void empty() { } void voidret() { return; } // CHECK: cir.func @voidret() { -// CHECK: cir.br ^bb1 -// CHECK: ^bb1: // CHECK: cir.return // CHECK: } int intfunc() { return 42; } -// CHECK: cir.func @intfunc() -> !cir.int { -// CHECK: %0 = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} -// CHECK: %1 = cir.const #cir.int<42> : !cir.int -// CHECK: cir.store %1, %0 : !cir.int, !cir.ptr> -// CHECK: cir.br ^bb1 -// CHECK: ^bb1: -// CHECK: %2 = cir.load %0 : !cir.ptr>, !cir.int -// CHECK: cir.return %2 : !cir.int +// CHECK: cir.func @intfunc() -> !s32i { +// CHECK: %0 = cir.alloca !s32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} +// CHECK: %1 = cir.const #cir.int<42> : !s32i +// CHECK: cir.store %1, %0 : !s32i, !cir.ptr +// CHECK: %2 = cir.load %0 : !cir.ptr, !s32i +// CHECK: cir.return %2 : !s32i // CHECK: } int scopes() { @@ -31,52 +27,44 @@ int scopes() { } } } -// CHECK: cir.func @scopes() -> !cir.int { -// CHECK: %0 = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} +// CHECK: cir.func @scopes() -> !s32i { +// CHECK: %0 = cir.alloca !s32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} // CHECK: cir.scope { // CHECK: cir.scope { -// CHECK: %1 = cir.const #cir.int<99> : !cir.int -// CHECK: cir.store %1, %0 : !cir.int, !cir.ptr> -// CHECK: cir.br ^bb1 -// CHECK: ^bb1: -// CHECK: %2 = cir.load %0 : !cir.ptr>, !cir.int -// CHECK: cir.return %2 : !cir.int +// CHECK: %1 = cir.const #cir.int<99> : !s32i +// CHECK: cir.store %1, %0 : !s32i, !cir.ptr +// CHECK: %2 = cir.load %0 : !cir.ptr, !s32i +// CHECK: cir.return %2 : !s32i // CHECK: } // CHECK: } // CHECK: cir.trap // CHECK: } long longfunc() { return 42l; } -// CHECK: cir.func @longfunc() -> !cir.int -// CHECK: %0 = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 8 : i64} -// CHECK: %1 = cir.const #cir.int<42> : !cir.int -// CHECK: cir.store %1, %0 : !cir.int, !cir.ptr> -// CHECK: cir.br ^bb1 -// CHECK: ^bb1: -// CHECK: %2 = cir.load %0 : !cir.ptr>, !cir.int -// CHECK: cir.return %2 : !cir.int +// CHECK: cir.func @longfunc() -> !s64i +// CHECK: %0 = cir.alloca !s64i, !cir.ptr, ["__retval"] {alignment = 8 : i64} +// CHECK: %1 = cir.const #cir.int<42> : !s64i +// CHECK: cir.store %1, %0 : !s64i, !cir.ptr +// CHECK: %2 = cir.load %0 : !cir.ptr, !s64i +// CHECK: cir.return %2 : !s64i // CHECK: } unsigned unsignedfunc() { return 42u; } -// CHECK: cir.func @unsignedfunc() -> !cir.int -// CHECK: %0 = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 4 : i64} -// CHECK: %1 = cir.const #cir.int<42> : !cir.int -// CHECK: cir.store %1, %0 : !cir.int, !cir.ptr> -// CHECK: cir.br ^bb1 -// CHECK: ^bb1: -// CHECK: %2 = cir.load %0 : !cir.ptr>, !cir.int -// CHECK: cir.return %2 : !cir.int +// CHECK: cir.func @unsignedfunc() -> !u32i +// CHECK: %0 = cir.alloca !u32i, !cir.ptr, ["__retval"] {alignment = 4 : i64} +// CHECK: %1 = cir.const #cir.int<42> : !u32i +// CHECK: cir.store %1, %0 : !u32i, !cir.ptr +// CHECK: %2 = cir.load %0 : !cir.ptr, !u32i +// CHECK: cir.return %2 : !u32i // CHECK: } unsigned long long ullfunc() { return 42ull; } -// CHECK: cir.func @ullfunc() -> !cir.int -// CHECK: %0 = cir.alloca !cir.int, !cir.ptr>, ["__retval"] {alignment = 8 : i64} -// CHECK: %1 = cir.const #cir.int<42> : !cir.int -// CHECK: cir.store %1, %0 : !cir.int, !cir.ptr> -// CHECK: cir.br ^bb1 -// CHECK: ^bb1: -// CHECK: %2 = cir.load %0 : !cir.ptr>, !cir.int -// CHECK: cir.return %2 : !cir.int +// CHECK: cir.func @ullfunc() -> !u64i +// CHECK: %0 = cir.alloca !u64i, !cir.ptr, ["__retval"] {alignment = 8 : i64} +// CHECK: %1 = cir.const #cir.int<42> : !u64i +// CHECK: cir.store %1, %0 : !u64i, !cir.ptr +// CHECK: %2 = cir.load %0 : !cir.ptr, !u64i +// CHECK: cir.return %2 : !u64i // CHECK: } bool boolfunc() { return true; } @@ -84,8 +72,6 @@ bool boolfunc() { return true; } // CHECK: %0 = cir.alloca !cir.bool, !cir.ptr, ["__retval"] {alignment = 1 : i64} // CHECK: %1 = cir.const #true // CHECK: cir.store %1, %0 : !cir.bool, !cir.ptr -// CHECK: cir.br ^bb1 -// CHECK: ^bb1: // CHECK: %2 = cir.load %0 : !cir.ptr, !cir.bool // CHECK: cir.return %2 : !cir.bool // CHECK: } @@ -95,8 +81,6 @@ float floatfunc() { return 42.42f; } // CHECK: %0 = cir.alloca !cir.float, !cir.ptr, ["__retval"] {alignment = 4 : i64} // CHECK: %1 = cir.const #cir.fp<4.242 // CHECK: cir.store %1, %0 : !cir.float, !cir.ptr -// CHECK: cir.br ^bb1 -// CHECK: ^bb1: // CHECK: %2 = cir.load %0 : !cir.ptr, !cir.float // CHECK: cir.return %2 : !cir.float // CHECK: } @@ -106,8 +90,6 @@ double doublefunc() { return 42.42; } // CHECK: %0 = cir.alloca !cir.double, !cir.ptr, ["__retval"] {alignment = 8 : i64} // CHECK: %1 = cir.const #cir.fp<4.242 // CHECK: cir.store %1, %0 : !cir.double, !cir.ptr -// CHECK: cir.br ^bb1 -// CHECK: ^bb1: // CHECK: %2 = cir.load %0 : !cir.ptr, !cir.double // CHECK: cir.return %2 : !cir.double // CHECK: } diff --git a/clang/test/CIR/global-var-simple.cpp b/clang/test/CIR/global-var-simple.cpp index f18f00fd6bd13..020ef5f09c650 100644 --- a/clang/test/CIR/global-var-simple.cpp +++ b/clang/test/CIR/global-var-simple.cpp @@ -2,55 +2,55 @@ // RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o - | FileCheck %s char c; -// CHECK: cir.global external @c : !cir.int +// CHECK: cir.global external @c : !s8i signed char sc; -// CHECK: cir.global external @sc : !cir.int +// CHECK: cir.global external @sc : !s8i unsigned char uc; -// CHECK: cir.global external @uc : !cir.int +// CHECK: cir.global external @uc : !u8i short ss; -// CHECK: cir.global external @ss : !cir.int +// CHECK: cir.global external @ss : !s16i unsigned short us = 100; -// CHECK: cir.global external @us = #cir.int<100> : !cir.int +// CHECK: cir.global external @us = #cir.int<100> : !u16i int si = 42; -// CHECK: cir.global external @si = #cir.int<42> : !cir.int +// CHECK: cir.global external @si = #cir.int<42> : !s32i unsigned ui; -// CHECK: cir.global external @ui : !cir.int +// CHECK: cir.global external @ui : !u32i long sl; -// CHECK: cir.global external @sl : !cir.int +// CHECK: cir.global external @sl : !s64i unsigned long ul; -// CHECK: cir.global external @ul : !cir.int +// CHECK: cir.global external @ul : !u64i long long sll; -// CHECK: cir.global external @sll : !cir.int +// CHECK: cir.global external @sll : !s64i unsigned long long ull = 123456; -// CHECK: cir.global external @ull = #cir.int<123456> : !cir.int +// CHECK: cir.global external @ull = #cir.int<123456> : !u64i __int128 s128; -// CHECK: cir.global external @s128 : !cir.int +// CHECK: cir.global external @s128 : !s128i unsigned __int128 u128; -// CHECK: cir.global external @u128 : !cir.int +// CHECK: cir.global external @u128 : !u128i wchar_t wc; -// CHECK: cir.global external @wc : !cir.int +// CHECK: cir.global external @wc : !s32i char8_t c8; -// CHECK: cir.global external @c8 : !cir.int +// CHECK: cir.global external @c8 : !u8i char16_t c16; -// CHECK: cir.global external @c16 : !cir.int +// CHECK: cir.global external @c16 : !u16i char32_t c32; -// CHECK: cir.global external @c32 : !cir.int +// CHECK: cir.global external @c32 : !u32i _BitInt(20) sb20; // CHECK: cir.global external @sb20 : !cir.int @@ -80,22 +80,22 @@ __float128 f128; // CHECK: cir.global external @f128 : !cir.f128 void *vp; -// CHECK: cir.global external @vp : !cir.ptr +// CHECK: cir.global external @vp : !cir.ptr int *ip = 0; -// CHECK: cir.global external @ip = #cir.ptr : !cir.ptr> +// CHECK: cir.global external @ip = #cir.ptr : !cir.ptr double *dp; // CHECK: cir.global external @dp : !cir.ptr char **cpp; -// CHECK: cir.global external @cpp : !cir.ptr>> +// CHECK: cir.global external @cpp : !cir.ptr> void (*fp)(); // CHECK: cir.global external @fp : !cir.ptr> int (*fpii)(int) = 0; -// CHECK: cir.global external @fpii = #cir.ptr : !cir.ptr) -> !cir.int>> +// CHECK: cir.global external @fpii = #cir.ptr : !cir.ptr !s32i>> void (*fpvar)(int, ...); -// CHECK: cir.global external @fpvar : !cir.ptr, ...)>> +// CHECK: cir.global external @fpvar : !cir.ptr> diff --git a/clang/test/CIR/mlprint.c b/clang/test/CIR/mlprint.c index 51ebe526a02e6..755a6cb47855e 100644 --- a/clang/test/CIR/mlprint.c +++ b/clang/test/CIR/mlprint.c @@ -7,7 +7,7 @@ int foo(void) { } // CIR: IR Dump After CIRCanonicalize (cir-canonicalize) -// CIR: cir.func @foo() -> !cir.int +// CIR: cir.func @foo() -> !s32i // LLVM: IR Dump After cir::direct::ConvertCIRToLLVMPass (cir-flat-to-llvm) // LLVM: llvm.func @foo() -> i32 // LLVM: IR Dump After diff --git a/clang/test/CMakeLists.txt b/clang/test/CMakeLists.txt index 51fd4820d7edb..af3bc3853edfc 100644 --- a/clang/test/CMakeLists.txt +++ b/clang/test/CMakeLists.txt @@ -89,6 +89,7 @@ list(APPEND CLANG_TEST_DEPS if(CLANG_ENABLE_CIR) list(APPEND CLANG_TEST_DEPS cir-opt + cir-translate ) endif()