@@ -1711,10 +1711,9 @@ v128_t test_u8x16_sub_sat(v128_t a, v128_t b) {
17111711// CHECK-NEXT: entry:
17121712// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
17131713// 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]]
17181717//
17191718v128_t test_i8x16_min (v128_t a , v128_t b ) {
17201719 return wasm_i8x16_min (a , b );
@@ -1724,10 +1723,9 @@ v128_t test_i8x16_min(v128_t a, v128_t b) {
17241723// CHECK-NEXT: entry:
17251724// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
17261725// 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]]
17311729//
17321730v128_t test_u8x16_min (v128_t a , v128_t b ) {
17331731 return wasm_u8x16_min (a , b );
@@ -1737,10 +1735,9 @@ v128_t test_u8x16_min(v128_t a, v128_t b) {
17371735// CHECK-NEXT: entry:
17381736// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
17391737// 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]]
17441741//
17451742v128_t test_i8x16_max (v128_t a , v128_t b ) {
17461743 return wasm_i8x16_max (a , b );
@@ -1750,10 +1747,9 @@ v128_t test_i8x16_max(v128_t a, v128_t b) {
17501747// CHECK-NEXT: entry:
17511748// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8>
17521749// 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]]
17571753//
17581754v128_t test_u8x16_max (v128_t a , v128_t b ) {
17591755 return wasm_u8x16_max (a , b );
@@ -1944,10 +1940,9 @@ v128_t test_i16x8_mul(v128_t a, v128_t b) {
19441940// CHECK-NEXT: entry:
19451941// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
19461942// 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]]
19511946//
19521947v128_t test_i16x8_min (v128_t a , v128_t b ) {
19531948 return wasm_i16x8_min (a , b );
@@ -1957,10 +1952,9 @@ v128_t test_i16x8_min(v128_t a, v128_t b) {
19571952// CHECK-NEXT: entry:
19581953// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
19591954// 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]]
19641958//
19651959v128_t test_u16x8_min (v128_t a , v128_t b ) {
19661960 return wasm_u16x8_min (a , b );
@@ -1970,10 +1964,9 @@ v128_t test_u16x8_min(v128_t a, v128_t b) {
19701964// CHECK-NEXT: entry:
19711965// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
19721966// 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]]
19771970//
19781971v128_t test_i16x8_max (v128_t a , v128_t b ) {
19791972 return wasm_i16x8_max (a , b );
@@ -1983,10 +1976,9 @@ v128_t test_i16x8_max(v128_t a, v128_t b) {
19831976// CHECK-NEXT: entry:
19841977// CHECK-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16>
19851978// 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]]
19901982//
19911983v128_t test_u16x8_max (v128_t a , v128_t b ) {
19921984 return wasm_u16x8_max (a , b );
@@ -2103,39 +2095,35 @@ v128_t test_i32x4_mul(v128_t a, v128_t b) {
21032095
21042096// CHECK-LABEL: @test_i32x4_min(
21052097// 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]]
21092100//
21102101v128_t test_i32x4_min (v128_t a , v128_t b ) {
21112102 return wasm_i32x4_min (a , b );
21122103}
21132104
21142105// CHECK-LABEL: @test_u32x4_min(
21152106// 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]]
21192109//
21202110v128_t test_u32x4_min (v128_t a , v128_t b ) {
21212111 return wasm_u32x4_min (a , b );
21222112}
21232113
21242114// CHECK-LABEL: @test_i32x4_max(
21252115// 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]]
21292118//
21302119v128_t test_i32x4_max (v128_t a , v128_t b ) {
21312120 return wasm_i32x4_max (a , b );
21322121}
21332122
21342123// CHECK-LABEL: @test_u32x4_max(
21352124// 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]]
21392127//
21402128v128_t test_u32x4_max (v128_t a , v128_t b ) {
21412129 return wasm_u32x4_max (a , b );
0 commit comments