From 6028584d8c4fc0f8766937ad518283b104ee79a9 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Sun, 26 Feb 2017 06:45:59 +0000 Subject: [PATCH] [X86] Fix execution domain for cmpss/sd instructions. llvm-svn: 296293 --- llvm/lib/Target/X86/X86InstrSSE.td | 8 + llvm/test/CodeGen/X86/fast-isel-select-sse.ll | 80 +++---- llvm/test/CodeGen/X86/fp-select-cmp-and.ll | 32 +-- llvm/test/CodeGen/X86/logical-load-fold.ll | 4 +- llvm/test/CodeGen/X86/sse-minmax.ll | 204 +++++++++--------- 5 files changed, 168 insertions(+), 160 deletions(-) diff --git a/llvm/lib/Target/X86/X86InstrSSE.td b/llvm/lib/Target/X86/X86InstrSSE.td index 0c1697982891..c32be4cdecf4 100644 --- a/llvm/lib/Target/X86/X86InstrSSE.td +++ b/llvm/lib/Target/X86/X86InstrSSE.td @@ -2308,10 +2308,12 @@ multiclass sse12_cmp_scalar, XS, VEX_4V, VEX_LIG, VEX_WIG; +let ExeDomain = SSEPackedDouble in defm VCMPSD : sse12_cmp_scalar, XS; + let ExeDomain = SSEPackedDouble in defm CMPSD : sse12_cmp_scalar, XS, VEX_4V; + let ExeDomain = SSEPackedDouble in defm Int_VCMPSD : sse12_cmp_scalar_int, // same latency as f32 XD, VEX_4V; let Constraints = "$src1 = $dst" in { + let ExeDomain = SSEPackedSingle in defm Int_CMPSS : sse12_cmp_scalar_int, XS; + let ExeDomain = SSEPackedDouble in defm Int_CMPSD : sse12_cmp_scalar_int, diff --git a/llvm/test/CodeGen/X86/fast-isel-select-sse.ll b/llvm/test/CodeGen/X86/fast-isel-select-sse.ll index 502260d03f5a..e519af5e033e 100644 --- a/llvm/test/CodeGen/X86/fast-isel-select-sse.ll +++ b/llvm/test/CodeGen/X86/fast-isel-select-sse.ll @@ -39,9 +39,9 @@ define double @select_fcmp_oeq_f64(double %a, double %b, double %c, double %d) { ; 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: @@ -94,10 +94,10 @@ define double @select_fcmp_ogt_f64(double %a, double %b, double %c, double %d) { ; 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: @@ -150,10 +150,10 @@ define double @select_fcmp_oge_f64(double %a, double %b, double %c, double %d) { ; 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: @@ -205,9 +205,9 @@ define double @select_fcmp_olt_f64(double %a, double %b, double %c, double %d) { ; 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: @@ -259,9 +259,9 @@ define double @select_fcmp_ole_f64(double %a, double %b, double %c, double %d) { ; 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: @@ -313,9 +313,9 @@ define double @select_fcmp_ord_f64(double %a, double %b, double %c, double %d) { ; 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: @@ -367,9 +367,9 @@ define double @select_fcmp_uno_f64(double %a, double %b, double %c, double %d) { ; 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: @@ -421,9 +421,9 @@ define double @select_fcmp_ugt_f64(double %a, double %b, double %c, double %d) { ; 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: @@ -475,9 +475,9 @@ define double @select_fcmp_uge_f64(double %a, double %b, double %c, double %d) { ; 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: @@ -530,10 +530,10 @@ define double @select_fcmp_ult_f64(double %a, double %b, double %c, double %d) { ; 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: @@ -586,10 +586,10 @@ define double @select_fcmp_ule_f64(double %a, double %b, double %c, double %d) { ; 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: @@ -641,9 +641,9 @@ define double @select_fcmp_une_f64(double %a, double %b, double %c, double %d) { ; 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: diff --git a/llvm/test/CodeGen/X86/fp-select-cmp-and.ll b/llvm/test/CodeGen/X86/fp-select-cmp-and.ll index c9c8922c97f3..e012809cf480 100644 --- a/llvm/test/CodeGen/X86/fp-select-cmp-and.ll +++ b/llvm/test/CodeGen/X86/fp-select-cmp-and.ll @@ -5,7 +5,7 @@ define double @test1(double %a, double %b, double %eps) { ; CHECK-LABEL: test1: ; CHECK: # BB#0: ; CHECK-NEXT: cmpltsd %xmm2, %xmm0 -; CHECK-NEXT: andps %xmm1, %xmm0 +; CHECK-NEXT: andpd %xmm1, %xmm0 ; CHECK-NEXT: retq ; %cmp = fcmp olt double %a, %eps @@ -17,7 +17,7 @@ define double @test2(double %a, double %b, double %eps) { ; CHECK-LABEL: test2: ; CHECK: # BB#0: ; CHECK-NEXT: cmplesd %xmm2, %xmm0 -; CHECK-NEXT: andps %xmm1, %xmm0 +; CHECK-NEXT: andpd %xmm1, %xmm0 ; CHECK-NEXT: retq ; %cmp = fcmp ole double %a, %eps @@ -29,8 +29,8 @@ define double @test3(double %a, double %b, double %eps) { ; CHECK-LABEL: test3: ; CHECK: # BB#0: ; CHECK-NEXT: cmpltsd %xmm0, %xmm2 -; CHECK-NEXT: andps %xmm1, %xmm2 -; CHECK-NEXT: movaps %xmm2, %xmm0 +; CHECK-NEXT: andpd %xmm1, %xmm2 +; CHECK-NEXT: movapd %xmm2, %xmm0 ; CHECK-NEXT: retq ; %cmp = fcmp ogt double %a, %eps @@ -42,8 +42,8 @@ define double @test4(double %a, double %b, double %eps) { ; CHECK-LABEL: test4: ; CHECK: # BB#0: ; CHECK-NEXT: cmplesd %xmm0, %xmm2 -; CHECK-NEXT: andps %xmm1, %xmm2 -; CHECK-NEXT: movaps %xmm2, %xmm0 +; CHECK-NEXT: andpd %xmm1, %xmm2 +; CHECK-NEXT: movapd %xmm2, %xmm0 ; CHECK-NEXT: retq ; %cmp = fcmp oge double %a, %eps @@ -55,7 +55,7 @@ define double @test5(double %a, double %b, double %eps) { ; CHECK-LABEL: test5: ; CHECK: # BB#0: ; CHECK-NEXT: cmpltsd %xmm2, %xmm0 -; CHECK-NEXT: andnps %xmm1, %xmm0 +; CHECK-NEXT: andnpd %xmm1, %xmm0 ; CHECK-NEXT: retq ; %cmp = fcmp olt double %a, %eps @@ -67,7 +67,7 @@ define double @test6(double %a, double %b, double %eps) { ; CHECK-LABEL: test6: ; CHECK: # BB#0: ; CHECK-NEXT: cmplesd %xmm2, %xmm0 -; CHECK-NEXT: andnps %xmm1, %xmm0 +; CHECK-NEXT: andnpd %xmm1, %xmm0 ; CHECK-NEXT: retq ; %cmp = fcmp ole double %a, %eps @@ -79,8 +79,8 @@ define double @test7(double %a, double %b, double %eps) { ; CHECK-LABEL: test7: ; CHECK: # BB#0: ; CHECK-NEXT: cmpltsd %xmm0, %xmm2 -; CHECK-NEXT: andnps %xmm1, %xmm2 -; CHECK-NEXT: movaps %xmm2, %xmm0 +; CHECK-NEXT: andnpd %xmm1, %xmm2 +; CHECK-NEXT: movapd %xmm2, %xmm0 ; CHECK-NEXT: retq ; %cmp = fcmp ogt double %a, %eps @@ -92,8 +92,8 @@ define double @test8(double %a, double %b, double %eps) { ; CHECK-LABEL: test8: ; CHECK: # BB#0: ; CHECK-NEXT: cmplesd %xmm0, %xmm2 -; CHECK-NEXT: andnps %xmm1, %xmm2 -; CHECK-NEXT: movaps %xmm2, %xmm0 +; CHECK-NEXT: andnpd %xmm1, %xmm2 +; CHECK-NEXT: movapd %xmm2, %xmm0 ; CHECK-NEXT: retq ; %cmp = fcmp oge double %a, %eps @@ -220,10 +220,10 @@ define double @test18(double %a, double %b, double %c, double %eps) { ; CHECK-LABEL: test18: ; CHECK: # BB#0: ; CHECK-NEXT: cmplesd %xmm0, %xmm3 -; CHECK-NEXT: andps %xmm3, %xmm2 -; CHECK-NEXT: andnps %xmm1, %xmm3 -; CHECK-NEXT: orps %xmm2, %xmm3 -; CHECK-NEXT: movaps %xmm3, %xmm0 +; CHECK-NEXT: andpd %xmm3, %xmm2 +; CHECK-NEXT: andnpd %xmm1, %xmm3 +; CHECK-NEXT: orpd %xmm2, %xmm3 +; CHECK-NEXT: movapd %xmm3, %xmm0 ; CHECK-NEXT: retq ; %cmp = fcmp oge double %a, %eps diff --git a/llvm/test/CodeGen/X86/logical-load-fold.ll b/llvm/test/CodeGen/X86/logical-load-fold.ll index 73930ca8bca1..5f06fce1b7b6 100644 --- a/llvm/test/CodeGen/X86/logical-load-fold.ll +++ b/llvm/test/CodeGen/X86/logical-load-fold.ll @@ -15,14 +15,14 @@ define double @load_double_no_fold(double %x, double %y) { ; SSE2: # BB#0: ; SSE2-NEXT: cmplesd %xmm0, %xmm1 ; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero -; SSE2-NEXT: andps %xmm1, %xmm0 +; SSE2-NEXT: andpd %xmm1, %xmm0 ; SSE2-NEXT: retq ; ; AVX-LABEL: load_double_no_fold: ; AVX: # BB#0: ; AVX-NEXT: vcmplesd %xmm0, %xmm1, %xmm0 ; AVX-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero -; AVX-NEXT: vandps %xmm1, %xmm0, %xmm0 +; AVX-NEXT: vandpd %xmm1, %xmm0, %xmm0 ; AVX-NEXT: retq %cmp = fcmp oge double %x, %y diff --git a/llvm/test/CodeGen/X86/sse-minmax.ll b/llvm/test/CodeGen/X86/sse-minmax.ll index eae0b7104275..2944001ed7e9 100644 --- a/llvm/test/CodeGen/X86/sse-minmax.ll +++ b/llvm/test/CodeGen/X86/sse-minmax.ll @@ -80,11 +80,11 @@ define double @olt_inverse(double %x, double %y) { 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: @@ -99,12 +99,12 @@ define double @oge(double %x, double %y) { 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: @@ -119,12 +119,12 @@ define double @ole(double %x, double %y) { 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: @@ -145,12 +145,12 @@ define double @oge_inverse(double %x, double %y) { 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: @@ -243,9 +243,9 @@ define double @olt_inverse_x(double %x) { 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: @@ -261,11 +261,11 @@ define double @oge_x(double %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: @@ -281,10 +281,10 @@ define double @ole_x(double %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: @@ -307,11 +307,11 @@ define double @oge_inverse_x(double %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: @@ -334,12 +334,12 @@ define double @ole_inverse_x(double %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: @@ -354,11 +354,11 @@ define double @ugt(double %x, double %y) { 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: @@ -373,12 +373,12 @@ define double @ult(double %x, double %y) { 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: @@ -399,12 +399,12 @@ define double @ugt_inverse(double %x, double %y) { 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: @@ -499,11 +499,11 @@ define double @ule_inverse(double %x, double %y) { 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: @@ -519,9 +519,9 @@ define double @ugt_x(double %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: @@ -537,11 +537,11 @@ define double @ult_x(double %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: @@ -564,10 +564,10 @@ define double @ugt_inverse_x(double %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: @@ -743,11 +743,11 @@ define double @oge_y(double %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: @@ -763,12 +763,12 @@ define double @ole_y(double %x) { ; 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: @@ -784,12 +784,12 @@ define double @oge_inverse_y(double %x) { ; 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: @@ -812,12 +812,12 @@ define double @ole_inverse_y(double %x) { ; 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: @@ -840,12 +840,12 @@ define double @ugt_y(double %x) { ; 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: @@ -861,11 +861,11 @@ define double @ult_y(double %x) { ; 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: @@ -881,12 +881,12 @@ define double @ugt_inverse_y(double %x) { ; 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: @@ -909,12 +909,12 @@ define double @ult_inverse_y(double %x) { ; 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: