@@ -2060,6 +2060,70 @@ func.func @test_divf1(%arg0 : f32, %arg1 : f32) -> (f32) {
2060
2060
2061
2061
// -----
2062
2062
2063
+ func.func @fold_divui_of_muli_0 (%arg0 : index , %arg1 : index ) -> index {
2064
+ %0 = arith.muli %arg0 , %arg1 overflow <nuw > : index
2065
+ %1 = arith.divui %0 , %arg0 : index
2066
+ return %1 : index
2067
+ }
2068
+ // CHECK-LABEL: func @fold_divui_of_muli_0(
2069
+ // CHECK-SAME: %[[ARG0:.+]]: index,
2070
+ // CHECK-SAME: %[[ARG1:.+]]: index)
2071
+ // CHECK: return %[[ARG1]]
2072
+
2073
+ func.func @fold_divui_of_muli_1 (%arg0 : index , %arg1 : index ) -> index {
2074
+ %0 = arith.muli %arg0 , %arg1 overflow <nuw > : index
2075
+ %1 = arith.divui %0 , %arg1 : index
2076
+ return %1 : index
2077
+ }
2078
+ // CHECK-LABEL: func @fold_divui_of_muli_1(
2079
+ // CHECK-SAME: %[[ARG0:.+]]: index,
2080
+ // CHECK-SAME: %[[ARG1:.+]]: index)
2081
+ // CHECK: return %[[ARG0]]
2082
+
2083
+ func.func @fold_divsi_of_muli_0 (%arg0 : index , %arg1 : index ) -> index {
2084
+ %0 = arith.muli %arg0 , %arg1 overflow <nsw > : index
2085
+ %1 = arith.divsi %0 , %arg0 : index
2086
+ return %1 : index
2087
+ }
2088
+ // CHECK-LABEL: func @fold_divsi_of_muli_0(
2089
+ // CHECK-SAME: %[[ARG0:.+]]: index,
2090
+ // CHECK-SAME: %[[ARG1:.+]]: index)
2091
+ // CHECK: return %[[ARG1]]
2092
+
2093
+ func.func @fold_divsi_of_muli_1 (%arg0 : index , %arg1 : index ) -> index {
2094
+ %0 = arith.muli %arg0 , %arg1 overflow <nsw > : index
2095
+ %1 = arith.divsi %0 , %arg1 : index
2096
+ return %1 : index
2097
+ }
2098
+ // CHECK-LABEL: func @fold_divsi_of_muli_1(
2099
+ // CHECK-SAME: %[[ARG0:.+]]: index,
2100
+ // CHECK-SAME: %[[ARG1:.+]]: index)
2101
+ // CHECK: return %[[ARG0]]
2102
+
2103
+ // Do not fold divui(mul(a, v), v) -> a with nuw attribute.
2104
+ func.func @no_fold_divui_of_muli (%arg0 : index , %arg1 : index ) -> index {
2105
+ %0 = arith.muli %arg0 , %arg1 : index
2106
+ %1 = arith.divui %0 , %arg0 : index
2107
+ return %1 : index
2108
+ }
2109
+ // CHECK-LABEL: func @no_fold_divui_of_muli
2110
+ // CHECK: %[[T0:.+]] = arith.muli
2111
+ // CHECK: %[[T1:.+]] = arith.divui %[[T0]],
2112
+ // CHECK: return %[[T1]]
2113
+
2114
+ // Do not fold divsi(mul(a, v), v) -> a with nuw attribute.
2115
+ func.func @no_fold_divsi_of_muli (%arg0 : index , %arg1 : index ) -> index {
2116
+ %0 = arith.muli %arg0 , %arg1 : index
2117
+ %1 = arith.divsi %0 , %arg0 : index
2118
+ return %1 : index
2119
+ }
2120
+ // CHECK-LABEL: func @no_fold_divsi_of_muli
2121
+ // CHECK: %[[T0:.+]] = arith.muli
2122
+ // CHECK: %[[T1:.+]] = arith.divsi %[[T0]],
2123
+ // CHECK: return %[[T1]]
2124
+
2125
+ // -----
2126
+
2063
2127
// CHECK-LABEL: @test_cmpf(
2064
2128
func.func @test_cmpf (%arg0 : f32 ) -> (i1 , i1 , i1 , i1 ) {
2065
2129
// CHECK-DAG: %[[T:.*]] = arith.constant true
0 commit comments