}
}
+let ExeDomain = SSEPackedSingle in
defm VCMPSS : sse12_cmp_scalar<FR32, f32mem, AVXCC, X86cmps, f32, loadf32,
"cmp${cc}ss\t{$src2, $src1, $dst|$dst, $src1, $src2}",
"cmpss\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}",
SSE_ALU_F32S, i8immZExt5>, XS, VEX_4V, VEX_LIG, VEX_WIG;
+let ExeDomain = SSEPackedDouble in
defm VCMPSD : sse12_cmp_scalar<FR64, f64mem, AVXCC, X86cmps, f64, loadf64,
"cmp${cc}sd\t{$src2, $src1, $dst|$dst, $src1, $src2}",
"cmpsd\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}",
XD, VEX_4V, VEX_LIG, VEX_WIG;
let Constraints = "$src1 = $dst" in {
+ let ExeDomain = SSEPackedSingle in
defm CMPSS : sse12_cmp_scalar<FR32, f32mem, SSECC, X86cmps, f32, loadf32,
"cmp${cc}ss\t{$src2, $dst|$dst, $src2}",
"cmpss\t{$cc, $src2, $dst|$dst, $src2, $cc}", SSE_ALU_F32S,
i8immZExt3>, XS;
+ let ExeDomain = SSEPackedDouble in
defm CMPSD : sse12_cmp_scalar<FR64, f64mem, SSECC, X86cmps, f64, loadf64,
"cmp${cc}sd\t{$src2, $dst|$dst, $src2}",
"cmpsd\t{$cc, $src2, $dst|$dst, $src2, $cc}",
let isCodeGenOnly = 1 in {
// Aliases to match intrinsics which expect XMM operand(s).
+ let ExeDomain = SSEPackedSingle in
defm Int_VCMPSS : sse12_cmp_scalar_int<ssmem, AVXCC, int_x86_sse_cmp_ss,
"cmp${cc}ss\t{$src, $src1, $dst|$dst, $src1, $src}",
SSE_ALU_F32S, i8immZExt5, sse_load_f32>,
XS, VEX_4V;
+ let ExeDomain = SSEPackedDouble in
defm Int_VCMPSD : sse12_cmp_scalar_int<sdmem, AVXCC, int_x86_sse2_cmp_sd,
"cmp${cc}sd\t{$src, $src1, $dst|$dst, $src1, $src}",
SSE_ALU_F32S, i8immZExt5, sse_load_f64>, // same latency as f32
XD, VEX_4V;
let Constraints = "$src1 = $dst" in {
+ let ExeDomain = SSEPackedSingle in
defm Int_CMPSS : sse12_cmp_scalar_int<ssmem, SSECC, int_x86_sse_cmp_ss,
"cmp${cc}ss\t{$src, $dst|$dst, $src}",
SSE_ALU_F32S, i8immZExt3, sse_load_f32>, XS;
+ let ExeDomain = SSEPackedDouble in
defm Int_CMPSD : sse12_cmp_scalar_int<sdmem, SSECC, int_x86_sse2_cmp_sd,
"cmp${cc}sd\t{$src, $dst|$dst, $src}",
SSE_ALU_F64S, i8immZExt3, sse_load_f64>,
; SSE-LABEL: select_fcmp_oeq_f64:
; SSE: # BB#0:
; SSE-NEXT: cmpeqsd %xmm1, %xmm0
-; SSE-NEXT: andps %xmm0, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm0
-; SSE-NEXT: orps %xmm2, %xmm0
+; SSE-NEXT: andpd %xmm0, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm0
+; SSE-NEXT: orpd %xmm2, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_oeq_f64:
; SSE-LABEL: select_fcmp_ogt_f64:
; SSE: # BB#0:
; SSE-NEXT: cmpltsd %xmm0, %xmm1
-; SSE-NEXT: andps %xmm1, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm1
-; SSE-NEXT: orps %xmm2, %xmm1
-; SSE-NEXT: movaps %xmm1, %xmm0
+; SSE-NEXT: andpd %xmm1, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm1
+; SSE-NEXT: orpd %xmm2, %xmm1
+; SSE-NEXT: movapd %xmm1, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_ogt_f64:
; SSE-LABEL: select_fcmp_oge_f64:
; SSE: # BB#0:
; SSE-NEXT: cmplesd %xmm0, %xmm1
-; SSE-NEXT: andps %xmm1, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm1
-; SSE-NEXT: orps %xmm2, %xmm1
-; SSE-NEXT: movaps %xmm1, %xmm0
+; SSE-NEXT: andpd %xmm1, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm1
+; SSE-NEXT: orpd %xmm2, %xmm1
+; SSE-NEXT: movapd %xmm1, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_oge_f64:
; SSE-LABEL: select_fcmp_olt_f64:
; SSE: # BB#0:
; SSE-NEXT: cmpltsd %xmm1, %xmm0
-; SSE-NEXT: andps %xmm0, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm0
-; SSE-NEXT: orps %xmm2, %xmm0
+; SSE-NEXT: andpd %xmm0, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm0
+; SSE-NEXT: orpd %xmm2, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_olt_f64:
; SSE-LABEL: select_fcmp_ole_f64:
; SSE: # BB#0:
; SSE-NEXT: cmplesd %xmm1, %xmm0
-; SSE-NEXT: andps %xmm0, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm0
-; SSE-NEXT: orps %xmm2, %xmm0
+; SSE-NEXT: andpd %xmm0, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm0
+; SSE-NEXT: orpd %xmm2, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_ole_f64:
; SSE-LABEL: select_fcmp_ord_f64:
; SSE: # BB#0:
; SSE-NEXT: cmpordsd %xmm1, %xmm0
-; SSE-NEXT: andps %xmm0, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm0
-; SSE-NEXT: orps %xmm2, %xmm0
+; SSE-NEXT: andpd %xmm0, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm0
+; SSE-NEXT: orpd %xmm2, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_ord_f64:
; SSE-LABEL: select_fcmp_uno_f64:
; SSE: # BB#0:
; SSE-NEXT: cmpunordsd %xmm1, %xmm0
-; SSE-NEXT: andps %xmm0, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm0
-; SSE-NEXT: orps %xmm2, %xmm0
+; SSE-NEXT: andpd %xmm0, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm0
+; SSE-NEXT: orpd %xmm2, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_uno_f64:
; SSE-LABEL: select_fcmp_ugt_f64:
; SSE: # BB#0:
; SSE-NEXT: cmpnlesd %xmm1, %xmm0
-; SSE-NEXT: andps %xmm0, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm0
-; SSE-NEXT: orps %xmm2, %xmm0
+; SSE-NEXT: andpd %xmm0, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm0
+; SSE-NEXT: orpd %xmm2, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_ugt_f64:
; SSE-LABEL: select_fcmp_uge_f64:
; SSE: # BB#0:
; SSE-NEXT: cmpnltsd %xmm1, %xmm0
-; SSE-NEXT: andps %xmm0, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm0
-; SSE-NEXT: orps %xmm2, %xmm0
+; SSE-NEXT: andpd %xmm0, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm0
+; SSE-NEXT: orpd %xmm2, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_uge_f64:
; SSE-LABEL: select_fcmp_ult_f64:
; SSE: # BB#0:
; SSE-NEXT: cmpnlesd %xmm0, %xmm1
-; SSE-NEXT: andps %xmm1, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm1
-; SSE-NEXT: orps %xmm2, %xmm1
-; SSE-NEXT: movaps %xmm1, %xmm0
+; SSE-NEXT: andpd %xmm1, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm1
+; SSE-NEXT: orpd %xmm2, %xmm1
+; SSE-NEXT: movapd %xmm1, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_ult_f64:
; SSE-LABEL: select_fcmp_ule_f64:
; SSE: # BB#0:
; SSE-NEXT: cmpnltsd %xmm0, %xmm1
-; SSE-NEXT: andps %xmm1, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm1
-; SSE-NEXT: orps %xmm2, %xmm1
-; SSE-NEXT: movaps %xmm1, %xmm0
+; SSE-NEXT: andpd %xmm1, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm1
+; SSE-NEXT: orpd %xmm2, %xmm1
+; SSE-NEXT: movapd %xmm1, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_ule_f64:
; SSE-LABEL: select_fcmp_une_f64:
; SSE: # BB#0:
; SSE-NEXT: cmpneqsd %xmm1, %xmm0
-; SSE-NEXT: andps %xmm0, %xmm2
-; SSE-NEXT: andnps %xmm3, %xmm0
-; SSE-NEXT: orps %xmm2, %xmm0
+; SSE-NEXT: andpd %xmm0, %xmm2
+; SSE-NEXT: andnpd %xmm3, %xmm0
+; SSE-NEXT: orpd %xmm2, %xmm0
; SSE-NEXT: retq
;
; AVX-LABEL: select_fcmp_une_f64:
define double @oge(double %x, double %y) {
; STRICT-LABEL: oge:
; STRICT: # BB#0:
-; STRICT-NEXT: movaps %xmm1, %xmm2
+; STRICT-NEXT: movapd %xmm1, %xmm2
; STRICT-NEXT: cmplesd %xmm0, %xmm2
-; STRICT-NEXT: andps %xmm2, %xmm0
-; STRICT-NEXT: andnps %xmm1, %xmm2
-; STRICT-NEXT: orps %xmm2, %xmm0
+; STRICT-NEXT: andpd %xmm2, %xmm0
+; STRICT-NEXT: andnpd %xmm1, %xmm2
+; STRICT-NEXT: orpd %xmm2, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: oge:
define double @ole(double %x, double %y) {
; STRICT-LABEL: ole:
; STRICT: # BB#0:
-; STRICT-NEXT: movaps %xmm0, %xmm2
+; STRICT-NEXT: movapd %xmm0, %xmm2
; STRICT-NEXT: cmplesd %xmm1, %xmm2
-; STRICT-NEXT: andps %xmm2, %xmm0
-; STRICT-NEXT: andnps %xmm1, %xmm2
-; STRICT-NEXT: orps %xmm0, %xmm2
-; STRICT-NEXT: movaps %xmm2, %xmm0
+; STRICT-NEXT: andpd %xmm2, %xmm0
+; STRICT-NEXT: andnpd %xmm1, %xmm2
+; STRICT-NEXT: orpd %xmm0, %xmm2
+; STRICT-NEXT: movapd %xmm2, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ole:
define double @oge_inverse(double %x, double %y) {
; STRICT-LABEL: oge_inverse:
; STRICT: # BB#0:
-; STRICT-NEXT: movaps %xmm1, %xmm2
+; STRICT-NEXT: movapd %xmm1, %xmm2
; STRICT-NEXT: cmplesd %xmm0, %xmm2
-; STRICT-NEXT: andps %xmm2, %xmm1
-; STRICT-NEXT: andnps %xmm0, %xmm2
-; STRICT-NEXT: orps %xmm1, %xmm2
-; STRICT-NEXT: movaps %xmm2, %xmm0
+; STRICT-NEXT: andpd %xmm2, %xmm1
+; STRICT-NEXT: andnpd %xmm0, %xmm2
+; STRICT-NEXT: orpd %xmm1, %xmm2
+; STRICT-NEXT: movapd %xmm2, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: oge_inverse:
define double @ole_inverse(double %x, double %y) {
; STRICT-LABEL: ole_inverse:
; STRICT: # BB#0:
-; STRICT-NEXT: movaps %xmm0, %xmm2
+; STRICT-NEXT: movapd %xmm0, %xmm2
; STRICT-NEXT: cmplesd %xmm1, %xmm2
-; STRICT-NEXT: andps %xmm2, %xmm1
-; STRICT-NEXT: andnps %xmm0, %xmm2
-; STRICT-NEXT: orps %xmm1, %xmm2
-; STRICT-NEXT: movaps %xmm2, %xmm0
+; STRICT-NEXT: andpd %xmm2, %xmm1
+; STRICT-NEXT: andnpd %xmm0, %xmm2
+; STRICT-NEXT: orpd %xmm1, %xmm2
+; STRICT-NEXT: movapd %xmm2, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ole_inverse:
define double @oge_x(double %x) {
; STRICT-LABEL: oge_x:
; STRICT: # BB#0:
-; STRICT-NEXT: xorps %xmm1, %xmm1
+; STRICT-NEXT: xorpd %xmm1, %xmm1
; STRICT-NEXT: cmplesd %xmm0, %xmm1
-; STRICT-NEXT: andps %xmm1, %xmm0
+; STRICT-NEXT: andpd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: oge_x:
define double @ole_x(double %x) {
; STRICT-LABEL: ole_x:
; STRICT: # BB#0:
-; STRICT-NEXT: xorps %xmm2, %xmm2
-; STRICT-NEXT: movaps %xmm0, %xmm1
+; STRICT-NEXT: xorpd %xmm2, %xmm2
+; STRICT-NEXT: movapd %xmm0, %xmm1
; STRICT-NEXT: cmplesd %xmm2, %xmm1
-; STRICT-NEXT: andps %xmm0, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andpd %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ole_x:
define double @oge_inverse_x(double %x) {
; STRICT-LABEL: oge_inverse_x:
; STRICT: # BB#0:
-; STRICT-NEXT: xorps %xmm1, %xmm1
+; STRICT-NEXT: xorpd %xmm1, %xmm1
; STRICT-NEXT: cmplesd %xmm0, %xmm1
-; STRICT-NEXT: andnps %xmm0, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andnpd %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: oge_inverse_x:
define double @ole_inverse_x(double %x) {
; STRICT-LABEL: ole_inverse_x:
; STRICT: # BB#0:
-; STRICT-NEXT: xorps %xmm2, %xmm2
-; STRICT-NEXT: movaps %xmm0, %xmm1
+; STRICT-NEXT: xorpd %xmm2, %xmm2
+; STRICT-NEXT: movapd %xmm0, %xmm1
; STRICT-NEXT: cmplesd %xmm2, %xmm1
-; STRICT-NEXT: andnps %xmm0, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andnpd %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ole_inverse_x:
define double @ugt(double %x, double %y) {
; STRICT-LABEL: ugt:
; STRICT: # BB#0:
-; STRICT-NEXT: movaps %xmm0, %xmm2
+; STRICT-NEXT: movapd %xmm0, %xmm2
; STRICT-NEXT: cmpnlesd %xmm1, %xmm2
-; STRICT-NEXT: andps %xmm2, %xmm0
-; STRICT-NEXT: andnps %xmm1, %xmm2
-; STRICT-NEXT: orps %xmm0, %xmm2
-; STRICT-NEXT: movaps %xmm2, %xmm0
+; STRICT-NEXT: andpd %xmm2, %xmm0
+; STRICT-NEXT: andnpd %xmm1, %xmm2
+; STRICT-NEXT: orpd %xmm0, %xmm2
+; STRICT-NEXT: movapd %xmm2, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ugt:
define double @ult(double %x, double %y) {
; STRICT-LABEL: ult:
; STRICT: # BB#0:
-; STRICT-NEXT: movaps %xmm1, %xmm2
+; STRICT-NEXT: movapd %xmm1, %xmm2
; STRICT-NEXT: cmpnlesd %xmm0, %xmm2
-; STRICT-NEXT: andps %xmm2, %xmm0
-; STRICT-NEXT: andnps %xmm1, %xmm2
-; STRICT-NEXT: orps %xmm2, %xmm0
+; STRICT-NEXT: andpd %xmm2, %xmm0
+; STRICT-NEXT: andnpd %xmm1, %xmm2
+; STRICT-NEXT: orpd %xmm2, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ult:
define double @ugt_inverse(double %x, double %y) {
; STRICT-LABEL: ugt_inverse:
; STRICT: # BB#0:
-; STRICT-NEXT: movaps %xmm0, %xmm2
+; STRICT-NEXT: movapd %xmm0, %xmm2
; STRICT-NEXT: cmpnlesd %xmm1, %xmm2
-; STRICT-NEXT: andps %xmm2, %xmm1
-; STRICT-NEXT: andnps %xmm0, %xmm2
-; STRICT-NEXT: orps %xmm1, %xmm2
-; STRICT-NEXT: movaps %xmm2, %xmm0
+; STRICT-NEXT: andpd %xmm2, %xmm1
+; STRICT-NEXT: andnpd %xmm0, %xmm2
+; STRICT-NEXT: orpd %xmm1, %xmm2
+; STRICT-NEXT: movapd %xmm2, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ugt_inverse:
define double @ult_inverse(double %x, double %y) {
; STRICT-LABEL: ult_inverse:
; STRICT: # BB#0:
-; STRICT-NEXT: movaps %xmm1, %xmm2
+; STRICT-NEXT: movapd %xmm1, %xmm2
; STRICT-NEXT: cmpnlesd %xmm0, %xmm2
-; STRICT-NEXT: andps %xmm2, %xmm1
-; STRICT-NEXT: andnps %xmm0, %xmm2
-; STRICT-NEXT: orps %xmm1, %xmm2
-; STRICT-NEXT: movaps %xmm2, %xmm0
+; STRICT-NEXT: andpd %xmm2, %xmm1
+; STRICT-NEXT: andnpd %xmm0, %xmm2
+; STRICT-NEXT: orpd %xmm1, %xmm2
+; STRICT-NEXT: movapd %xmm2, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ult_inverse:
define double @ugt_x(double %x) {
; STRICT-LABEL: ugt_x:
; STRICT: # BB#0:
-; STRICT-NEXT: xorps %xmm2, %xmm2
-; STRICT-NEXT: movaps %xmm0, %xmm1
+; STRICT-NEXT: xorpd %xmm2, %xmm2
+; STRICT-NEXT: movapd %xmm0, %xmm1
; STRICT-NEXT: cmpnlesd %xmm2, %xmm1
-; STRICT-NEXT: andps %xmm0, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andpd %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ugt_x:
define double @ult_x(double %x) {
; STRICT-LABEL: ult_x:
; STRICT: # BB#0:
-; STRICT-NEXT: xorps %xmm1, %xmm1
+; STRICT-NEXT: xorpd %xmm1, %xmm1
; STRICT-NEXT: cmpnlesd %xmm0, %xmm1
-; STRICT-NEXT: andps %xmm1, %xmm0
+; STRICT-NEXT: andpd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ult_x:
define double @ugt_inverse_x(double %x) {
; STRICT-LABEL: ugt_inverse_x:
; STRICT: # BB#0:
-; STRICT-NEXT: xorps %xmm2, %xmm2
-; STRICT-NEXT: movaps %xmm0, %xmm1
+; STRICT-NEXT: xorpd %xmm2, %xmm2
+; STRICT-NEXT: movapd %xmm0, %xmm1
; STRICT-NEXT: cmpnlesd %xmm2, %xmm1
-; STRICT-NEXT: andnps %xmm0, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andnpd %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ugt_inverse_x:
define double @ult_inverse_x(double %x) {
; STRICT-LABEL: ult_inverse_x:
; STRICT: # BB#0:
-; STRICT-NEXT: xorps %xmm1, %xmm1
+; STRICT-NEXT: xorpd %xmm1, %xmm1
; STRICT-NEXT: cmpnlesd %xmm0, %xmm1
-; STRICT-NEXT: andnps %xmm0, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andnpd %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ult_inverse_x:
; STRICT-LABEL: oge_y:
; STRICT: # BB#0:
; STRICT-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero
-; STRICT-NEXT: movaps %xmm1, %xmm2
+; STRICT-NEXT: movapd %xmm1, %xmm2
; STRICT-NEXT: cmplesd %xmm0, %xmm2
-; STRICT-NEXT: andps %xmm2, %xmm0
-; STRICT-NEXT: andnps %xmm1, %xmm2
-; STRICT-NEXT: orps %xmm2, %xmm0
+; STRICT-NEXT: andpd %xmm2, %xmm0
+; STRICT-NEXT: andnpd %xmm1, %xmm2
+; STRICT-NEXT: orpd %xmm2, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: oge_y:
; STRICT-LABEL: ole_y:
; STRICT: # BB#0:
; STRICT-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero
-; STRICT-NEXT: movaps %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm0, %xmm1
; STRICT-NEXT: cmplesd %xmm2, %xmm1
-; STRICT-NEXT: andps %xmm1, %xmm0
-; STRICT-NEXT: andnps %xmm2, %xmm1
-; STRICT-NEXT: orps %xmm0, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andpd %xmm1, %xmm0
+; STRICT-NEXT: andnpd %xmm2, %xmm1
+; STRICT-NEXT: orpd %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ole_y:
; STRICT-LABEL: oge_inverse_y:
; STRICT: # BB#0:
; STRICT-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero
-; STRICT-NEXT: movaps %xmm2, %xmm1
+; STRICT-NEXT: movapd %xmm2, %xmm1
; STRICT-NEXT: cmplesd %xmm0, %xmm1
-; STRICT-NEXT: andps %xmm1, %xmm2
-; STRICT-NEXT: andnps %xmm0, %xmm1
-; STRICT-NEXT: orps %xmm2, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andpd %xmm1, %xmm2
+; STRICT-NEXT: andnpd %xmm0, %xmm1
+; STRICT-NEXT: orpd %xmm2, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: oge_inverse_y:
; STRICT-LABEL: ole_inverse_y:
; STRICT: # BB#0:
; STRICT-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero
-; STRICT-NEXT: movaps %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm0, %xmm1
; STRICT-NEXT: cmplesd %xmm2, %xmm1
-; STRICT-NEXT: andps %xmm1, %xmm2
-; STRICT-NEXT: andnps %xmm0, %xmm1
-; STRICT-NEXT: orps %xmm2, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andpd %xmm1, %xmm2
+; STRICT-NEXT: andnpd %xmm0, %xmm1
+; STRICT-NEXT: orpd %xmm2, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ole_inverse_y:
; STRICT-LABEL: ugt_y:
; STRICT: # BB#0:
; STRICT-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero
-; STRICT-NEXT: movaps %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm0, %xmm1
; STRICT-NEXT: cmpnlesd %xmm2, %xmm1
-; STRICT-NEXT: andps %xmm1, %xmm0
-; STRICT-NEXT: andnps %xmm2, %xmm1
-; STRICT-NEXT: orps %xmm0, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andpd %xmm1, %xmm0
+; STRICT-NEXT: andnpd %xmm2, %xmm1
+; STRICT-NEXT: orpd %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ugt_y:
; STRICT-LABEL: ult_y:
; STRICT: # BB#0:
; STRICT-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero
-; STRICT-NEXT: movaps %xmm1, %xmm2
+; STRICT-NEXT: movapd %xmm1, %xmm2
; STRICT-NEXT: cmpnlesd %xmm0, %xmm2
-; STRICT-NEXT: andps %xmm2, %xmm0
-; STRICT-NEXT: andnps %xmm1, %xmm2
-; STRICT-NEXT: orps %xmm2, %xmm0
+; STRICT-NEXT: andpd %xmm2, %xmm0
+; STRICT-NEXT: andnpd %xmm1, %xmm2
+; STRICT-NEXT: orpd %xmm2, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ult_y:
; STRICT-LABEL: ugt_inverse_y:
; STRICT: # BB#0:
; STRICT-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero
-; STRICT-NEXT: movaps %xmm0, %xmm1
+; STRICT-NEXT: movapd %xmm0, %xmm1
; STRICT-NEXT: cmpnlesd %xmm2, %xmm1
-; STRICT-NEXT: andps %xmm1, %xmm2
-; STRICT-NEXT: andnps %xmm0, %xmm1
-; STRICT-NEXT: orps %xmm2, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andpd %xmm1, %xmm2
+; STRICT-NEXT: andnpd %xmm0, %xmm1
+; STRICT-NEXT: orpd %xmm2, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ugt_inverse_y:
; STRICT-LABEL: ult_inverse_y:
; STRICT: # BB#0:
; STRICT-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero
-; STRICT-NEXT: movaps %xmm2, %xmm1
+; STRICT-NEXT: movapd %xmm2, %xmm1
; STRICT-NEXT: cmpnlesd %xmm0, %xmm1
-; STRICT-NEXT: andps %xmm1, %xmm2
-; STRICT-NEXT: andnps %xmm0, %xmm1
-; STRICT-NEXT: orps %xmm2, %xmm1
-; STRICT-NEXT: movaps %xmm1, %xmm0
+; STRICT-NEXT: andpd %xmm1, %xmm2
+; STRICT-NEXT: andnpd %xmm0, %xmm1
+; STRICT-NEXT: orpd %xmm2, %xmm1
+; STRICT-NEXT: movapd %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ult_inverse_y: