================ @@ -1,141 +1,368 @@ -// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o - 2>&1 | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -fclangir -emit-cir %s -o %t.cir +// RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -fclangir -emit-llvm %s -o %t-cir.ll +// RUN: FileCheck --input-file=%t-cir.ll %s -check-prefix=LLVM +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -Wno-unused-value -emit-llvm %s -o %t.ll +// RUN: FileCheck --input-file=%t.ll %s -check-prefix=OGCG int a[10]; -// CHECK: cir.global external @a = #cir.zero : !cir.array<!s32i x 10> +// CIR: cir.global external @a = #cir.zero : !cir.array<!s32i x 10> + +// LLVM: @a = dso_local global [10 x i32] zeroinitializer + +// OGCG: @a = global [10 x i32] zeroinitializer int aa[10][5]; -// CHECK: cir.global external @aa = #cir.zero : !cir.array<!cir.array<!s32i x 5> x 10> +// CIR: cir.global external @aa = #cir.zero : !cir.array<!cir.array<!s32i x 5> x 10> + +// LLVM: @aa = dso_local global [10 x [5 x i32]] zeroinitializer + +// OGCG: @aa = global [10 x [5 x i32]] zeroinitializer extern int b[10]; -// CHECK: cir.global external @b = #cir.zero : !cir.array<!s32i x 10> +// CIR: cir.global external @b = #cir.zero : !cir.array<!s32i x 10> + +// LLVM: @b = dso_local global [10 x i32] zeroinitializer extern int bb[10][5]; -// CHECK: cir.global external @bb = #cir.zero : !cir.array<!cir.array<!s32i x 5> x 10> +// CIR: cir.global external @bb = #cir.zero : !cir.array<!cir.array<!s32i x 5> x 10> + +// LLVM: @bb = dso_local global [10 x [5 x i32]] zeroinitializer int c[10] = {}; -// CHECK: cir.global external @c = #cir.zero : !cir.array<!s32i x 10> +// CIR: cir.global external @c = #cir.zero : !cir.array<!s32i x 10> + +// LLVM: @c = dso_local global [10 x i32] zeroinitializer + +// OGCG: @c = global [10 x i32] zeroinitializer int d[3] = {1, 2, 3}; -// 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> +// CIR: cir.global external @d = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<3> : !s32i]> : !cir.array<!s32i x 3> + +// LLVM: @d = dso_local global [3 x i32] [i32 1, i32 2, i32 3] + +// OGCG: @d = global [3 x i32] [i32 1, i32 2, i32 3] int dd[3][2] = {{1, 2}, {3, 4}, {5, 6}}; -// 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> +// CIR: 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> + +// LLVM: @dd = dso_local global [3 x [2 x i32]] [ +// LLVM: [2 x i32] [i32 1, i32 2], [2 x i32] +// LLVM: [i32 3, i32 4], [2 x i32] [i32 5, i32 6]] + +// OGCG: @dd = global [3 x [2 x i32]] [ +// OGCG: [2 x i32] [i32 1, i32 2], [2 x i32] +// OGCG: [i32 3, i32 4], [2 x i32] [i32 5, i32 6]] int e[10] = {1, 2}; -// CHECK: cir.global external @e = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i], trailing_zeros> : !cir.array<!s32i x 10> +// CIR: cir.global external @e = #cir.const_array<[#cir.int<1> : !s32i, #cir.int<2> : !s32i], trailing_zeros> : !cir.array<!s32i x 10> + +// LLVM: @e = dso_local global [10 x i32] [i32 1, i32 2, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0] int f[5] = {1, 2}; -// 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> +// CIR: 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> + +// LLVM: @f = dso_local global [5 x i32] [i32 1, i32 2, i32 0, i32 0, i32 0] + +// OGCG: @f = global [5 x i32] [i32 1, i32 2, i32 0, i32 0, i32 0] + +// OGCG: @[[FUN2_ARR:.*]] = private unnamed_addr constant [2 x i32] [i32 5, i32 0], align 4 +// OGCG: @[[FUN3_ARR:.*]] = private unnamed_addr constant [2 x i32] [i32 5, i32 6], align 4 +// OGCG: @[[FUN4_ARR:.*]] = private unnamed_addr constant [2 x [1 x i32]] [ +// OGCG: [1 x i32] [i32 5], [1 x i32] [i32 6]], align 4 +// OGCG: @[[FUN5_ARR:.*]] = private unnamed_addr constant [2 x [1 x i32]] [ +// OGCG: [1 x i32] [i32 5], [1 x i32] zeroinitializer], align 4 void func() { int arr[10]; - - // CHECK: %[[ARR:.*]] = cir.alloca !cir.array<!s32i x 10>, !cir.ptr<!cir.array<!s32i x 10>>, ["arr"] + int e = arr[0]; + int e2 = arr[1]; } +// CIR: %[[ARR:.*]] = cir.alloca !cir.array<!s32i x 10>, !cir.ptr<!cir.array<!s32i x 10>>, ["arr"] +// CIR: %[[INIT:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init] +// CIR: %[[INIT_2:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["e2", init] +// CIR: %[[IDX:.*]] = cir.const #cir.int<0> : !s32i +// CIR: %[[ARR_PTR:.*]] = cir.cast(array_to_ptrdecay, %[[ARR]] : !cir.ptr<!cir.array<!s32i x 10>>), !cir.ptr<!s32i> +// CIR: %[[ELE_PTR:.*]] = cir.ptr_stride(%[[ARR_PTR]] : !cir.ptr<!s32i>, %[[IDX]] : !s32i), !cir.ptr<!s32i> +// CIR: %[[TMP:.*]] = cir.load %[[ELE_PTR]] : !cir.ptr<!s32i>, !s32i +// CIR" cir.store %[[TMP]], %[[INIT]] : !s32i, !cir.ptr<!s32i> +// CIR: %[[IDX:.*]] = cir.const #cir.int<1> : !s32i +// CIR: %[[ARR_PTR:.*]] = cir.cast(array_to_ptrdecay, %[[ARR]] : !cir.ptr<!cir.array<!s32i x 10>>), !cir.ptr<!s32i> +// CIR: %[[ELE_PTR:.*]] = cir.ptr_stride(%[[ARR_PTR]] : !cir.ptr<!s32i>, %[[IDX]] : !s32i), !cir.ptr<!s32i> +// CIR: %[[TMP:.*]] = cir.load %[[ELE_PTR]] : !cir.ptr<!s32i>, !s32i +// CIR" cir.store %[[TMP]], %[[INIT_2]] : !s32i, !cir.ptr<!s32i> + +// LLVM: define void @func() +// LLVM-NEXT: %[[ARR_ALLOCA:.*]] = alloca [10 x i32], i64 1, align 16 +// LLVM-NEXT: %[[INIT:.*]] = alloca i32, i64 1, align 4 +// LLVM-NEXT: %[[INIT_2:.*]] = alloca i32, i64 1, align 4 +// LLVM-NEXT: %[[ARR_PTR:.*]] = getelementptr i32, ptr %[[ARR_ALLOCA]], i32 0 +// LLVM-NEXT: %[[ELE_PTR:.*]] = getelementptr i32, ptr %[[ARR_PTR]], i64 0 +// LLVM-NEXT: %[[TMP:.*]] = load i32, ptr %[[ELE_PTR]], align 4 +// LLVM-NEXT: store i32 %[[TMP]], ptr %[[INIT]], align 4 +// LLVM-NEXT: %[[ARR_PTR:.*]] = getelementptr i32, ptr %[[ARR_ALLOCA]], i32 0 +// LLVM-NEXT: %[[ELE_PTR:.*]] = getelementptr i32, ptr %[[ARR_PTR]], i64 1 +// LLVM-NEXT: %[[TMP:.*]] = load i32, ptr %[[ELE_PTR]], align 4 + +// OGCG: %arr = alloca [10 x i32], align 16 ---------------- AmrDeveloper wrote:
Right, i will create a follow up patch for it after mering this Thanks https://github.com/llvm/llvm-project/pull/134536 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits