@@ -2038,9 +2038,8 @@ define <2 x half> @uitofp_unary_shuf_narrow_narrow_elts(<4 x i32> %x) {
2038
2038
2039
2039
define <4 x i32 > @fptosi_shuf (<4 x float > %x , <4 x float > %y ) {
2040
2040
; CHECK-LABEL: @fptosi_shuf(
2041
- ; CHECK-NEXT: [[NX:%.*]] = fptosi <4 x float> [[X:%.*]] to <4 x i32>
2042
- ; CHECK-NEXT: [[NY:%.*]] = fptosi <4 x float> [[Y:%.*]] to <4 x i32>
2043
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i32> [[NX]], <4 x i32> [[NY]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>
2041
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x float> [[X:%.*]], <4 x float> [[Y:%.*]], <4 x i32> <i32 0, i32 1, i32 4, i32 5>
2042
+ ; CHECK-NEXT: [[R:%.*]] = fptosi <4 x float> [[TMP1]] to <4 x i32>
2044
2043
; CHECK-NEXT: ret <4 x i32> [[R]]
2045
2044
;
2046
2045
%nx = fptosi <4 x float > %x to <4 x i32 >
@@ -2051,9 +2050,8 @@ define <4 x i32> @fptosi_shuf(<4 x float> %x, <4 x float> %y) {
2051
2050
2052
2051
define <3 x i16 > @fptoui_shuf (<3 x half > %x , <3 x half > %y ) {
2053
2052
; CHECK-LABEL: @fptoui_shuf(
2054
- ; CHECK-NEXT: [[NX:%.*]] = fptoui <3 x half> [[X:%.*]] to <3 x i16>
2055
- ; CHECK-NEXT: [[NY:%.*]] = fptoui <3 x half> [[Y:%.*]] to <3 x i16>
2056
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <3 x i16> [[NX]], <3 x i16> [[NY]], <3 x i32> <i32 0, i32 undef, i32 4>
2053
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <3 x half> [[X:%.*]], <3 x half> [[Y:%.*]], <3 x i32> <i32 0, i32 undef, i32 4>
2054
+ ; CHECK-NEXT: [[R:%.*]] = fptoui <3 x half> [[TMP1]] to <3 x i16>
2057
2055
; CHECK-NEXT: ret <3 x i16> [[R]]
2058
2056
;
2059
2057
%nx = fptoui <3 x half > %x to <3 x i16 >
@@ -2062,6 +2060,8 @@ define <3 x i16> @fptoui_shuf(<3 x half> %x, <3 x half> %y) {
2062
2060
ret <3 x i16 > %r
2063
2061
}
2064
2062
2063
+ ; negative test - must have same source types
2064
+
2065
2065
define <3 x i16 > @fptoui_shuf_different_source_types (<3 x float > %x , <3 x half > %y ) {
2066
2066
; CHECK-LABEL: @fptoui_shuf_different_source_types(
2067
2067
; CHECK-NEXT: [[NX:%.*]] = fptoui <3 x float> [[X:%.*]] to <3 x i16>
@@ -2075,6 +2075,8 @@ define <3 x i16> @fptoui_shuf_different_source_types(<3 x float> %x, <3 x half>
2075
2075
ret <3 x i16 > %r
2076
2076
}
2077
2077
2078
+ ; negative test - must have same size elements
2079
+
2078
2080
define <4 x i32 > @fptoui_shuf_widen_elts (<4 x half > %x , <4 x half > %y ) {
2079
2081
; CHECK-LABEL: @fptoui_shuf_widen_elts(
2080
2082
; CHECK-NEXT: [[NX:%.*]] = fptosi <4 x half> [[X:%.*]] to <4 x i32>
@@ -2088,6 +2090,8 @@ define <4 x i32> @fptoui_shuf_widen_elts(<4 x half> %x, <4 x half> %y) {
2088
2090
ret <4 x i32 > %r
2089
2091
}
2090
2092
2093
+ ; negative test - must have same size elements
2094
+
2091
2095
define <4 x float > @sitofp_shuf_narrow_elts (<4 x i64 > %x , <4 x i64 > %y ) {
2092
2096
; CHECK-LABEL: @sitofp_shuf_narrow_elts(
2093
2097
; CHECK-NEXT: [[NX:%.*]] = sitofp <4 x i64> [[X:%.*]] to <4 x float>
@@ -2101,12 +2105,14 @@ define <4 x float> @sitofp_shuf_narrow_elts(<4 x i64> %x, <4 x i64> %y) {
2101
2105
ret <4 x float > %r
2102
2106
}
2103
2107
2108
+ ; one extra use is ok
2109
+
2104
2110
define <4 x float > @uitofp_shuf_extra_use1 (<4 x i32 > %x , <4 x i32 > %y ) {
2105
2111
; CHECK-LABEL: @uitofp_shuf_extra_use1(
2106
2112
; CHECK-NEXT: [[NX:%.*]] = uitofp <4 x i32> [[X:%.*]] to <4 x float>
2107
2113
; CHECK-NEXT: call void @use4(<4 x float> [[NX]])
2108
- ; CHECK-NEXT: [[NY :%.*]] = uitofp <4 x i32> [[Y:%.*]] to <4 x float >
2109
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x float > [[NX]], <4 x float> [[NY]], <4 x i32> <i32 0, i32 0, i32 4, i32 5 >
2114
+ ; CHECK-NEXT: [[TMP1 :%.*]] = shufflevector <4 x i32> [[X]], <4 x i32> [[ Y:%.*]], <4 x i32> <i32 0, i32 0, i32 4, i32 5 >
2115
+ ; CHECK-NEXT: [[R:%.*]] = uitofp <4 x i32 > [[TMP1]] to <4 x float >
2110
2116
; CHECK-NEXT: ret <4 x float> [[R]]
2111
2117
;
2112
2118
%nx = uitofp <4 x i32 > %x to <4 x float >
@@ -2116,12 +2122,14 @@ define <4 x float> @uitofp_shuf_extra_use1(<4 x i32> %x, <4 x i32> %y) {
2116
2122
ret <4 x float > %r
2117
2123
}
2118
2124
2125
+ ; one extra use is ok
2126
+
2119
2127
define <4 x float > @sitofp_shuf_extra_use2 (<4 x i32 > %x , <4 x i32 > %y ) {
2120
2128
; CHECK-LABEL: @sitofp_shuf_extra_use2(
2121
- ; CHECK-NEXT: [[NX:%.*]] = sitofp <4 x i32> [[X:%.*]] to <4 x float>
2122
2129
; CHECK-NEXT: [[NY:%.*]] = sitofp <4 x i32> [[Y:%.*]] to <4 x float>
2123
2130
; CHECK-NEXT: call void @use4(<4 x float> [[NY]])
2124
- ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x float> [[NX]], <4 x float> [[NY]], <4 x i32> <i32 7, i32 1, i32 4, i32 0>
2131
+ ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x i32> [[X:%.*]], <4 x i32> [[Y]], <4 x i32> <i32 7, i32 1, i32 4, i32 0>
2132
+ ; CHECK-NEXT: [[R:%.*]] = sitofp <4 x i32> [[TMP1]] to <4 x float>
2125
2133
; CHECK-NEXT: ret <4 x float> [[R]]
2126
2134
;
2127
2135
%nx = sitofp <4 x i32 > %x to <4 x float >
@@ -2131,6 +2139,8 @@ define <4 x float> @sitofp_shuf_extra_use2(<4 x i32> %x, <4 x i32> %y) {
2131
2139
ret <4 x float > %r
2132
2140
}
2133
2141
2142
+ ; negative test - both ops have extra uses
2143
+
2134
2144
define <2 x float > @sitofp_shuf_extra_use3 (<2 x i32 > %x , <2 x i32 > %y ) {
2135
2145
; CHECK-LABEL: @sitofp_shuf_extra_use3(
2136
2146
; CHECK-NEXT: [[NX:%.*]] = sitofp <2 x i32> [[X:%.*]] to <2 x float>
@@ -2148,6 +2158,8 @@ define <2 x float> @sitofp_shuf_extra_use3(<2 x i32> %x, <2 x i32> %y) {
2148
2158
ret <2 x float > %r
2149
2159
}
2150
2160
2161
+ ; negative test - mismatched casts
2162
+
2151
2163
define <4 x i32 > @fptoi_shuf (<4 x float > %x , <4 x float > %y ) {
2152
2164
; CHECK-LABEL: @fptoi_shuf(
2153
2165
; CHECK-NEXT: [[NX:%.*]] = fptoui <4 x float> [[X:%.*]] to <4 x i32>
@@ -2161,7 +2173,7 @@ define <4 x i32> @fptoi_shuf(<4 x float> %x, <4 x float> %y) {
2161
2173
ret <4 x i32 > %r
2162
2174
}
2163
2175
2164
- ; length-changing shuffle
2176
+ ; negative test - length-changing shuffle
2165
2177
2166
2178
define <4 x float > @sitofp_shuf_widen (<2 x i32 > %x , <2 x i32 > %y ) {
2167
2179
; CHECK-LABEL: @sitofp_shuf_widen(
@@ -2176,7 +2188,7 @@ define <4 x float> @sitofp_shuf_widen(<2 x i32> %x, <2 x i32> %y) {
2176
2188
ret <4 x float > %r
2177
2189
}
2178
2190
2179
- ; length-changing shuffle
2191
+ ; negative test - length-changing shuffle
2180
2192
2181
2193
define <2 x float > @uitofp_shuf_narrow (<4 x i32 > %x , <4 x i32 > %y ) {
2182
2194
; CHECK-LABEL: @uitofp_shuf_narrow(
0 commit comments