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
+
3
4
!s16i = !cir.int<s, 16>
4
5
!s32i = !cir.int<s, 32>
5
6
!s64i = !cir.int<s, 64>
9
10
!u64i = !cir.int<u, 64>
10
11
11
12
module {
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
-
31
13
cir.func @cStyleCasts(%arg0: !u32i, %arg1: !s32i, %arg2: f32) -> !s32i {
32
- // MLIR : llvm.func @cStyleCasts
14
+ // CHECK : llvm.func @cStyleCasts
33
15
%0 = cir.alloca !u32i, cir.ptr <!u32i>, ["x1", init] {alignment = 4 : i64}
34
16
%1 = cir.alloca !s32i, cir.ptr <!s32i>, ["x2", init] {alignment = 4 : i64}
35
17
%20 = cir.alloca !s16i, cir.ptr <!s16i>, ["x4", init] {alignment = 2 : i64}
@@ -46,47 +28,51 @@ module {
46
28
// Integer casts.
47
29
%9 = cir.load %0 : cir.ptr <!u32i>, !u32i
48
30
%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
50
32
cir.store %10, %3 : !s8i, cir.ptr <!s8i>
51
33
%11 = cir.load %1 : cir.ptr <!s32i>, !s32i
52
34
%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
54
36
cir.store %12, %4 : !s16i, cir.ptr <!s16i>
55
37
%13 = cir.load %0 : cir.ptr <!u32i>, !u32i
56
38
%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
58
40
cir.store %14, %5 : !s64i, cir.ptr <!s64i>
59
41
%15 = cir.load %1 : cir.ptr <!s32i>, !s32i
60
42
%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
62
44
%30 = cir.cast(integral, %arg1 : !s32i), !u32i
63
45
// Should not produce a cast.
64
46
%32 = cir.cast(integral, %arg0 : !u32i), !s32i
65
47
// Should not produce a cast.
66
48
%21 = cir.load %20 : cir.ptr <!s16i>, !s16i
67
49
%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
69
55
70
56
// Pointer casts.
71
57
cir.store %16, %6 : !s64i, cir.ptr <!s64i>
72
58
%17 = cir.cast(array_to_ptrdecay, %7 : !cir.ptr<!cir.array<!s32i x 3>>), !cir.ptr<!s32i>
73
59
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
75
61
%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
77
63
%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
79
65
%29 = cir.cast(ptr_to_bool, %23 : !cir.ptr<!u8i>), !cir.bool
80
66
81
67
// Floating point casts.
82
68
%25 = cir.cast(int_to_float, %arg1 : !s32i), f32
83
- // MLIR : %{{.+}} = llvm.sitofp %{{.+}} : i32 to f32
69
+ // CHECK : %{{.+}} = llvm.sitofp %{{.+}} : i32 to f32
84
70
%26 = cir.cast(int_to_float, %arg0 : !u32i), f32
85
- // MLIR : %{{.+}} = llvm.uitofp %{{.+}} : i32 to f32
71
+ // CHECK : %{{.+}} = llvm.uitofp %{{.+}} : i32 to f32
86
72
%27 = cir.cast(float_to_int, %arg2 : f32), !s32i
87
- // MLIR : %{{.+}} = llvm.fptosi %{{.+}} : f32 to i32
73
+ // CHECK : %{{.+}} = llvm.fptosi %{{.+}} : f32 to i32
88
74
%28 = cir.cast(float_to_int, %arg2 : f32), !u32i
89
- // MLIR : %{{.+}} = llvm.fptoui %{{.+}} : f32 to i32
75
+ // CHECK : %{{.+}} = llvm.fptoui %{{.+}} : f32 to i32
90
76
%18 = cir.const(#cir.int<0> : !s32i) : !s32i
91
77
92
78
cir.store %18, %2 : !s32i, cir.ptr <!s32i>
0 commit comments