|
1 |
| -// RUN: fir-opt --split-input-file --simplify-fir-operations %s | FileCheck %s |
2 |
| - |
3 |
| -// ----- |
| 1 | +// RUN: fir-opt --split-input-file --simplify-fir-operations %s | FileCheck --check-prefixes=ALL,NOOPT %s |
| 2 | +// RUN: fir-opt --split-input-file --simplify-fir-operations=prefer-inline-implementation=true %s | FileCheck --check-prefixes=ALL,OPT %s |
4 | 3 |
|
5 | 4 | func.func @test_none_innermost(%arg0: !fir.box<none>) -> i1 {
|
6 | 5 | %0 = fir.is_contiguous_box %arg0 innermost : (!fir.box<none>) -> i1
|
7 | 6 | return %0 : i1
|
8 | 7 | }
|
9 |
| -// CHECK-LABEL: func.func @test_none_innermost( |
10 |
| -// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<none>) -> i1 { |
11 |
| -// CHECK: %[[VAL_1:.*]] = arith.constant 1 : i32 |
12 |
| -// CHECK: %[[VAL_2:.*]] = fir.call @_FortranAIsContiguousUpTo(%[[VAL_0]], %[[VAL_1]]) : (!fir.box<none>, i32) -> i1 |
13 |
| -// CHECK: return %[[VAL_2]] : i1 |
14 |
| -// CHECK: } |
| 8 | +// ALL-LABEL: func.func @test_none_innermost( |
| 9 | +// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<none>) -> i1 { |
| 10 | +// ALL: %[[VAL_1:.*]] = arith.constant 1 : i32 |
| 11 | +// ALL: %[[VAL_2:.*]] = fir.call @_FortranAIsContiguousUpTo(%[[VAL_0]], %[[VAL_1]]) : (!fir.box<none>, i32) -> i1 |
| 12 | +// ALL: return %[[VAL_2]] : i1 |
15 | 13 |
|
16 | 14 | // -----
|
17 | 15 |
|
18 | 16 | func.func @test_none_whole(%arg0: !fir.box<none>) -> i1 {
|
19 | 17 | %0 = fir.is_contiguous_box %arg0 whole : (!fir.box<none>) -> i1
|
20 | 18 | return %0 : i1
|
21 | 19 | }
|
22 |
| -// CHECK-LABEL: func.func @test_none_whole( |
23 |
| -// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<none>) -> i1 { |
24 |
| -// CHECK: %[[VAL_1:.*]] = fir.call @_FortranAIsContiguous(%[[VAL_0]]) : (!fir.box<none>) -> i1 |
25 |
| -// CHECK: return %[[VAL_1]] : i1 |
26 |
| -// CHECK: } |
| 20 | +// ALL-LABEL: func.func @test_none_whole( |
| 21 | +// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<none>) -> i1 { |
| 22 | +// ALL: %[[VAL_1:.*]] = fir.call @_FortranAIsContiguous(%[[VAL_0]]) : (!fir.box<none>) -> i1 |
| 23 | +// ALL: return %[[VAL_1]] : i1 |
| 24 | +// ALL: } |
27 | 25 |
|
28 | 26 | // -----
|
29 | 27 |
|
30 | 28 | func.func @test_array_innermost(%arg0: !fir.box<!fir.array<?xf32>>) -> i1 {
|
31 | 29 | %0 = fir.is_contiguous_box %arg0 innermost : (!fir.box<!fir.array<?xf32>>) -> i1
|
32 | 30 | return %0 : i1
|
33 | 31 | }
|
34 |
| -// CHECK-LABEL: func.func @test_array_innermost( |
35 |
| -// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<?xf32>>) -> i1 { |
36 |
| -// CHECK: %[[VAL_1:.*]] = arith.constant 1 : i32 |
37 |
| -// CHECK: %[[VAL_2:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?xf32>>) -> !fir.box<none> |
38 |
| -// CHECK: %[[VAL_3:.*]] = fir.call @_FortranAIsContiguousUpTo(%[[VAL_2]], %[[VAL_1]]) : (!fir.box<none>, i32) -> i1 |
39 |
| -// CHECK: return %[[VAL_3]] : i1 |
40 |
| -// CHECK: } |
| 32 | +// ALL-LABEL: func.func @test_array_innermost( |
| 33 | +// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<?xf32>>) -> i1 { |
| 34 | +// NOOPT: %[[VAL_1:.*]] = arith.constant 1 : i32 |
| 35 | +// NOOPT: %[[VAL_2:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?xf32>>) -> !fir.box<none> |
| 36 | +// NOOPT: %[[VAL_3:.*]] = fir.call @_FortranAIsContiguousUpTo(%[[VAL_2]], %[[VAL_1]]) : (!fir.box<none>, i32) -> i1 |
| 37 | +// NOOPT: return %[[VAL_3]] : i1 |
| 38 | +// OPT: %[[VAL_1:.*]] = arith.constant 0 : index |
| 39 | +// OPT: %[[VAL_2:.*]] = fir.box_elesize %[[VAL_0]] : (!fir.box<!fir.array<?xf32>>) -> index |
| 40 | +// OPT: %[[VAL_3:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_1]] : (!fir.box<!fir.array<?xf32>>, index) -> (index, index, index) |
| 41 | +// OPT: %[[VAL_4:.*]] = arith.cmpi eq, %[[VAL_2]], %[[VAL_3]]#2 : index |
| 42 | +// OPT: %[[VAL_5:.*]] = arith.cmpi eq, %[[VAL_3]]#1, %[[VAL_1]] : index |
| 43 | +// OPT: %[[VAL_6:.*]] = arith.ori %[[VAL_4]], %[[VAL_5]] : i1 |
| 44 | +// OPT: return %[[VAL_6]] : i1 |
41 | 45 |
|
42 | 46 | // -----
|
43 | 47 |
|
44 | 48 | func.func @test_array_whole(%arg0: !fir.box<!fir.array<?xf32>>) -> i1 {
|
45 | 49 | %0 = fir.is_contiguous_box %arg0 whole : (!fir.box<!fir.array<?xf32>>) -> i1
|
46 | 50 | return %0 : i1
|
47 | 51 | }
|
48 |
| -// CHECK-LABEL: func.func @test_array_whole( |
49 |
| -// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<?xf32>>) -> i1 { |
50 |
| -// CHECK: %[[VAL_1:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?xf32>>) -> !fir.box<none> |
51 |
| -// CHECK: %[[VAL_2:.*]] = fir.call @_FortranAIsContiguous(%[[VAL_1]]) : (!fir.box<none>) -> i1 |
52 |
| -// CHECK: return %[[VAL_2]] : i1 |
53 |
| -// CHECK: } |
| 52 | +// ALL-LABEL: func.func @test_array_whole( |
| 53 | +// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<?xf32>>) -> i1 { |
| 54 | +// NOOPT: %[[VAL_1:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?xf32>>) -> !fir.box<none> |
| 55 | +// NOOPT: %[[VAL_2:.*]] = fir.call @_FortranAIsContiguous(%[[VAL_1]]) : (!fir.box<none>) -> i1 |
| 56 | +// NOOPT: return %[[VAL_2]] : i1 |
| 57 | +// OPT: %[[VAL_1:.*]] = arith.constant 0 : index |
| 58 | +// OPT: %[[VAL_2:.*]] = fir.box_elesize %[[VAL_0]] : (!fir.box<!fir.array<?xf32>>) -> index |
| 59 | +// OPT: %[[VAL_3:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_1]] : (!fir.box<!fir.array<?xf32>>, index) -> (index, index, index) |
| 60 | +// OPT: %[[VAL_4:.*]] = arith.cmpi eq, %[[VAL_2]], %[[VAL_3]]#2 : index |
| 61 | +// OPT: %[[VAL_5:.*]] = arith.cmpi eq, %[[VAL_3]]#1, %[[VAL_1]] : index |
| 62 | +// OPT: %[[VAL_6:.*]] = arith.ori %[[VAL_4]], %[[VAL_5]] : i1 |
| 63 | +// OPT: return %[[VAL_6]] : i1 |
54 | 64 |
|
55 | 65 | // -----
|
56 | 66 |
|
57 | 67 | func.func @test_assumed_rank_innermost(%arg0: !fir.box<!fir.array<*:f32>>) -> i1 {
|
58 | 68 | %0 = fir.is_contiguous_box %arg0 innermost : (!fir.box<!fir.array<*:f32>>) -> i1
|
59 | 69 | return %0 : i1
|
60 | 70 | }
|
61 |
| -// CHECK-LABEL: func.func @test_assumed_rank_innermost( |
62 |
| -// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<*:f32>>) -> i1 { |
63 |
| -// CHECK: %[[VAL_1:.*]] = arith.constant 1 : i32 |
64 |
| -// CHECK: %[[VAL_2:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<*:f32>>) -> !fir.box<none> |
65 |
| -// CHECK: %[[VAL_3:.*]] = fir.call @_FortranAIsContiguousUpTo(%[[VAL_2]], %[[VAL_1]]) : (!fir.box<none>, i32) -> i1 |
66 |
| -// CHECK: return %[[VAL_3]] : i1 |
67 |
| -// CHECK: } |
| 71 | +// ALL-LABEL: func.func @test_assumed_rank_innermost( |
| 72 | +// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<*:f32>>) -> i1 { |
| 73 | +// ALL: %[[VAL_1:.*]] = arith.constant 1 : i32 |
| 74 | +// ALL: %[[VAL_2:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<*:f32>>) -> !fir.box<none> |
| 75 | +// ALL: %[[VAL_3:.*]] = fir.call @_FortranAIsContiguousUpTo(%[[VAL_2]], %[[VAL_1]]) : (!fir.box<none>, i32) -> i1 |
| 76 | +// ALL: return %[[VAL_3]] : i1 |
68 | 77 |
|
69 | 78 | // -----
|
70 | 79 |
|
71 | 80 | func.func @test_assumed_rank_whole(%arg0: !fir.box<!fir.array<*:f32>>) -> i1 {
|
72 | 81 | %0 = fir.is_contiguous_box %arg0 whole : (!fir.box<!fir.array<*:f32>>) -> i1
|
73 | 82 | return %0 : i1
|
74 | 83 | }
|
75 |
| -// CHECK-LABEL: func.func @test_assumed_rank_whole( |
76 |
| -// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<*:f32>>) -> i1 { |
77 |
| -// CHECK: %[[VAL_1:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<*:f32>>) -> !fir.box<none> |
78 |
| -// CHECK: %[[VAL_2:.*]] = fir.call @_FortranAIsContiguous(%[[VAL_1]]) : (!fir.box<none>) -> i1 |
79 |
| -// CHECK: return %[[VAL_2]] : i1 |
80 |
| -// CHECK: } |
| 84 | +// ALL-LABEL: func.func @test_assumed_rank_whole( |
| 85 | +// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<*:f32>>) -> i1 { |
| 86 | +// ALL: %[[VAL_1:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<*:f32>>) -> !fir.box<none> |
| 87 | +// ALL: %[[VAL_2:.*]] = fir.call @_FortranAIsContiguous(%[[VAL_1]]) : (!fir.box<none>) -> i1 |
| 88 | +// ALL: return %[[VAL_2]] : i1 |
| 89 | +// ALL: } |
| 90 | + |
| 91 | +// ----- |
| 92 | + |
| 93 | +func.func @test_scalar_upoly(%arg0: !fir.class<none>) -> i1 { |
| 94 | + %0 = fir.is_contiguous_box %arg0 innermost : (!fir.class<none>) -> i1 |
| 95 | + return %0 : i1 |
| 96 | +} |
| 97 | +// ALL-LABEL: func.func @test_scalar_upoly( |
| 98 | +// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.class<none>) -> i1 { |
| 99 | +// ALL: %[[VAL_1:.*]] = arith.constant 1 : i32 |
| 100 | +// ALL: %[[VAL_2:.*]] = fir.convert %[[VAL_0]] : (!fir.class<none>) -> !fir.box<none> |
| 101 | +// ALL: %[[VAL_3:.*]] = fir.call @_FortranAIsContiguousUpTo(%[[VAL_2]], %[[VAL_1]]) : (!fir.box<none>, i32) -> i1 |
| 102 | +// ALL: return %[[VAL_3]] : i1 |
81 | 103 |
|
82 | 104 | // -----
|
83 | 105 |
|
84 | 106 | func.func @test_none(%arg0: !fir.box<none>) -> i16 {
|
85 | 107 | %0 = fir.box_total_elements %arg0 : (!fir.box<none>) -> i16
|
86 | 108 | return %0 : i16
|
87 | 109 | }
|
88 |
| -// CHECK-LABEL: func.func @test_none( |
89 |
| -// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<none>) -> i16 { |
90 |
| -// CHECK: %[[VAL_3:.*]] = arith.constant {{.*}} : i32 |
91 |
| -// CHECK: %[[VAL_1:.*]] = fir.address_of(@{{.*}}) : !fir.ref<!fir.char<1,{{.*}}>> |
92 |
| -// CHECK: %[[VAL_4:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8> |
93 |
| -// CHECK: %[[VAL_5:.*]] = fir.call @_FortranASize(%[[VAL_0]], %[[VAL_4]], %[[VAL_3]]) : (!fir.box<none>, !fir.ref<i8>, i32) -> i64 |
94 |
| -// CHECK: %[[VAL_6:.*]] = fir.convert %[[VAL_5]] : (i64) -> i16 |
95 |
| -// CHECK: return %[[VAL_6]] : i16 |
96 |
| -// CHECK: } |
| 110 | +// ALL-LABEL: func.func @test_none( |
| 111 | +// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<none>) -> i16 { |
| 112 | +// ALL: %[[VAL_3:.*]] = arith.constant {{.*}} : i32 |
| 113 | +// ALL: %[[VAL_1:.*]] = fir.address_of(@{{.*}}) : !fir.ref<!fir.char<1,{{.*}}>> |
| 114 | +// ALL: %[[VAL_4:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8> |
| 115 | +// ALL: %[[VAL_5:.*]] = fir.call @_FortranASize(%[[VAL_0]], %[[VAL_4]], %[[VAL_3]]) : (!fir.box<none>, !fir.ref<i8>, i32) -> i64 |
| 116 | +// ALL: %[[VAL_6:.*]] = fir.convert %[[VAL_5]] : (i64) -> i16 |
| 117 | +// ALL: return %[[VAL_6]] : i16 |
| 118 | +// ALL: } |
97 | 119 |
|
98 | 120 | // -----
|
99 | 121 |
|
100 | 122 | func.func @test_array(%arg0: !fir.box<!fir.array<?x?xf32>>) -> i32 {
|
101 | 123 | %0 = fir.box_total_elements %arg0 : (!fir.box<!fir.array<?x?xf32>>) -> i32
|
102 | 124 | return %0 : i32
|
103 | 125 | }
|
104 |
| -// CHECK-LABEL: func.func @test_array( |
105 |
| -// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<?x?xf32>>) -> i32 { |
106 |
| -// CHECK: %[[VAL_3:.*]] = arith.constant {{.*}} : i32 |
107 |
| -// CHECK: %[[VAL_1:.*]] = fir.address_of({{.*}}) : !fir.ref<!fir.char<1,{{.*}}>> |
108 |
| -// CHECK: %[[VAL_4:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none> |
109 |
| -// CHECK: %[[VAL_5:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8> |
110 |
| -// CHECK: %[[VAL_6:.*]] = fir.call @_FortranASize(%[[VAL_4]], %[[VAL_5]], %[[VAL_3]]) : (!fir.box<none>, !fir.ref<i8>, i32) -> i64 |
111 |
| -// CHECK: %[[VAL_7:.*]] = fir.convert %[[VAL_6]] : (i64) -> i32 |
112 |
| -// CHECK: return %[[VAL_7]] : i32 |
113 |
| -// CHECK: } |
| 126 | +// ALL-LABEL: func.func @test_array( |
| 127 | +// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<?x?xf32>>) -> i32 { |
| 128 | +// ALL: %[[VAL_3:.*]] = arith.constant {{.*}} : i32 |
| 129 | +// ALL: %[[VAL_1:.*]] = fir.address_of({{.*}}) : !fir.ref<!fir.char<1,{{.*}}>> |
| 130 | +// ALL: %[[VAL_4:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none> |
| 131 | +// ALL: %[[VAL_5:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8> |
| 132 | +// ALL: %[[VAL_6:.*]] = fir.call @_FortranASize(%[[VAL_4]], %[[VAL_5]], %[[VAL_3]]) : (!fir.box<none>, !fir.ref<i8>, i32) -> i64 |
| 133 | +// ALL: %[[VAL_7:.*]] = fir.convert %[[VAL_6]] : (i64) -> i32 |
| 134 | +// ALL: return %[[VAL_7]] : i32 |
| 135 | +// ALL: } |
114 | 136 |
|
115 | 137 | // -----
|
116 | 138 |
|
117 | 139 | func.func @test_assumed_rank(%arg0: !fir.box<!fir.array<*:f32>>) -> index {
|
118 | 140 | %0 = fir.box_total_elements %arg0 : (!fir.box<!fir.array<*:f32>>) -> index
|
119 | 141 | return %0 : index
|
120 | 142 | }
|
121 |
| -// CHECK-LABEL: func.func @test_assumed_rank( |
122 |
| -// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<*:f32>>) -> index { |
123 |
| -// CHECK: %[[VAL_3:.*]] = arith.constant {{.*}} : i32 |
124 |
| -// CHECK: %[[VAL_1:.*]] = fir.address_of({{.*}}) : !fir.ref<!fir.char<1,{{.*}}>> |
125 |
| -// CHECK: %[[VAL_4:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<*:f32>>) -> !fir.box<none> |
126 |
| -// CHECK: %[[VAL_5:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8> |
127 |
| -// CHECK: %[[VAL_6:.*]] = fir.call @_FortranASize(%[[VAL_4]], %[[VAL_5]], %[[VAL_3]]) : (!fir.box<none>, !fir.ref<i8>, i32) -> i64 |
128 |
| -// CHECK: %[[VAL_7:.*]] = fir.convert %[[VAL_6]] : (i64) -> index |
129 |
| -// CHECK: return %[[VAL_7]] : index |
130 |
| -// CHECK: } |
| 143 | +// ALL-LABEL: func.func @test_assumed_rank( |
| 144 | +// ALL-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<*:f32>>) -> index { |
| 145 | +// ALL: %[[VAL_3:.*]] = arith.constant {{.*}} : i32 |
| 146 | +// ALL: %[[VAL_1:.*]] = fir.address_of({{.*}}) : !fir.ref<!fir.char<1,{{.*}}>> |
| 147 | +// ALL: %[[VAL_4:.*]] = fir.convert %[[VAL_0]] : (!fir.box<!fir.array<*:f32>>) -> !fir.box<none> |
| 148 | +// ALL: %[[VAL_5:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8> |
| 149 | +// ALL: %[[VAL_6:.*]] = fir.call @_FortranASize(%[[VAL_4]], %[[VAL_5]], %[[VAL_3]]) : (!fir.box<none>, !fir.ref<i8>, i32) -> i64 |
| 150 | +// ALL: %[[VAL_7:.*]] = fir.convert %[[VAL_6]] : (i64) -> index |
| 151 | +// ALL: return %[[VAL_7]] : index |
| 152 | +// ALL: } |
0 commit comments