1- // RUN: cir-opt %s -cir-to-llvm -o - | FileCheck %s -check-prefix=MLIR
2- // RUN: cir-translate %s -cir-to-llvmir | FileCheck %s -check-prefix=LLVM
1+ // RUN: cir-opt %s -cir-to-llvm -o %t.cir
2+ // RUN: FileCheck %s --input-file=%t.cir
3+
34!s16i = !cir.int<s, 16>
45!s32i = !cir.int<s, 32>
56!s64i = !cir.int<s, 64>
910!u64i = !cir.int<u, 64>
1011
1112module {
12- cir.func @foo(%arg0: !s32i) -> !s32i {
13- %4 = cir.cast(int_to_bool, %arg0 : !s32i), !cir.bool
14- cir.return %arg0 : !s32i
15- }
16-
17- // MLIR: llvm.func @foo(%arg0: i32) -> i32
18- // MLIR-NEXT: [[v0:%[0-9]]] = llvm.mlir.constant(0 : i32) : i32
19- // MLIR-NEXT: [[v1:%[0-9]]] = llvm.icmp "ne" %arg0, %0 : i32
20- // MLIR-NEXT: [[v2:%[0-9]]] = llvm.zext %1 : i1 to i8
21- // MLIR-NEXT: llvm.return %arg0 : i32
22- // MLIR-NEXT: }
23-
24-
25- // LLVM: define i32 @foo(i32 %0)
26- // LLVM-NEXT: %2 = icmp ne i32 %0, 0
27- // LLVM-NEXT: %3 = zext i1 %2 to i8
28- // LLVM-NEXT: ret i32 %0
29- // LLVM-NEXT: }
30-
3113 cir.func @cStyleCasts(%arg0: !u32i, %arg1: !s32i, %arg2: f32) -> !s32i {
32- // MLIR : llvm.func @cStyleCasts
14+ // CHECK : llvm.func @cStyleCasts
3315 %0 = cir.alloca !u32i, cir.ptr <!u32i>, ["x1", init] {alignment = 4 : i64}
3416 %1 = cir.alloca !s32i, cir.ptr <!s32i>, ["x2", init] {alignment = 4 : i64}
3517 %20 = cir.alloca !s16i, cir.ptr <!s16i>, ["x4", init] {alignment = 2 : i64}
@@ -46,47 +28,51 @@ module {
4628 // Integer casts.
4729 %9 = cir.load %0 : cir.ptr <!u32i>, !u32i
4830 %10 = cir.cast(integral, %9 : !u32i), !s8i
49- // MLIR : %{{[0-9]+}} = llvm.trunc %{{[0-9]+}} : i32 to i8
31+ // CHECK : %{{[0-9]+}} = llvm.trunc %{{[0-9]+}} : i32 to i8
5032 cir.store %10, %3 : !s8i, cir.ptr <!s8i>
5133 %11 = cir.load %1 : cir.ptr <!s32i>, !s32i
5234 %12 = cir.cast(integral, %11 : !s32i), !s16i
53- // MLIR : %{{[0-9]+}} = llvm.trunc %{{[0-9]+}} : i32 to i16
35+ // CHECK : %{{[0-9]+}} = llvm.trunc %{{[0-9]+}} : i32 to i16
5436 cir.store %12, %4 : !s16i, cir.ptr <!s16i>
5537 %13 = cir.load %0 : cir.ptr <!u32i>, !u32i
5638 %14 = cir.cast(integral, %13 : !u32i), !s64i
57- // MLIR : %{{[0-9]+}} = llvm.zext %{{[0-9]+}} : i32 to i64
39+ // CHECK : %{{[0-9]+}} = llvm.zext %{{[0-9]+}} : i32 to i64
5840 cir.store %14, %5 : !s64i, cir.ptr <!s64i>
5941 %15 = cir.load %1 : cir.ptr <!s32i>, !s32i
6042 %16 = cir.cast(integral, %15 : !s32i), !s64i
61- // MLIR : %{{[0-9]+}} = llvm.sext %{{[0-9]+}} : i32 to i64
43+ // CHECK : %{{[0-9]+}} = llvm.sext %{{[0-9]+}} : i32 to i64
6244 %30 = cir.cast(integral, %arg1 : !s32i), !u32i
6345 // Should not produce a cast.
6446 %32 = cir.cast(integral, %arg0 : !u32i), !s32i
6547 // Should not produce a cast.
6648 %21 = cir.load %20 : cir.ptr <!s16i>, !s16i
6749 %22 = cir.cast(integral, %21 : !s16i), !u64i
68- // MLIR: %[[TMP:[0-9]+]] = llvm.sext %{{[0-9]+}} : i16 to i64
50+ // CHECK: %[[TMP:[0-9]+]] = llvm.sext %{{[0-9]+}} : i16 to i64
51+ %33 = cir.cast(int_to_bool, %arg1 : !s32i), !cir.bool
52+ // CHECK: %[[#ZERO:]] = llvm.mlir.constant(0 : i32) : i32
53+ // CHECK: %[[#CMP:]] = llvm.icmp "ne" %arg1, %[[#ZERO]] : i32
54+ // CHECK: %{{.+}} = llvm.zext %[[#CMP]] : i1 to i8
6955
7056 // Pointer casts.
7157 cir.store %16, %6 : !s64i, cir.ptr <!s64i>
7258 %17 = cir.cast(array_to_ptrdecay, %7 : !cir.ptr<!cir.array<!s32i x 3>>), !cir.ptr<!s32i>
7359 cir.store %17, %8 : !cir.ptr<!s32i>, cir.ptr <!cir.ptr<!s32i>>
74- // MLIR : %{{[0-9]+}} = llvm.getelementptr %{{[0-9]+}}[0] : (!llvm.ptr) -> !llvm.ptr
60+ // CHECK : %{{[0-9]+}} = llvm.getelementptr %{{[0-9]+}}[0] : (!llvm.ptr) -> !llvm.ptr, i32
7561 %23 = cir.cast(int_to_ptr, %22 : !u64i), !cir.ptr<!u8i>
76- // MLIR : %[[TMP2:[0-9]+]] = llvm.inttoptr %[[TMP]] : i64 to !llvm.ptr
62+ // CHECK : %[[TMP2:[0-9]+]] = llvm.inttoptr %[[TMP]] : i64 to !llvm.ptr
7763 %24 = cir.cast(ptr_to_int, %23 : !cir.ptr<!u8i>), !s32i
78- // MLIR : %{{[0-9]+}} = llvm.ptrtoint %[[TMP2]] : !llvm.ptr to i32
64+ // CHECK : %{{[0-9]+}} = llvm.ptrtoint %[[TMP2]] : !llvm.ptr to i32
7965 %29 = cir.cast(ptr_to_bool, %23 : !cir.ptr<!u8i>), !cir.bool
8066
8167 // Floating point casts.
8268 %25 = cir.cast(int_to_float, %arg1 : !s32i), f32
83- // MLIR : %{{.+}} = llvm.sitofp %{{.+}} : i32 to f32
69+ // CHECK : %{{.+}} = llvm.sitofp %{{.+}} : i32 to f32
8470 %26 = cir.cast(int_to_float, %arg0 : !u32i), f32
85- // MLIR : %{{.+}} = llvm.uitofp %{{.+}} : i32 to f32
71+ // CHECK : %{{.+}} = llvm.uitofp %{{.+}} : i32 to f32
8672 %27 = cir.cast(float_to_int, %arg2 : f32), !s32i
87- // MLIR : %{{.+}} = llvm.fptosi %{{.+}} : f32 to i32
73+ // CHECK : %{{.+}} = llvm.fptosi %{{.+}} : f32 to i32
8874 %28 = cir.cast(float_to_int, %arg2 : f32), !u32i
89- // MLIR : %{{.+}} = llvm.fptoui %{{.+}} : f32 to i32
75+ // CHECK : %{{.+}} = llvm.fptoui %{{.+}} : f32 to i32
9076 %18 = cir.const(#cir.int<0> : !s32i) : !s32i
9177
9278 cir.store %18, %2 : !s32i, cir.ptr <!s32i>
0 commit comments