@@ -1711,10 +1711,9 @@ v128_t test_u8x16_sub_sat(v128_t a, v128_t b) {
1711
1711
// CHECK-NEXT: entry:
1712
1712
// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
1713
1713
// CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[B:%.*]] to <16 x i8>
1714
- // CHECK-NEXT: [[TMP2:%.*]] = icmp slt <16 x i8> [[TMP0]], [[TMP1]]
1715
- // CHECK-NEXT: [[TMP3:%.*]] = select <16 x i1> [[TMP2]], <16 x i8> [[TMP0]], <16 x i8> [[TMP1]]
1716
- // CHECK-NEXT: [[TMP4:%.*]] = bitcast <16 x i8> [[TMP3]] to <4 x i32>
1717
- // CHECK-NEXT: ret <4 x i32> [[TMP4]]
1714
+ // CHECK-NEXT: [[TMP2:%.*]] = tail call <16 x i8> @llvm.smin.v16i8(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) #[[ATTR7]]
1715
+ // CHECK-NEXT: [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <4 x i32>
1716
+ // CHECK-NEXT: ret <4 x i32> [[TMP3]]
1718
1717
//
1719
1718
v128_t test_i8x16_min (v128_t a , v128_t b ) {
1720
1719
return wasm_i8x16_min (a , b );
@@ -1724,10 +1723,9 @@ v128_t test_i8x16_min(v128_t a, v128_t b) {
1724
1723
// CHECK-NEXT: entry:
1725
1724
// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
1726
1725
// CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[B:%.*]] to <16 x i8>
1727
- // CHECK-NEXT: [[TMP2:%.*]] = icmp ult <16 x i8> [[TMP0]], [[TMP1]]
1728
- // CHECK-NEXT: [[TMP3:%.*]] = select <16 x i1> [[TMP2]], <16 x i8> [[TMP0]], <16 x i8> [[TMP1]]
1729
- // CHECK-NEXT: [[TMP4:%.*]] = bitcast <16 x i8> [[TMP3]] to <4 x i32>
1730
- // CHECK-NEXT: ret <4 x i32> [[TMP4]]
1726
+ // CHECK-NEXT: [[TMP2:%.*]] = tail call <16 x i8> @llvm.umin.v16i8(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) #[[ATTR7]]
1727
+ // CHECK-NEXT: [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <4 x i32>
1728
+ // CHECK-NEXT: ret <4 x i32> [[TMP3]]
1731
1729
//
1732
1730
v128_t test_u8x16_min (v128_t a , v128_t b ) {
1733
1731
return wasm_u8x16_min (a , b );
@@ -1737,10 +1735,9 @@ v128_t test_u8x16_min(v128_t a, v128_t b) {
1737
1735
// CHECK-NEXT: entry:
1738
1736
// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
1739
1737
// CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[B:%.*]] to <16 x i8>
1740
- // CHECK-NEXT: [[TMP2:%.*]] = icmp sgt <16 x i8> [[TMP0]], [[TMP1]]
1741
- // CHECK-NEXT: [[TMP3:%.*]] = select <16 x i1> [[TMP2]], <16 x i8> [[TMP0]], <16 x i8> [[TMP1]]
1742
- // CHECK-NEXT: [[TMP4:%.*]] = bitcast <16 x i8> [[TMP3]] to <4 x i32>
1743
- // CHECK-NEXT: ret <4 x i32> [[TMP4]]
1738
+ // CHECK-NEXT: [[TMP2:%.*]] = tail call <16 x i8> @llvm.smax.v16i8(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) #[[ATTR7]]
1739
+ // CHECK-NEXT: [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <4 x i32>
1740
+ // CHECK-NEXT: ret <4 x i32> [[TMP3]]
1744
1741
//
1745
1742
v128_t test_i8x16_max (v128_t a , v128_t b ) {
1746
1743
return wasm_i8x16_max (a , b );
@@ -1750,10 +1747,9 @@ v128_t test_i8x16_max(v128_t a, v128_t b) {
1750
1747
// CHECK-NEXT: entry:
1751
1748
// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
1752
1749
// CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[B:%.*]] to <16 x i8>
1753
- // CHECK-NEXT: [[TMP2:%.*]] = icmp ugt <16 x i8> [[TMP0]], [[TMP1]]
1754
- // CHECK-NEXT: [[TMP3:%.*]] = select <16 x i1> [[TMP2]], <16 x i8> [[TMP0]], <16 x i8> [[TMP1]]
1755
- // CHECK-NEXT: [[TMP4:%.*]] = bitcast <16 x i8> [[TMP3]] to <4 x i32>
1756
- // CHECK-NEXT: ret <4 x i32> [[TMP4]]
1750
+ // CHECK-NEXT: [[TMP2:%.*]] = tail call <16 x i8> @llvm.umax.v16i8(<16 x i8> [[TMP0]], <16 x i8> [[TMP1]]) #[[ATTR7]]
1751
+ // CHECK-NEXT: [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <4 x i32>
1752
+ // CHECK-NEXT: ret <4 x i32> [[TMP3]]
1757
1753
//
1758
1754
v128_t test_u8x16_max (v128_t a , v128_t b ) {
1759
1755
return wasm_u8x16_max (a , b );
@@ -1944,10 +1940,9 @@ v128_t test_i16x8_mul(v128_t a, v128_t b) {
1944
1940
// CHECK-NEXT: entry:
1945
1941
// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
1946
1942
// CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[B:%.*]] to <8 x i16>
1947
- // CHECK-NEXT: [[TMP2:%.*]] = icmp slt <8 x i16> [[TMP0]], [[TMP1]]
1948
- // CHECK-NEXT: [[TMP3:%.*]] = select <8 x i1> [[TMP2]], <8 x i16> [[TMP0]], <8 x i16> [[TMP1]]
1949
- // CHECK-NEXT: [[TMP4:%.*]] = bitcast <8 x i16> [[TMP3]] to <4 x i32>
1950
- // CHECK-NEXT: ret <4 x i32> [[TMP4]]
1943
+ // CHECK-NEXT: [[TMP2:%.*]] = tail call <8 x i16> @llvm.smin.v8i16(<8 x i16> [[TMP0]], <8 x i16> [[TMP1]]) #[[ATTR7]]
1944
+ // CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i16> [[TMP2]] to <4 x i32>
1945
+ // CHECK-NEXT: ret <4 x i32> [[TMP3]]
1951
1946
//
1952
1947
v128_t test_i16x8_min (v128_t a , v128_t b ) {
1953
1948
return wasm_i16x8_min (a , b );
@@ -1957,10 +1952,9 @@ v128_t test_i16x8_min(v128_t a, v128_t b) {
1957
1952
// CHECK-NEXT: entry:
1958
1953
// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
1959
1954
// CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[B:%.*]] to <8 x i16>
1960
- // CHECK-NEXT: [[TMP2:%.*]] = icmp ult <8 x i16> [[TMP0]], [[TMP1]]
1961
- // CHECK-NEXT: [[TMP3:%.*]] = select <8 x i1> [[TMP2]], <8 x i16> [[TMP0]], <8 x i16> [[TMP1]]
1962
- // CHECK-NEXT: [[TMP4:%.*]] = bitcast <8 x i16> [[TMP3]] to <4 x i32>
1963
- // CHECK-NEXT: ret <4 x i32> [[TMP4]]
1955
+ // CHECK-NEXT: [[TMP2:%.*]] = tail call <8 x i16> @llvm.umin.v8i16(<8 x i16> [[TMP0]], <8 x i16> [[TMP1]]) #[[ATTR7]]
1956
+ // CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i16> [[TMP2]] to <4 x i32>
1957
+ // CHECK-NEXT: ret <4 x i32> [[TMP3]]
1964
1958
//
1965
1959
v128_t test_u16x8_min (v128_t a , v128_t b ) {
1966
1960
return wasm_u16x8_min (a , b );
@@ -1970,10 +1964,9 @@ v128_t test_u16x8_min(v128_t a, v128_t b) {
1970
1964
// CHECK-NEXT: entry:
1971
1965
// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
1972
1966
// CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[B:%.*]] to <8 x i16>
1973
- // CHECK-NEXT: [[TMP2:%.*]] = icmp sgt <8 x i16> [[TMP0]], [[TMP1]]
1974
- // CHECK-NEXT: [[TMP3:%.*]] = select <8 x i1> [[TMP2]], <8 x i16> [[TMP0]], <8 x i16> [[TMP1]]
1975
- // CHECK-NEXT: [[TMP4:%.*]] = bitcast <8 x i16> [[TMP3]] to <4 x i32>
1976
- // CHECK-NEXT: ret <4 x i32> [[TMP4]]
1967
+ // CHECK-NEXT: [[TMP2:%.*]] = tail call <8 x i16> @llvm.smax.v8i16(<8 x i16> [[TMP0]], <8 x i16> [[TMP1]]) #[[ATTR7]]
1968
+ // CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i16> [[TMP2]] to <4 x i32>
1969
+ // CHECK-NEXT: ret <4 x i32> [[TMP3]]
1977
1970
//
1978
1971
v128_t test_i16x8_max (v128_t a , v128_t b ) {
1979
1972
return wasm_i16x8_max (a , b );
@@ -1983,10 +1976,9 @@ v128_t test_i16x8_max(v128_t a, v128_t b) {
1983
1976
// CHECK-NEXT: entry:
1984
1977
// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
1985
1978
// CHECK-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[B:%.*]] to <8 x i16>
1986
- // CHECK-NEXT: [[TMP2:%.*]] = icmp ugt <8 x i16> [[TMP0]], [[TMP1]]
1987
- // CHECK-NEXT: [[TMP3:%.*]] = select <8 x i1> [[TMP2]], <8 x i16> [[TMP0]], <8 x i16> [[TMP1]]
1988
- // CHECK-NEXT: [[TMP4:%.*]] = bitcast <8 x i16> [[TMP3]] to <4 x i32>
1989
- // CHECK-NEXT: ret <4 x i32> [[TMP4]]
1979
+ // CHECK-NEXT: [[TMP2:%.*]] = tail call <8 x i16> @llvm.umax.v8i16(<8 x i16> [[TMP0]], <8 x i16> [[TMP1]]) #[[ATTR7]]
1980
+ // CHECK-NEXT: [[TMP3:%.*]] = bitcast <8 x i16> [[TMP2]] to <4 x i32>
1981
+ // CHECK-NEXT: ret <4 x i32> [[TMP3]]
1990
1982
//
1991
1983
v128_t test_u16x8_max (v128_t a , v128_t b ) {
1992
1984
return wasm_u16x8_max (a , b );
@@ -2103,39 +2095,35 @@ v128_t test_i32x4_mul(v128_t a, v128_t b) {
2103
2095
2104
2096
// CHECK-LABEL: @test_i32x4_min(
2105
2097
// CHECK-NEXT: entry:
2106
- // CHECK-NEXT: [[TMP0:%.*]] = icmp slt <4 x i32> [[A:%.*]], [[B:%.*]]
2107
- // CHECK-NEXT: [[TMP1:%.*]] = select <4 x i1> [[TMP0]], <4 x i32> [[A]], <4 x i32> [[B]]
2108
- // CHECK-NEXT: ret <4 x i32> [[TMP1]]
2098
+ // CHECK-NEXT: [[TMP0:%.*]] = tail call <4 x i32> @llvm.smin.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]) #[[ATTR7]]
2099
+ // CHECK-NEXT: ret <4 x i32> [[TMP0]]
2109
2100
//
2110
2101
v128_t test_i32x4_min (v128_t a , v128_t b ) {
2111
2102
return wasm_i32x4_min (a , b );
2112
2103
}
2113
2104
2114
2105
// CHECK-LABEL: @test_u32x4_min(
2115
2106
// CHECK-NEXT: entry:
2116
- // CHECK-NEXT: [[TMP0:%.*]] = icmp ult <4 x i32> [[A:%.*]], [[B:%.*]]
2117
- // CHECK-NEXT: [[TMP1:%.*]] = select <4 x i1> [[TMP0]], <4 x i32> [[A]], <4 x i32> [[B]]
2118
- // CHECK-NEXT: ret <4 x i32> [[TMP1]]
2107
+ // CHECK-NEXT: [[TMP0:%.*]] = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]) #[[ATTR7]]
2108
+ // CHECK-NEXT: ret <4 x i32> [[TMP0]]
2119
2109
//
2120
2110
v128_t test_u32x4_min (v128_t a , v128_t b ) {
2121
2111
return wasm_u32x4_min (a , b );
2122
2112
}
2123
2113
2124
2114
// CHECK-LABEL: @test_i32x4_max(
2125
2115
// CHECK-NEXT: entry:
2126
- // CHECK-NEXT: [[TMP0:%.*]] = icmp sgt <4 x i32> [[A:%.*]], [[B:%.*]]
2127
- // CHECK-NEXT: [[TMP1:%.*]] = select <4 x i1> [[TMP0]], <4 x i32> [[A]], <4 x i32> [[B]]
2128
- // CHECK-NEXT: ret <4 x i32> [[TMP1]]
2116
+ // CHECK-NEXT: [[TMP0:%.*]] = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]) #[[ATTR7]]
2117
+ // CHECK-NEXT: ret <4 x i32> [[TMP0]]
2129
2118
//
2130
2119
v128_t test_i32x4_max (v128_t a , v128_t b ) {
2131
2120
return wasm_i32x4_max (a , b );
2132
2121
}
2133
2122
2134
2123
// CHECK-LABEL: @test_u32x4_max(
2135
2124
// CHECK-NEXT: entry:
2136
- // CHECK-NEXT: [[TMP0:%.*]] = icmp ugt <4 x i32> [[A:%.*]], [[B:%.*]]
2137
- // CHECK-NEXT: [[TMP1:%.*]] = select <4 x i1> [[TMP0]], <4 x i32> [[A]], <4 x i32> [[B]]
2138
- // CHECK-NEXT: ret <4 x i32> [[TMP1]]
2125
+ // CHECK-NEXT: [[TMP0:%.*]] = tail call <4 x i32> @llvm.umax.v4i32(<4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]) #[[ATTR7]]
2126
+ // CHECK-NEXT: ret <4 x i32> [[TMP0]]
2139
2127
//
2140
2128
v128_t test_u32x4_max (v128_t a , v128_t b ) {
2141
2129
return wasm_u32x4_max (a , b );
0 commit comments