@@ -2038,9 +2038,8 @@ define <2 x half> @uitofp_unary_shuf_narrow_narrow_elts(<4 x i32> %x) {
20382038
20392039define <4 x i32 > @fptosi_shuf (<4 x float > %x , <4 x float > %y ) {
20402040; 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>
20442043; CHECK-NEXT: ret <4 x i32> [[R]]
20452044;
20462045 %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) {
20512050
20522051define <3 x i16 > @fptoui_shuf (<3 x half > %x , <3 x half > %y ) {
20532052; 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>
20572055; CHECK-NEXT: ret <3 x i16> [[R]]
20582056;
20592057 %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) {
20622060 ret <3 x i16 > %r
20632061}
20642062
2063+ ; negative test - must have same source types
2064+
20652065define <3 x i16 > @fptoui_shuf_different_source_types (<3 x float > %x , <3 x half > %y ) {
20662066; CHECK-LABEL: @fptoui_shuf_different_source_types(
20672067; 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>
20752075 ret <3 x i16 > %r
20762076}
20772077
2078+ ; negative test - must have same size elements
2079+
20782080define <4 x i32 > @fptoui_shuf_widen_elts (<4 x half > %x , <4 x half > %y ) {
20792081; CHECK-LABEL: @fptoui_shuf_widen_elts(
20802082; 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) {
20882090 ret <4 x i32 > %r
20892091}
20902092
2093+ ; negative test - must have same size elements
2094+
20912095define <4 x float > @sitofp_shuf_narrow_elts (<4 x i64 > %x , <4 x i64 > %y ) {
20922096; CHECK-LABEL: @sitofp_shuf_narrow_elts(
20932097; 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) {
21012105 ret <4 x float > %r
21022106}
21032107
2108+ ; one extra use is ok
2109+
21042110define <4 x float > @uitofp_shuf_extra_use1 (<4 x i32 > %x , <4 x i32 > %y ) {
21052111; CHECK-LABEL: @uitofp_shuf_extra_use1(
21062112; CHECK-NEXT: [[NX:%.*]] = uitofp <4 x i32> [[X:%.*]] to <4 x float>
21072113; 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 >
21102116; CHECK-NEXT: ret <4 x float> [[R]]
21112117;
21122118 %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) {
21162122 ret <4 x float > %r
21172123}
21182124
2125+ ; one extra use is ok
2126+
21192127define <4 x float > @sitofp_shuf_extra_use2 (<4 x i32 > %x , <4 x i32 > %y ) {
21202128; CHECK-LABEL: @sitofp_shuf_extra_use2(
2121- ; CHECK-NEXT: [[NX:%.*]] = sitofp <4 x i32> [[X:%.*]] to <4 x float>
21222129; CHECK-NEXT: [[NY:%.*]] = sitofp <4 x i32> [[Y:%.*]] to <4 x float>
21232130; 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>
21252133; CHECK-NEXT: ret <4 x float> [[R]]
21262134;
21272135 %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) {
21312139 ret <4 x float > %r
21322140}
21332141
2142+ ; negative test - both ops have extra uses
2143+
21342144define <2 x float > @sitofp_shuf_extra_use3 (<2 x i32 > %x , <2 x i32 > %y ) {
21352145; CHECK-LABEL: @sitofp_shuf_extra_use3(
21362146; 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) {
21482158 ret <2 x float > %r
21492159}
21502160
2161+ ; negative test - mismatched casts
2162+
21512163define <4 x i32 > @fptoi_shuf (<4 x float > %x , <4 x float > %y ) {
21522164; CHECK-LABEL: @fptoi_shuf(
21532165; 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) {
21612173 ret <4 x i32 > %r
21622174}
21632175
2164- ; length-changing shuffle
2176+ ; negative test - length-changing shuffle
21652177
21662178define <4 x float > @sitofp_shuf_widen (<2 x i32 > %x , <2 x i32 > %y ) {
21672179; CHECK-LABEL: @sitofp_shuf_widen(
@@ -2176,7 +2188,7 @@ define <4 x float> @sitofp_shuf_widen(<2 x i32> %x, <2 x i32> %y) {
21762188 ret <4 x float > %r
21772189}
21782190
2179- ; length-changing shuffle
2191+ ; negative test - length-changing shuffle
21802192
21812193define <2 x float > @uitofp_shuf_narrow (<4 x i32 > %x , <4 x i32 > %y ) {
21822194; CHECK-LABEL: @uitofp_shuf_narrow(
0 commit comments