1
- // Tests comparison operations.
2
- // These tests are intended to be target agnostic: they should yield the same results
3
- // regardless of the target platform.
4
-
5
1
// RUN: mlir-opt %s --convert-scf-to-cf --convert-cf-to-llvm --convert-vector-to-llvm \
6
2
// RUN: --convert-func-to-llvm --convert-arith-to-llvm | \
7
3
// RUN: mlir-cpu-runner -e entry -entry-point-result=void \
8
4
// RUN: --shared-libs=%mlir_c_runner_utils | \
9
5
// RUN: FileCheck %s --match-full-lines
10
6
11
- func.func @slt_cmpi_i1 (%v1 : i1 , %v2 : i1 ) {
12
- vector.print str " @slt_cmpi_i1 \n "
7
+ func.func @cmpi_slt_i1 (%v1 : i1 , %v2 : i1 ) {
8
+ vector.print str " @cmpi_slt_i1 \n "
13
9
%res = arith.cmpi slt , %v1 , %v2 : i1
14
10
vector.print %res : i1
15
11
return
16
12
}
17
13
18
- func.func @sle_cmpi_i1 (%v1 : i1 , %v2 : i1 ) {
19
- vector.print str " @sle_cmpi_i1 \n "
14
+ func.func @cmpi_sle_i1 (%v1 : i1 , %v2 : i1 ) {
15
+ vector.print str " @cmpi_sle_i1 \n "
20
16
%res = arith.cmpi sle , %v1 , %v2 : i1
21
17
vector.print %res : i1
22
18
return
23
19
}
24
20
25
- func.func @sgt_cmpi_i1 (%v1 : i1 , %v2 : i1 ) {
26
- vector.print str " @sgt_cmpi_i1 \n "
21
+ func.func @cmpi_sgt_i1 (%v1 : i1 , %v2 : i1 ) {
22
+ vector.print str " @cmpi_sgt_i1 \n "
27
23
%res = arith.cmpi sgt , %v1 , %v2 : i1
28
24
vector.print %res : i1
29
25
return
30
26
}
31
27
32
- func.func @sge_cmpi_i1 (%v1 : i1 , %v2 : i1 ) {
33
- vector.print str " @sge_cmpi_i1 \n "
28
+ func.func @cmpi_sge_i1 (%v1 : i1 , %v2 : i1 ) {
29
+ vector.print str " @cmpi_sge_i1 \n "
34
30
%res = arith.cmpi sge , %v1 , %v2 : i1
35
31
vector.print %res : i1
36
32
return
37
33
}
38
34
39
- func.func @signed_cmpi () {
35
+ func.func @cmpi_signed () {
40
36
// ------------------------------------------------
41
37
// Test i1
42
38
// ------------------------------------------------
@@ -45,37 +41,38 @@ func.func @signed_cmpi() {
45
41
%true_i1_n1 = arith.constant -1 : i1
46
42
47
43
// sge 0 -1, sge 0 1, should be true
44
+ // since the bitvector `1` is interpreted as the int value -1 in signed comparisons
48
45
// sge 0 -1 == sge 0 1 == true (1)
49
46
50
- // CHECK-LABEL: @sge_cmpi_i1
47
+ // CHECK-LABEL: @cmpi_sge_i1
51
48
// CHECK-NEXT: 1
52
- func.call @sge_cmpi_i1 (%false_i1 , %true_i1_n1 ) : (i1 , i1 ) -> ()
49
+ func.call @cmpi_sge_i1 (%false_i1 , %true_i1_n1 ) : (i1 , i1 ) -> ()
53
50
54
- // CHECK-LABEL: @sge_cmpi_i1
51
+ // CHECK-LABEL: @cmpi_sge_i1
55
52
// CHECK-NEXT: 1
56
- func.call @sge_cmpi_i1 (%false_i1 , %true_i1 ) : (i1 , i1 ) -> ()
53
+ func.call @cmpi_sge_i1 (%false_i1 , %true_i1 ) : (i1 , i1 ) -> ()
57
54
58
55
%false = arith.constant false
59
56
%true = arith.constant true
60
57
61
58
// signed comparisons on i1s
62
59
// slt 0 1 = false, sle 0 1 = false, sgt 0 1 = true, sge 0 1 = true
63
60
64
- // CHECK-LABEL: @slt_cmpi_i1
61
+ // CHECK-LABEL: @cmpi_slt_i1
65
62
// CHECK-NEXT: 0
66
- func.call @slt_cmpi_i1 (%false , %true ) : (i1 , i1 ) -> ()
63
+ func.call @cmpi_slt_i1 (%false , %true ) : (i1 , i1 ) -> ()
67
64
68
- // CHECK-LABEL: @sle_cmpi_i1
65
+ // CHECK-LABEL: @cmpi_sle_i1
69
66
// CHECK-NEXT: 0
70
- func.call @sle_cmpi_i1 (%false , %true ) : (i1 , i1 ) -> ()
67
+ func.call @cmpi_sle_i1 (%false , %true ) : (i1 , i1 ) -> ()
71
68
72
- // CHECK-LABEL: @sgt_cmpi_i1
69
+ // CHECK-LABEL: @cmpi_sgt_i1
73
70
// CHECK-NEXT: 1
74
- func.call @sgt_cmpi_i1 (%false , %true ) : (i1 , i1 ) -> ()
71
+ func.call @cmpi_sgt_i1 (%false , %true ) : (i1 , i1 ) -> ()
75
72
76
- // CHECK-LABEL: @sge_cmpi_i1
73
+ // CHECK-LABEL: @cmpi_sge_i1
77
74
// CHECK-NEXT: 1
78
- func.call @sge_cmpi_i1 (%false , %true ) : (i1 , i1 ) -> ()
75
+ func.call @cmpi_sge_i1 (%false , %true ) : (i1 , i1 ) -> ()
79
76
80
77
// check that addui_extended overflow bit is treated as -1 in comparison operations
81
78
// in the case of an overflow
@@ -84,43 +81,43 @@ func.func @signed_cmpi() {
84
81
%n1_i64 = arith.constant -1 : i64
85
82
%sum , %overflow = arith.addui_extended %n1_i64 , %n1_i64 : i64 , i1
86
83
87
- // CHECK-LABEL: @sge_cmpi_i1
84
+ // CHECK-LABEL: @cmpi_sge_i1
88
85
// CHECK-NEXT: 0
89
- func.call @sge_cmpi_i1 (%overflow , %false ) : (i1 , i1 ) -> ()
86
+ func.call @cmpi_sge_i1 (%overflow , %false ) : (i1 , i1 ) -> ()
90
87
91
88
// ------------------------------------------------
92
- // Test i8, i16 etc.. TODO
89
+ // TODO: Test i8, i16 etc..
93
90
// ------------------------------------------------
94
91
return
95
92
}
96
93
97
- func.func @ult_cmpi_index (%v1 : index , %v2 : index ) {
98
- vector.print str " @ult_cmpi_index \n "
94
+ func.func @cmpi_ult_index (%v1 : index , %v2 : index ) {
95
+ vector.print str " @cmpi_ult_index \n "
99
96
%res = arith.cmpi ult , %v1 , %v2 : index
100
97
vector.print %res : i1
101
98
return
102
99
}
103
100
104
- func.func @unsigned_cmpi () {
101
+ func.func @cmpi_unsigned () {
105
102
// ------------------------------------------------
106
103
// Test index
107
104
// ------------------------------------------------
108
105
// 0 `ult` -2^63 = true
109
106
%zero = arith.constant 0 : index
110
107
%index_min = arith.constant -9223372036854775808 : index
111
108
112
- // CHECK-LABEL: @ult_cmpi_index
109
+ // CHECK-LABEL: @cmpi_ult_index
113
110
// CHECK-NEXT: 1
114
- func.call @ult_cmpi_index (%zero , %index_min ) : (index , index ) -> ()
111
+ func.call @cmpi_ult_index (%zero , %index_min ) : (index , index ) -> ()
115
112
116
113
// ------------------------------------------------
117
- // Test i1, i8, i16 etc.. TODO
114
+ // TODO: i1, i8, i16, uge, ule etc..
118
115
// ------------------------------------------------
119
116
return
120
117
}
121
118
122
119
func.func @entry () {
123
- func.call @signed_cmpi () : () -> ()
124
- func.call @unsigned_cmpi () : () -> ()
120
+ func.call @cmpi_signed () : () -> ()
121
+ func.call @cmpi_unsigned () : () -> ()
125
122
return
126
123
}
0 commit comments