; SSE-LABEL: reassociate_and_v4i32:
; SSE: # %bb.0:
; SSE-NEXT: paddd %xmm1, %xmm0
-; SSE-NEXT: pand %xmm3, %xmm2
; SSE-NEXT: pand %xmm2, %xmm0
+; SSE-NEXT: pand %xmm3, %xmm0
; SSE-NEXT: retq
;
; AVX2-LABEL: reassociate_and_v4i32:
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0
-; AVX2-NEXT: vpand %xmm3, %xmm2, %xmm1
-; AVX2-NEXT: vpand %xmm1, %xmm0, %xmm0
+; AVX2-NEXT: vpand %xmm0, %xmm2, %xmm0
+; AVX2-NEXT: vpand %xmm0, %xmm3, %xmm0
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_and_v4i32:
; SSE-LABEL: reassociate_or_v4i32:
; SSE: # %bb.0:
; SSE-NEXT: paddd %xmm1, %xmm0
-; SSE-NEXT: por %xmm3, %xmm2
; SSE-NEXT: por %xmm2, %xmm0
+; SSE-NEXT: por %xmm3, %xmm0
; SSE-NEXT: retq
;
; AVX2-LABEL: reassociate_or_v4i32:
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0
-; AVX2-NEXT: vpor %xmm3, %xmm2, %xmm1
-; AVX2-NEXT: vpor %xmm1, %xmm0, %xmm0
+; AVX2-NEXT: vpor %xmm0, %xmm2, %xmm0
+; AVX2-NEXT: vpor %xmm0, %xmm3, %xmm0
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_or_v4i32:
; SSE-LABEL: reassociate_xor_v4i32:
; SSE: # %bb.0:
; SSE-NEXT: paddd %xmm1, %xmm0
-; SSE-NEXT: pxor %xmm3, %xmm2
; SSE-NEXT: pxor %xmm2, %xmm0
+; SSE-NEXT: pxor %xmm3, %xmm0
; SSE-NEXT: retq
;
; AVX2-LABEL: reassociate_xor_v4i32:
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %xmm1, %xmm0, %xmm0
-; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm1
-; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
+; AVX2-NEXT: vpxor %xmm0, %xmm2, %xmm0
+; AVX2-NEXT: vpxor %xmm0, %xmm3, %xmm0
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_xor_v4i32:
; SSE-LABEL: reassociate_and_v8i32:
; SSE: # %bb.0:
; SSE-NEXT: paddd %xmm2, %xmm0
-; SSE-NEXT: pand %xmm6, %xmm4
; SSE-NEXT: pand %xmm4, %xmm0
+; SSE-NEXT: pand %xmm6, %xmm0
; SSE-NEXT: paddd %xmm3, %xmm1
-; SSE-NEXT: pand %xmm7, %xmm5
; SSE-NEXT: pand %xmm5, %xmm1
+; SSE-NEXT: pand %xmm7, %xmm1
; SSE-NEXT: retq
;
; AVX2-LABEL: reassociate_and_v8i32:
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vpand %ymm3, %ymm2, %ymm1
-; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
+; AVX2-NEXT: vpand %ymm0, %ymm2, %ymm0
+; AVX2-NEXT: vpand %ymm0, %ymm3, %ymm0
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_and_v8i32:
; SSE-LABEL: reassociate_or_v8i32:
; SSE: # %bb.0:
; SSE-NEXT: paddd %xmm2, %xmm0
-; SSE-NEXT: por %xmm6, %xmm4
; SSE-NEXT: por %xmm4, %xmm0
+; SSE-NEXT: por %xmm6, %xmm0
; SSE-NEXT: paddd %xmm3, %xmm1
-; SSE-NEXT: por %xmm7, %xmm5
; SSE-NEXT: por %xmm5, %xmm1
+; SSE-NEXT: por %xmm7, %xmm1
; SSE-NEXT: retq
;
; AVX2-LABEL: reassociate_or_v8i32:
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vpor %ymm3, %ymm2, %ymm1
-; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
+; AVX2-NEXT: vpor %ymm0, %ymm2, %ymm0
+; AVX2-NEXT: vpor %ymm0, %ymm3, %ymm0
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_or_v8i32:
; SSE-LABEL: reassociate_xor_v8i32:
; SSE: # %bb.0:
; SSE-NEXT: paddd %xmm2, %xmm0
-; SSE-NEXT: pxor %xmm6, %xmm4
; SSE-NEXT: pxor %xmm4, %xmm0
+; SSE-NEXT: pxor %xmm6, %xmm0
; SSE-NEXT: paddd %xmm3, %xmm1
-; SSE-NEXT: pxor %xmm7, %xmm5
; SSE-NEXT: pxor %xmm5, %xmm1
+; SSE-NEXT: pxor %xmm7, %xmm1
; SSE-NEXT: retq
;
; AVX2-LABEL: reassociate_xor_v8i32:
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm1
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0
+; AVX2-NEXT: vpxor %ymm0, %ymm2, %ymm0
+; AVX2-NEXT: vpxor %ymm0, %ymm3, %ymm0
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_xor_v8i32:
; AVX2-LABEL: reassociate_and_v16i32:
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpand %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
+; AVX2-NEXT: vpand %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpand %ymm0, %ymm6, %ymm0
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpand %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpand %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpand %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_and_v16i32:
; AVX2-LABEL: reassociate_or_v16i32:
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpor %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0
+; AVX2-NEXT: vpor %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpor %ymm0, %ymm6, %ymm0
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpor %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpor %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpor %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpor %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_or_v16i32:
; AVX2-LABEL: reassociate_xor_v16i32:
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0
+; AVX2-NEXT: vpxor %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpxor %ymm0, %ymm6, %ymm0
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpxor %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpxor %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpxor %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_xor_v16i32:
; SSE-LABEL: reassociate_umax_v16i8:
; SSE: # %bb.0:
; SSE-NEXT: paddb %xmm1, %xmm0
-; SSE-NEXT: pmaxub %xmm3, %xmm2
; SSE-NEXT: pmaxub %xmm2, %xmm0
+; SSE-NEXT: pmaxub %xmm3, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: reassociate_umax_v16i8:
; AVX: # %bb.0:
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpmaxub %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpmaxub %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpmaxub %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <16 x i8> %x0, %x1
; AVX-LABEL: reassociate_umax_v8i16:
; AVX: # %bb.0:
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpmaxuw %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpmaxuw %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpmaxuw %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <8 x i16> %x0, %x1
; AVX-LABEL: reassociate_umax_v4i32:
; AVX: # %bb.0:
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpmaxud %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpmaxud %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpmaxud %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <4 x i32> %x0, %x1
; AVX512-LABEL: reassociate_umax_v2i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
-; AVX512-NEXT: vpmaxuq %xmm3, %xmm2, %xmm1
-; AVX512-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0
+; AVX512-NEXT: vpmaxuq %xmm0, %xmm2, %xmm0
+; AVX512-NEXT: vpmaxuq %xmm0, %xmm3, %xmm0
; AVX512-NEXT: retq
%t0 = add <2 x i64> %x0, %x1
; AVX-LABEL: reassociate_smax_v16i8:
; AVX: # %bb.0:
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpmaxsb %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpmaxsb %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpmaxsb %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <16 x i8> %x0, %x1
; SSE-LABEL: reassociate_smax_v8i16:
; SSE: # %bb.0:
; SSE-NEXT: paddw %xmm1, %xmm0
-; SSE-NEXT: pmaxsw %xmm3, %xmm2
; SSE-NEXT: pmaxsw %xmm2, %xmm0
+; SSE-NEXT: pmaxsw %xmm3, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: reassociate_smax_v8i16:
; AVX: # %bb.0:
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpmaxsw %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpmaxsw %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpmaxsw %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <8 x i16> %x0, %x1
; AVX-LABEL: reassociate_smax_v4i32:
; AVX: # %bb.0:
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpmaxsd %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpmaxsd %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpmaxsd %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <4 x i32> %x0, %x1
; AVX512-LABEL: reassociate_smax_v2i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
-; AVX512-NEXT: vpmaxsq %xmm3, %xmm2, %xmm1
-; AVX512-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0
+; AVX512-NEXT: vpmaxsq %xmm0, %xmm2, %xmm0
+; AVX512-NEXT: vpmaxsq %xmm0, %xmm3, %xmm0
; AVX512-NEXT: retq
%t0 = add <2 x i64> %x0, %x1
; SSE-LABEL: reassociate_umin_v16i8:
; SSE: # %bb.0:
; SSE-NEXT: paddb %xmm1, %xmm0
-; SSE-NEXT: pminub %xmm3, %xmm2
; SSE-NEXT: pminub %xmm2, %xmm0
+; SSE-NEXT: pminub %xmm3, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: reassociate_umin_v16i8:
; AVX: # %bb.0:
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpminub %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpminub %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpminub %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <16 x i8> %x0, %x1
; AVX-LABEL: reassociate_umin_v8i16:
; AVX: # %bb.0:
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpminuw %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpminuw %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpminuw %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <8 x i16> %x0, %x1
; AVX-LABEL: reassociate_umin_v4i32:
; AVX: # %bb.0:
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpminud %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpminud %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpminud %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <4 x i32> %x0, %x1
; AVX512-LABEL: reassociate_umin_v2i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
-; AVX512-NEXT: vpminuq %xmm3, %xmm2, %xmm1
-; AVX512-NEXT: vpminuq %xmm1, %xmm0, %xmm0
+; AVX512-NEXT: vpminuq %xmm0, %xmm2, %xmm0
+; AVX512-NEXT: vpminuq %xmm0, %xmm3, %xmm0
; AVX512-NEXT: retq
%t0 = add <2 x i64> %x0, %x1
; AVX-LABEL: reassociate_smin_v16i8:
; AVX: # %bb.0:
; AVX-NEXT: vpaddb %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpminsb %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpminsb %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpminsb %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <16 x i8> %x0, %x1
; SSE-LABEL: reassociate_smin_v8i16:
; SSE: # %bb.0:
; SSE-NEXT: paddw %xmm1, %xmm0
-; SSE-NEXT: pminsw %xmm3, %xmm2
; SSE-NEXT: pminsw %xmm2, %xmm0
+; SSE-NEXT: pminsw %xmm3, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: reassociate_smin_v8i16:
; AVX: # %bb.0:
; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpminsw %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpminsw %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpminsw %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <8 x i16> %x0, %x1
; AVX-LABEL: reassociate_smin_v4i32:
; AVX: # %bb.0:
; AVX-NEXT: vpaddd %xmm1, %xmm0, %xmm0
-; AVX-NEXT: vpminsd %xmm3, %xmm2, %xmm1
-; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0
+; AVX-NEXT: vpminsd %xmm0, %xmm2, %xmm0
+; AVX-NEXT: vpminsd %xmm0, %xmm3, %xmm0
; AVX-NEXT: retq
%t0 = add <4 x i32> %x0, %x1
; AVX512-LABEL: reassociate_smin_v2i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %xmm1, %xmm0, %xmm0
-; AVX512-NEXT: vpminsq %xmm3, %xmm2, %xmm1
-; AVX512-NEXT: vpminsq %xmm1, %xmm0, %xmm0
+; AVX512-NEXT: vpminsq %xmm0, %xmm2, %xmm0
+; AVX512-NEXT: vpminsq %xmm0, %xmm3, %xmm0
; AVX512-NEXT: retq
%t0 = add <2 x i64> %x0, %x1
; SSE: # %bb.0:
; SSE-NEXT: paddb %xmm2, %xmm0
; SSE-NEXT: paddb %xmm3, %xmm1
-; SSE-NEXT: pmaxub %xmm6, %xmm4
-; SSE-NEXT: pmaxub %xmm4, %xmm0
-; SSE-NEXT: pmaxub %xmm7, %xmm5
; SSE-NEXT: pmaxub %xmm5, %xmm1
+; SSE-NEXT: pmaxub %xmm4, %xmm0
+; SSE-NEXT: pmaxub %xmm6, %xmm0
+; SSE-NEXT: pmaxub %xmm7, %xmm1
; SSE-NEXT: retq
;
; AVX-LABEL: reassociate_umax_v32i8:
; AVX: # %bb.0:
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpmaxub %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpmaxub %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpmaxub %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <32 x i8> %x0, %x1
; AVX-LABEL: reassociate_umax_v16i16:
; AVX: # %bb.0:
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpmaxuw %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpmaxuw %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpmaxuw %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <16 x i16> %x0, %x1
; AVX-LABEL: reassociate_umax_v8i32:
; AVX: # %bb.0:
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpmaxud %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpmaxud %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpmaxud %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <8 x i32> %x0, %x1
;
; AVX2-LABEL: reassociate_umax_v4i64:
; AVX2: # %bb.0:
+; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
-; AVX2-NEXT: vpxor %ymm1, %ymm2, %ymm4
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm5
-; AVX2-NEXT: vpcmpgtq %ymm5, %ymm4, %ymm4
-; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vxorpd %ymm1, %ymm0, %ymm2
-; AVX2-NEXT: vpxor %ymm1, %ymm3, %ymm1
-; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm1
+; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5
+; AVX2-NEXT: vpcmpgtq %ymm5, %ymm1, %ymm1
+; AVX2-NEXT: vblendvpd %ymm1, %ymm2, %ymm0, %ymm0
+; AVX2-NEXT: vxorpd %ymm4, %ymm0, %ymm1
+; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2
+; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm1
; AVX2-NEXT: vblendvpd %ymm1, %ymm3, %ymm0, %ymm0
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_umax_v4i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
-; AVX512-NEXT: vpmaxuq %ymm3, %ymm2, %ymm1
-; AVX512-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0
+; AVX512-NEXT: vpmaxuq %ymm0, %ymm2, %ymm0
+; AVX512-NEXT: vpmaxuq %ymm0, %ymm3, %ymm0
; AVX512-NEXT: retq
%t0 = add <4 x i64> %x0, %x1
; AVX-LABEL: reassociate_smax_v32i8:
; AVX: # %bb.0:
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpmaxsb %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpmaxsb %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpmaxsb %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <32 x i8> %x0, %x1
; SSE: # %bb.0:
; SSE-NEXT: paddw %xmm2, %xmm0
; SSE-NEXT: paddw %xmm3, %xmm1
-; SSE-NEXT: pmaxsw %xmm6, %xmm4
-; SSE-NEXT: pmaxsw %xmm4, %xmm0
-; SSE-NEXT: pmaxsw %xmm7, %xmm5
; SSE-NEXT: pmaxsw %xmm5, %xmm1
+; SSE-NEXT: pmaxsw %xmm4, %xmm0
+; SSE-NEXT: pmaxsw %xmm6, %xmm0
+; SSE-NEXT: pmaxsw %xmm7, %xmm1
; SSE-NEXT: retq
;
; AVX-LABEL: reassociate_smax_v16i16:
; AVX: # %bb.0:
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpmaxsw %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpmaxsw %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpmaxsw %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <16 x i16> %x0, %x1
; AVX-LABEL: reassociate_smax_v8i32:
; AVX: # %bb.0:
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpmaxsd %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpmaxsd %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpmaxsd %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <8 x i32> %x0, %x1
; AVX512-LABEL: reassociate_smax_v4i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
-; AVX512-NEXT: vpmaxsq %ymm3, %ymm2, %ymm1
-; AVX512-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
+; AVX512-NEXT: vpmaxsq %ymm0, %ymm2, %ymm0
+; AVX512-NEXT: vpmaxsq %ymm0, %ymm3, %ymm0
; AVX512-NEXT: retq
%t0 = add <4 x i64> %x0, %x1
; SSE: # %bb.0:
; SSE-NEXT: paddb %xmm2, %xmm0
; SSE-NEXT: paddb %xmm3, %xmm1
-; SSE-NEXT: pminub %xmm6, %xmm4
-; SSE-NEXT: pminub %xmm4, %xmm0
-; SSE-NEXT: pminub %xmm7, %xmm5
; SSE-NEXT: pminub %xmm5, %xmm1
+; SSE-NEXT: pminub %xmm4, %xmm0
+; SSE-NEXT: pminub %xmm6, %xmm0
+; SSE-NEXT: pminub %xmm7, %xmm1
; SSE-NEXT: retq
;
; AVX-LABEL: reassociate_umin_v32i8:
; AVX: # %bb.0:
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpminub %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpminub %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpminub %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpminub %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <32 x i8> %x0, %x1
; AVX-LABEL: reassociate_umin_v16i16:
; AVX: # %bb.0:
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpminuw %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpminuw %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpminuw %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpminuw %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <16 x i16> %x0, %x1
; AVX-LABEL: reassociate_umin_v8i32:
; AVX: # %bb.0:
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpminud %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpminud %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpminud %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpminud %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <8 x i32> %x0, %x1
;
; AVX2-LABEL: reassociate_umin_v4i64:
; AVX2: # %bb.0:
+; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0
-; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
-; AVX2-NEXT: vpxor %ymm1, %ymm2, %ymm4
-; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm5
-; AVX2-NEXT: vpcmpgtq %ymm4, %ymm5, %ymm4
-; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vxorpd %ymm1, %ymm0, %ymm2
-; AVX2-NEXT: vpxor %ymm1, %ymm3, %ymm1
-; AVX2-NEXT: vpcmpgtq %ymm1, %ymm2, %ymm1
+; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm1
+; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5
+; AVX2-NEXT: vpcmpgtq %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vblendvpd %ymm1, %ymm2, %ymm0, %ymm0
+; AVX2-NEXT: vxorpd %ymm4, %ymm0, %ymm1
+; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2
+; AVX2-NEXT: vpcmpgtq %ymm2, %ymm1, %ymm1
; AVX2-NEXT: vblendvpd %ymm1, %ymm3, %ymm0, %ymm0
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_umin_v4i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
-; AVX512-NEXT: vpminuq %ymm3, %ymm2, %ymm1
-; AVX512-NEXT: vpminuq %ymm1, %ymm0, %ymm0
+; AVX512-NEXT: vpminuq %ymm0, %ymm2, %ymm0
+; AVX512-NEXT: vpminuq %ymm0, %ymm3, %ymm0
; AVX512-NEXT: retq
%t0 = add <4 x i64> %x0, %x1
; AVX-LABEL: reassociate_smin_v32i8:
; AVX: # %bb.0:
; AVX-NEXT: vpaddb %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpminsb %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpminsb %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpminsb %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpminsb %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <32 x i8> %x0, %x1
; SSE: # %bb.0:
; SSE-NEXT: paddw %xmm2, %xmm0
; SSE-NEXT: paddw %xmm3, %xmm1
-; SSE-NEXT: pminsw %xmm6, %xmm4
-; SSE-NEXT: pminsw %xmm4, %xmm0
-; SSE-NEXT: pminsw %xmm7, %xmm5
; SSE-NEXT: pminsw %xmm5, %xmm1
+; SSE-NEXT: pminsw %xmm4, %xmm0
+; SSE-NEXT: pminsw %xmm6, %xmm0
+; SSE-NEXT: pminsw %xmm7, %xmm1
; SSE-NEXT: retq
;
; AVX-LABEL: reassociate_smin_v16i16:
; AVX: # %bb.0:
; AVX-NEXT: vpaddw %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpminsw %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpminsw %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpminsw %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpminsw %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <16 x i16> %x0, %x1
; AVX-LABEL: reassociate_smin_v8i32:
; AVX: # %bb.0:
; AVX-NEXT: vpaddd %ymm1, %ymm0, %ymm0
-; AVX-NEXT: vpminsd %ymm3, %ymm2, %ymm1
-; AVX-NEXT: vpminsd %ymm1, %ymm0, %ymm0
+; AVX-NEXT: vpminsd %ymm0, %ymm2, %ymm0
+; AVX-NEXT: vpminsd %ymm0, %ymm3, %ymm0
; AVX-NEXT: retq
%t0 = add <8 x i32> %x0, %x1
; AVX512-LABEL: reassociate_smin_v4i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0
-; AVX512-NEXT: vpminsq %ymm3, %ymm2, %ymm1
-; AVX512-NEXT: vpminsq %ymm1, %ymm0, %ymm0
+; AVX512-NEXT: vpminsq %ymm0, %ymm2, %ymm0
+; AVX512-NEXT: vpminsq %ymm0, %ymm3, %ymm0
; AVX512-NEXT: retq
%t0 = add <4 x i64> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpmaxub %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpmaxub %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpmaxub %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpmaxub %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpmaxub %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpmaxub %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpmaxub %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_umax_v64i8:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpmaxub %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpmaxub %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpmaxub %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpmaxub %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <64 x i8> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpmaxuw %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpmaxuw %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpmaxuw %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpmaxuw %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpmaxuw %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpmaxuw %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpmaxuw %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_umax_v32i16:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpmaxuw %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpmaxuw %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpmaxuw %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <32 x i16> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpmaxud %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpmaxud %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpmaxud %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpmaxud %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpmaxud %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpmaxud %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpmaxud %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_umax_v16i32:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpmaxud %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpmaxud %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpmaxud %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpmaxud %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <16 x i32> %x0, %x1
;
; AVX2-LABEL: reassociate_umax_v8i64:
; AVX2: # %bb.0:
-; AVX2-NEXT: vpaddq %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm3 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
-; AVX2-NEXT: vpxor %ymm3, %ymm5, %ymm8
-; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm9
-; AVX2-NEXT: vpcmpgtq %ymm9, %ymm8, %ymm8
-; AVX2-NEXT: vblendvpd %ymm8, %ymm5, %ymm1, %ymm1
; AVX2-NEXT: vpaddq %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpxor %ymm3, %ymm4, %ymm2
-; AVX2-NEXT: vpxor %ymm3, %ymm0, %ymm5
-; AVX2-NEXT: vpcmpgtq %ymm5, %ymm2, %ymm2
-; AVX2-NEXT: vblendvpd %ymm2, %ymm4, %ymm0, %ymm0
-; AVX2-NEXT: vxorpd %ymm3, %ymm0, %ymm2
-; AVX2-NEXT: vpxor %ymm3, %ymm6, %ymm4
-; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2
-; AVX2-NEXT: vblendvpd %ymm2, %ymm6, %ymm0, %ymm0
-; AVX2-NEXT: vxorpd %ymm3, %ymm1, %ymm2
-; AVX2-NEXT: vpxor %ymm3, %ymm7, %ymm3
-; AVX2-NEXT: vpcmpgtq %ymm2, %ymm3, %ymm2
+; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
+; AVX2-NEXT: vpaddq %ymm3, %ymm1, %ymm1
+; AVX2-NEXT: vpxor %ymm2, %ymm5, %ymm3
+; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm8
+; AVX2-NEXT: vpcmpgtq %ymm8, %ymm3, %ymm3
+; AVX2-NEXT: vblendvpd %ymm3, %ymm5, %ymm1, %ymm1
+; AVX2-NEXT: vpxor %ymm2, %ymm4, %ymm3
+; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm5
+; AVX2-NEXT: vpcmpgtq %ymm5, %ymm3, %ymm3
+; AVX2-NEXT: vblendvpd %ymm3, %ymm4, %ymm0, %ymm0
+; AVX2-NEXT: vxorpd %ymm2, %ymm0, %ymm3
+; AVX2-NEXT: vpxor %ymm2, %ymm6, %ymm4
+; AVX2-NEXT: vpcmpgtq %ymm3, %ymm4, %ymm3
+; AVX2-NEXT: vblendvpd %ymm3, %ymm6, %ymm0, %ymm0
+; AVX2-NEXT: vxorpd %ymm2, %ymm1, %ymm3
+; AVX2-NEXT: vpxor %ymm2, %ymm7, %ymm2
+; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
; AVX2-NEXT: vblendvpd %ymm2, %ymm7, %ymm1, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_umax_v8i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpmaxuq %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpmaxuq %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpmaxuq %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <8 x i64> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpmaxsb %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpmaxsb %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpmaxsb %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpmaxsb %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpmaxsb %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpmaxsb %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpmaxsb %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_smax_v64i8:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpmaxsb %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpmaxsb %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpmaxsb %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <64 x i8> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpmaxsw %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpmaxsw %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpmaxsw %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpmaxsw %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpmaxsw %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpmaxsw %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpmaxsw %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_smax_v32i16:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpmaxsw %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpmaxsw %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpmaxsw %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <32 x i16> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpmaxsd %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpmaxsd %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpmaxsd %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpmaxsd %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpmaxsd %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpmaxsd %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpmaxsd %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_smax_v16i32:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpmaxsd %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpmaxsd %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpmaxsd %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <16 x i32> %x0, %x1
; AVX512-LABEL: reassociate_smax_v8i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpmaxsq %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpmaxsq %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpmaxsq %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <8 x i64> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpminub %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpminub %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpminub %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpminub %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpminub %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpminub %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpminub %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_umin_v64i8:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpminub %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpminub %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpminub %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpminub %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <64 x i8> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpminuw %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpminuw %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpminuw %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpminuw %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpminuw %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpminuw %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpminuw %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_umin_v32i16:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpminuw %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpminuw %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpminuw %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpminuw %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <32 x i16> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpminud %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpminud %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpminud %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpminud %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpminud %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpminud %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpminud %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_umin_v16i32:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpminud %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpminud %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpminud %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpminud %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <16 x i32> %x0, %x1
;
; AVX2-LABEL: reassociate_umin_v8i64:
; AVX2: # %bb.0:
-; AVX2-NEXT: vpaddq %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm3 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
-; AVX2-NEXT: vpxor %ymm3, %ymm5, %ymm8
-; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm9
-; AVX2-NEXT: vpcmpgtq %ymm8, %ymm9, %ymm8
-; AVX2-NEXT: vblendvpd %ymm8, %ymm5, %ymm1, %ymm1
; AVX2-NEXT: vpaddq %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpxor %ymm3, %ymm4, %ymm2
-; AVX2-NEXT: vpxor %ymm3, %ymm0, %ymm5
-; AVX2-NEXT: vpcmpgtq %ymm2, %ymm5, %ymm2
-; AVX2-NEXT: vblendvpd %ymm2, %ymm4, %ymm0, %ymm0
-; AVX2-NEXT: vxorpd %ymm3, %ymm0, %ymm2
-; AVX2-NEXT: vpxor %ymm3, %ymm6, %ymm4
-; AVX2-NEXT: vpcmpgtq %ymm4, %ymm2, %ymm2
-; AVX2-NEXT: vblendvpd %ymm2, %ymm6, %ymm0, %ymm0
-; AVX2-NEXT: vxorpd %ymm3, %ymm1, %ymm2
-; AVX2-NEXT: vpxor %ymm3, %ymm7, %ymm3
-; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
+; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
+; AVX2-NEXT: vpaddq %ymm3, %ymm1, %ymm1
+; AVX2-NEXT: vpxor %ymm2, %ymm5, %ymm3
+; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm8
+; AVX2-NEXT: vpcmpgtq %ymm3, %ymm8, %ymm3
+; AVX2-NEXT: vblendvpd %ymm3, %ymm5, %ymm1, %ymm1
+; AVX2-NEXT: vpxor %ymm2, %ymm4, %ymm3
+; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm5
+; AVX2-NEXT: vpcmpgtq %ymm3, %ymm5, %ymm3
+; AVX2-NEXT: vblendvpd %ymm3, %ymm4, %ymm0, %ymm0
+; AVX2-NEXT: vxorpd %ymm2, %ymm0, %ymm3
+; AVX2-NEXT: vpxor %ymm2, %ymm6, %ymm4
+; AVX2-NEXT: vpcmpgtq %ymm4, %ymm3, %ymm3
+; AVX2-NEXT: vblendvpd %ymm3, %ymm6, %ymm0, %ymm0
+; AVX2-NEXT: vxorpd %ymm2, %ymm1, %ymm3
+; AVX2-NEXT: vpxor %ymm2, %ymm7, %ymm2
+; AVX2-NEXT: vpcmpgtq %ymm2, %ymm3, %ymm2
; AVX2-NEXT: vblendvpd %ymm2, %ymm7, %ymm1, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_umin_v8i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpminuq %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpminuq %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpminuq %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <8 x i64> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddb %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpminsb %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpminsb %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpminsb %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpminsb %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpminsb %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpminsb %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpminsb %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_smin_v64i8:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddb %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpminsb %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpminsb %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpminsb %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpminsb %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <64 x i8> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddw %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpminsw %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpminsw %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpminsw %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpminsw %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpminsw %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpminsw %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpminsw %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_smin_v32i16:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddw %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpminsw %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpminsw %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpminsw %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpminsw %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <32 x i16> %x0, %x1
; AVX2: # %bb.0:
; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
-; AVX2-NEXT: vpminsd %ymm6, %ymm4, %ymm2
-; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
-; AVX2-NEXT: vpminsd %ymm7, %ymm5, %ymm2
-; AVX2-NEXT: vpminsd %ymm2, %ymm1, %ymm1
+; AVX2-NEXT: vpminsd %ymm1, %ymm5, %ymm1
+; AVX2-NEXT: vpminsd %ymm0, %ymm4, %ymm0
+; AVX2-NEXT: vpminsd %ymm0, %ymm6, %ymm0
+; AVX2-NEXT: vpminsd %ymm1, %ymm7, %ymm1
; AVX2-NEXT: retq
;
; AVX512-LABEL: reassociate_smin_v16i32:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpminsd %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpminsd %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpminsd %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpminsd %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <16 x i32> %x0, %x1
; AVX512-LABEL: reassociate_smin_v8i64:
; AVX512: # %bb.0:
; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0
-; AVX512-NEXT: vpminsq %zmm3, %zmm2, %zmm1
-; AVX512-NEXT: vpminsq %zmm1, %zmm0, %zmm0
+; AVX512-NEXT: vpminsq %zmm0, %zmm2, %zmm0
+; AVX512-NEXT: vpminsq %zmm0, %zmm3, %zmm0
; AVX512-NEXT: retq
%t0 = add <8 x i64> %x0, %x1
; SSE-NEXT: mulss %xmm2, %xmm3
; SSE-NEXT: mulss %xmm1, %xmm2
; SSE-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; SSE-NEXT: mulss %xmm3, %xmm2
+; SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; SSE-NEXT: cmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; SSE-NEXT: andnps %xmm2, %xmm0
; SSE-NEXT: retq
; AVX1-NEXT: vmulss %xmm1, %xmm2, %xmm1
; AVX1-NEXT: vaddss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
; AVX1-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
-; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
; AVX1-NEXT: vmulss %xmm1, %xmm2, %xmm1
+; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
; AVX1-NEXT: vcmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
; AVX1-NEXT: vandnps %xmm1, %xmm0, %xmm0
; AVX1-NEXT: retq
; AVX512-LABEL: finite_f32_estimate_ieee_ninf:
; AVX512: # %bb.0:
; AVX512-NEXT: vrsqrtss %xmm0, %xmm0, %xmm1
-; AVX512-NEXT: vmulss %xmm1, %xmm0, %xmm2
-; AVX512-NEXT: vfmadd213ss {{.*#+}} xmm1 = (xmm2 * xmm1) + mem
-; AVX512-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
-; AVX512-NEXT: vmulss %xmm1, %xmm2, %xmm1
; AVX512-NEXT: vbroadcastss {{.*#+}} xmm2 = [NaN,NaN,NaN,NaN]
-; AVX512-NEXT: vandps %xmm2, %xmm0, %xmm0
-; AVX512-NEXT: vcmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k1
-; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
-; AVX512-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1}
-; AVX512-NEXT: vmovaps %xmm1, %xmm0
+; AVX512-NEXT: vandps %xmm2, %xmm0, %xmm2
+; AVX512-NEXT: vmulss %xmm1, %xmm0, %xmm0
+; AVX512-NEXT: vfmadd213ss {{.*#+}} xmm1 = (xmm0 * xmm1) + mem
+; AVX512-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; AVX512-NEXT: vcmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %k1
+; AVX512-NEXT: vmulss %xmm1, %xmm0, %xmm0
+; AVX512-NEXT: vxorps %xmm1, %xmm1, %xmm1
+; AVX512-NEXT: vmovss %xmm1, %xmm0, %xmm0 {%k1}
; AVX512-NEXT: retq
%call = tail call ninf afn float @__sqrtf_finite(float %f) #2
ret float %call
; SSE-NEXT: mulss %xmm2, %xmm3
; SSE-NEXT: mulss %xmm1, %xmm2
; SSE-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; SSE-NEXT: mulss %xmm3, %xmm2
+; SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; SSE-NEXT: cmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; SSE-NEXT: andnps %xmm2, %xmm0
; SSE-NEXT: retq
; AVX1-NEXT: vmulss %xmm1, %xmm2, %xmm1
; AVX1-NEXT: vaddss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
; AVX1-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
-; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
; AVX1-NEXT: vmulss %xmm1, %xmm2, %xmm1
+; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
; AVX1-NEXT: vcmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
; AVX1-NEXT: vandnps %xmm1, %xmm0, %xmm0
; AVX1-NEXT: retq
; AVX512-LABEL: sqrtf_check_denorms_ninf:
; AVX512: # %bb.0:
; AVX512-NEXT: vrsqrtss %xmm0, %xmm0, %xmm1
-; AVX512-NEXT: vmulss %xmm1, %xmm0, %xmm2
-; AVX512-NEXT: vfmadd213ss {{.*#+}} xmm1 = (xmm2 * xmm1) + mem
-; AVX512-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
-; AVX512-NEXT: vmulss %xmm1, %xmm2, %xmm1
; AVX512-NEXT: vbroadcastss {{.*#+}} xmm2 = [NaN,NaN,NaN,NaN]
-; AVX512-NEXT: vandps %xmm2, %xmm0, %xmm0
-; AVX512-NEXT: vcmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k1
-; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
-; AVX512-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1}
-; AVX512-NEXT: vmovaps %xmm1, %xmm0
+; AVX512-NEXT: vandps %xmm2, %xmm0, %xmm2
+; AVX512-NEXT: vmulss %xmm1, %xmm0, %xmm0
+; AVX512-NEXT: vfmadd213ss {{.*#+}} xmm1 = (xmm0 * xmm1) + mem
+; AVX512-NEXT: vmulss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; AVX512-NEXT: vcmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %k1
+; AVX512-NEXT: vmulss %xmm1, %xmm0, %xmm0
+; AVX512-NEXT: vxorps %xmm1, %xmm1, %xmm1
+; AVX512-NEXT: vmovss %xmm1, %xmm0, %xmm0 {%k1}
; AVX512-NEXT: retq
%call = tail call ninf afn float @__sqrtf_finite(float %x) #2
ret float %call
; SSE-NEXT: mulps %xmm2, %xmm3
; SSE-NEXT: mulps %xmm1, %xmm2
; SSE-NEXT: addps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
-; SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; SSE-NEXT: mulps %xmm3, %xmm2
+; SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
; SSE-NEXT: movaps {{.*#+}} xmm1 = [1.17549435E-38,1.17549435E-38,1.17549435E-38,1.17549435E-38]
; SSE-NEXT: cmpleps %xmm0, %xmm1
; SSE-NEXT: andps %xmm2, %xmm1
; AVX1-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm3
; AVX1-NEXT: vmulps %xmm1, %xmm2, %xmm1
; AVX1-NEXT: vaddps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
-; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
; AVX1-NEXT: vmulps %xmm1, %xmm3, %xmm1
+; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [1.17549435E-38,1.17549435E-38,1.17549435E-38,1.17549435E-38]
; AVX1-NEXT: vcmpleps %xmm0, %xmm2, %xmm0
; AVX1-NEXT: vandps %xmm1, %xmm0, %xmm0
; AVX1-LABEL: f32_estimate2:
; AVX1: # %bb.0:
; AVX1-NEXT: vrsqrtss %xmm0, %xmm0, %xmm1
-; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2
-; AVX1-NEXT: vmulss %xmm1, %xmm0, %xmm0
-; AVX1-NEXT: vcmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm1
-; AVX1-NEXT: vandnps %xmm0, %xmm1, %xmm0
+; AVX1-NEXT: vmulss %xmm1, %xmm0, %xmm1
+; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; AVX1-NEXT: vcmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; AVX1-NEXT: vandnps %xmm1, %xmm0, %xmm0
; AVX1-NEXT: retq
;
; AVX512-LABEL: f32_estimate2:
; AVX512: # %bb.0:
-; AVX512-NEXT: vrsqrtss %xmm0, %xmm0, %xmm1
-; AVX512-NEXT: vmulss %xmm1, %xmm0, %xmm1
-; AVX512-NEXT: vbroadcastss {{.*#+}} xmm2 = [NaN,NaN,NaN,NaN]
-; AVX512-NEXT: vandps %xmm2, %xmm0, %xmm0
-; AVX512-NEXT: vcmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %k1
-; AVX512-NEXT: vxorps %xmm0, %xmm0, %xmm0
-; AVX512-NEXT: vmovss %xmm0, %xmm1, %xmm1 {%k1}
-; AVX512-NEXT: vmovaps %xmm1, %xmm0
+; AVX512-NEXT: vbroadcastss {{.*#+}} xmm1 = [NaN,NaN,NaN,NaN]
+; AVX512-NEXT: vrsqrtss %xmm0, %xmm0, %xmm2
+; AVX512-NEXT: vandps %xmm1, %xmm0, %xmm1
+; AVX512-NEXT: vcmpltss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %k1
+; AVX512-NEXT: vmulss %xmm2, %xmm0, %xmm0
+; AVX512-NEXT: vxorps %xmm1, %xmm1, %xmm1
+; AVX512-NEXT: vmovss %xmm1, %xmm0, %xmm0 {%k1}
; AVX512-NEXT: retq
%sqrt = tail call fast float @llvm.sqrt.f32(float %x)
ret float %sqrt
; AVX1-LABEL: v4f32_estimate2:
; AVX1: # %bb.0:
; AVX1-NEXT: vrsqrtps %xmm0, %xmm1
-; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2
-; AVX1-NEXT: vmulps %xmm1, %xmm0, %xmm0
-; AVX1-NEXT: vmovaps {{.*#+}} xmm1 = [1.17549435E-38,1.17549435E-38,1.17549435E-38,1.17549435E-38]
-; AVX1-NEXT: vcmpleps %xmm2, %xmm1, %xmm1
-; AVX1-NEXT: vandps %xmm0, %xmm1, %xmm0
+; AVX1-NEXT: vmulps %xmm1, %xmm0, %xmm1
+; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
+; AVX1-NEXT: vmovaps {{.*#+}} xmm2 = [1.17549435E-38,1.17549435E-38,1.17549435E-38,1.17549435E-38]
+; AVX1-NEXT: vcmpleps %xmm0, %xmm2, %xmm0
+; AVX1-NEXT: vandps %xmm1, %xmm0, %xmm0
; AVX1-NEXT: retq
;
; AVX512-LABEL: v4f32_estimate2:
; AVX1-NEXT: vmulps %ymm2, %ymm0, %ymm0
; AVX1-NEXT: vmovaps {{.*#+}} ymm2 = [-3.0E+0,-3.0E+0,-3.0E+0,-3.0E+0,-3.0E+0,-3.0E+0,-3.0E+0,-3.0E+0]
; AVX1-NEXT: vaddps %ymm2, %ymm0, %ymm0
+; AVX1-NEXT: vrsqrtps %ymm1, %ymm5
; AVX1-NEXT: vmulps %ymm0, %ymm4, %ymm0
-; AVX1-NEXT: vrsqrtps %ymm1, %ymm4
-; AVX1-NEXT: vmulps %ymm3, %ymm4, %ymm3
-; AVX1-NEXT: vmulps %ymm4, %ymm1, %ymm1
-; AVX1-NEXT: vmulps %ymm4, %ymm1, %ymm1
+; AVX1-NEXT: vmulps %ymm3, %ymm5, %ymm3
+; AVX1-NEXT: vmulps %ymm5, %ymm1, %ymm1
+; AVX1-NEXT: vmulps %ymm5, %ymm1, %ymm1
; AVX1-NEXT: vaddps %ymm2, %ymm1, %ymm1
; AVX1-NEXT: vmulps %ymm1, %ymm3, %ymm1
; AVX1-NEXT: retq
; SSE-NEXT: mulps %xmm3, %xmm2
; SSE-NEXT: addps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
; SSE-NEXT: mulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3
-; SSE-NEXT: mulps %xmm2, %xmm3
; SSE-NEXT: andps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE-NEXT: mulps %xmm2, %xmm3
; SSE-NEXT: divps %xmm1, %xmm3
; SSE-NEXT: mulps %xmm3, %xmm0
; SSE-NEXT: retq
; AVX1-NEXT: vmulps %xmm3, %xmm2, %xmm2
; AVX1-NEXT: vaddps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
; AVX1-NEXT: vmulps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm3
-; AVX1-NEXT: vmulps %xmm2, %xmm3, %xmm2
; AVX1-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
+; AVX1-NEXT: vmulps %xmm2, %xmm3, %xmm2
; AVX1-NEXT: vdivps %xmm1, %xmm2, %xmm1
; AVX1-NEXT: vmulps %xmm1, %xmm0, %xmm0
; AVX1-NEXT: retq
; AVX512-NEXT: vmulps %xmm3, %xmm2, %xmm2
; AVX512-NEXT: vbroadcastss {{.*#+}} xmm3 = [-3.0E+0,-3.0E+0,-3.0E+0,-3.0E+0]
; AVX512-NEXT: vaddps %xmm3, %xmm2, %xmm2
-; AVX512-NEXT: vbroadcastss {{.*#+}} xmm3 = [NaN,NaN,NaN,NaN]
; AVX512-NEXT: vmulps %xmm2, %xmm4, %xmm2
+; AVX512-NEXT: vbroadcastss {{.*#+}} xmm3 = [NaN,NaN,NaN,NaN]
; AVX512-NEXT: vandps %xmm3, %xmm1, %xmm1
; AVX512-NEXT: vdivps %xmm1, %xmm2, %xmm1
; AVX512-NEXT: vmulps %xmm1, %xmm0, %xmm0
define double @div_sqrt_fabs_f64(double %x, double %y, double %z) {
; SSE-LABEL: div_sqrt_fabs_f64:
; SSE: # %bb.0:
-; SSE-NEXT: sqrtsd %xmm2, %xmm2
; SSE-NEXT: andpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
+; SSE-NEXT: sqrtsd %xmm2, %xmm2
; SSE-NEXT: mulsd %xmm2, %xmm1
; SSE-NEXT: divsd %xmm1, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: div_sqrt_fabs_f64:
; AVX: # %bb.0:
-; AVX-NEXT: vsqrtsd %xmm2, %xmm2, %xmm2
; AVX-NEXT: vandpd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
+; AVX-NEXT: vsqrtsd %xmm2, %xmm2, %xmm2
; AVX-NEXT: vmulsd %xmm1, %xmm2, %xmm1
; AVX-NEXT: vdivsd %xmm1, %xmm0, %xmm0
; AVX-NEXT: retq