summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/sse-minmax.ll
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2016-11-16 17:42:40 +0000
committerSanjay Patel <spatel@rotateright.com>2016-11-16 17:42:40 +0000
commit7f3d51f8403a2a6b7258b5423addb8bc148c11c1 (patch)
tree0636003018c0bd120f1643bac9f15d9db4baf1e1 /llvm/test/CodeGen/X86/sse-minmax.ll
parentd47588986e102d022f5cc92fdb2b16b5554830ca (diff)
downloadbcm5719-llvm-7f3d51f8403a2a6b7258b5423addb8bc148c11c1.tar.gz
bcm5719-llvm-7f3d51f8403a2a6b7258b5423addb8bc148c11c1.zip
[x86] add fake scalar FP logic instructions to ReplaceableInstrs to save some bytes
We can replace "scalar" FP-bitwise-logic with other forms of bitwise-logic instructions. Scalar SSE/AVX FP-logic instructions only exist in your imagination and/or the bowels of compilers, but logically equivalent int, float, and double variants of bitwise-logic instructions are reality in x86, and the float variant may be a shorter instruction depending on which flavor (SSE or AVX) of vector ISA you have...so just prefer float all the time. This is a preliminary step towards solving PR6137: https://llvm.org/bugs/show_bug.cgi?id=6137 Differential Revision: https://reviews.llvm.org/D26712 llvm-svn: 287122
Diffstat (limited to 'llvm/test/CodeGen/X86/sse-minmax.ll')
-rw-r--r--llvm/test/CodeGen/X86/sse-minmax.ll112
1 files changed, 56 insertions, 56 deletions
diff --git a/llvm/test/CodeGen/X86/sse-minmax.ll b/llvm/test/CodeGen/X86/sse-minmax.ll
index c7a170d2a68..b9d9e318920 100644
--- a/llvm/test/CodeGen/X86/sse-minmax.ll
+++ b/llvm/test/CodeGen/X86/sse-minmax.ll
@@ -84,11 +84,11 @@ define double @olt_inverse(double %x, double %y) {
define double @oge(double %x, double %y) {
; STRICT-LABEL: oge:
; STRICT: # BB#0:
-; STRICT-NEXT: movapd %xmm1, %xmm2
+; STRICT-NEXT: movaps %xmm1, %xmm2
; STRICT-NEXT: cmplesd %xmm0, %xmm2
-; STRICT-NEXT: andpd %xmm2, %xmm0
-; STRICT-NEXT: andnpd %xmm1, %xmm2
-; STRICT-NEXT: orpd %xmm2, %xmm0
+; STRICT-NEXT: andps %xmm2, %xmm0
+; STRICT-NEXT: andnps %xmm1, %xmm2
+; STRICT-NEXT: orps %xmm2, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: oge:
@@ -104,12 +104,12 @@ define double @oge(double %x, double %y) {
define double @ole(double %x, double %y) {
; STRICT-LABEL: ole:
; STRICT: # BB#0:
-; STRICT-NEXT: movapd %xmm0, %xmm2
+; STRICT-NEXT: movaps %xmm0, %xmm2
; STRICT-NEXT: cmplesd %xmm1, %xmm2
-; STRICT-NEXT: andpd %xmm2, %xmm0
-; STRICT-NEXT: andnpd %xmm1, %xmm2
-; STRICT-NEXT: orpd %xmm0, %xmm2
-; STRICT-NEXT: movapd %xmm2, %xmm0
+; STRICT-NEXT: andps %xmm2, %xmm0
+; STRICT-NEXT: andnps %xmm1, %xmm2
+; STRICT-NEXT: orps %xmm0, %xmm2
+; STRICT-NEXT: movaps %xmm2, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ole:
@@ -125,12 +125,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: movapd %xmm1, %xmm2
+; STRICT-NEXT: movaps %xmm1, %xmm2
; STRICT-NEXT: cmplesd %xmm0, %xmm2
-; STRICT-NEXT: andpd %xmm2, %xmm1
-; STRICT-NEXT: andnpd %xmm0, %xmm2
-; STRICT-NEXT: orpd %xmm1, %xmm2
-; STRICT-NEXT: movapd %xmm2, %xmm0
+; STRICT-NEXT: andps %xmm2, %xmm1
+; STRICT-NEXT: andnps %xmm0, %xmm2
+; STRICT-NEXT: orps %xmm1, %xmm2
+; STRICT-NEXT: movaps %xmm2, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: oge_inverse:
@@ -152,12 +152,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: movapd %xmm0, %xmm2
+; STRICT-NEXT: movaps %xmm0, %xmm2
; STRICT-NEXT: cmplesd %xmm1, %xmm2
-; STRICT-NEXT: andpd %xmm2, %xmm1
-; STRICT-NEXT: andnpd %xmm0, %xmm2
-; STRICT-NEXT: orpd %xmm1, %xmm2
-; STRICT-NEXT: movapd %xmm2, %xmm0
+; STRICT-NEXT: andps %xmm2, %xmm1
+; STRICT-NEXT: andnps %xmm0, %xmm2
+; STRICT-NEXT: orps %xmm1, %xmm2
+; STRICT-NEXT: movaps %xmm2, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ole_inverse:
@@ -257,7 +257,7 @@ define double @oge_x(double %x) {
; STRICT: # BB#0:
; STRICT-NEXT: xorps %xmm1, %xmm1
; STRICT-NEXT: cmplesd %xmm0, %xmm1
-; STRICT-NEXT: andpd %xmm1, %xmm0
+; STRICT-NEXT: andps %xmm1, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: oge_x:
@@ -275,10 +275,10 @@ define double @ole_x(double %x) {
; STRICT-LABEL: ole_x:
; STRICT: # BB#0:
; STRICT-NEXT: xorps %xmm2, %xmm2
-; STRICT-NEXT: movapd %xmm0, %xmm1
+; STRICT-NEXT: movaps %xmm0, %xmm1
; STRICT-NEXT: cmplesd %xmm2, %xmm1
-; STRICT-NEXT: andpd %xmm0, %xmm1
-; STRICT-NEXT: movapd %xmm1, %xmm0
+; STRICT-NEXT: andps %xmm0, %xmm1
+; STRICT-NEXT: movaps %xmm1, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ole_x:
@@ -297,8 +297,8 @@ define double @oge_inverse_x(double %x) {
; STRICT: # BB#0:
; STRICT-NEXT: xorps %xmm1, %xmm1
; STRICT-NEXT: cmplesd %xmm0, %xmm1
-; STRICT-NEXT: andnpd %xmm0, %xmm1
-; STRICT-NEXT: movapd %xmm1, %xmm0
+; STRICT-NEXT: andnps %xmm0, %xmm1
+; STRICT-NEXT: movaps %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: oge_inverse_x:
@@ -323,10 +323,10 @@ define double @ole_inverse_x(double %x) {
; STRICT-LABEL: ole_inverse_x:
; STRICT: # BB#0:
; STRICT-NEXT: xorps %xmm2, %xmm2
-; STRICT-NEXT: movapd %xmm0, %xmm1
+; STRICT-NEXT: movaps %xmm0, %xmm1
; STRICT-NEXT: cmplesd %xmm2, %xmm1
-; STRICT-NEXT: andnpd %xmm0, %xmm1
-; STRICT-NEXT: movapd %xmm1, %xmm0
+; STRICT-NEXT: andnps %xmm0, %xmm1
+; STRICT-NEXT: movaps %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ole_inverse_x:
@@ -350,12 +350,12 @@ define double @ole_inverse_x(double %x) {
define double @ugt(double %x, double %y) {
; STRICT-LABEL: ugt:
; STRICT: # BB#0:
-; STRICT-NEXT: movapd %xmm0, %xmm2
+; STRICT-NEXT: movaps %xmm0, %xmm2
; STRICT-NEXT: cmpnlesd %xmm1, %xmm2
-; STRICT-NEXT: andpd %xmm2, %xmm0
-; STRICT-NEXT: andnpd %xmm1, %xmm2
-; STRICT-NEXT: orpd %xmm0, %xmm2
-; STRICT-NEXT: movapd %xmm2, %xmm0
+; STRICT-NEXT: andps %xmm2, %xmm0
+; STRICT-NEXT: andnps %xmm1, %xmm2
+; STRICT-NEXT: orps %xmm0, %xmm2
+; STRICT-NEXT: movaps %xmm2, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ugt:
@@ -371,11 +371,11 @@ define double @ugt(double %x, double %y) {
define double @ult(double %x, double %y) {
; STRICT-LABEL: ult:
; STRICT: # BB#0:
-; STRICT-NEXT: movapd %xmm1, %xmm2
+; STRICT-NEXT: movaps %xmm1, %xmm2
; STRICT-NEXT: cmpnlesd %xmm0, %xmm2
-; STRICT-NEXT: andpd %xmm2, %xmm0
-; STRICT-NEXT: andnpd %xmm1, %xmm2
-; STRICT-NEXT: orpd %xmm2, %xmm0
+; STRICT-NEXT: andps %xmm2, %xmm0
+; STRICT-NEXT: andnps %xmm1, %xmm2
+; STRICT-NEXT: orps %xmm2, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ult:
@@ -391,12 +391,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: movapd %xmm0, %xmm2
+; STRICT-NEXT: movaps %xmm0, %xmm2
; STRICT-NEXT: cmpnlesd %xmm1, %xmm2
-; STRICT-NEXT: andpd %xmm2, %xmm1
-; STRICT-NEXT: andnpd %xmm0, %xmm2
-; STRICT-NEXT: orpd %xmm1, %xmm2
-; STRICT-NEXT: movapd %xmm2, %xmm0
+; STRICT-NEXT: andps %xmm2, %xmm1
+; STRICT-NEXT: andnps %xmm0, %xmm2
+; STRICT-NEXT: orps %xmm1, %xmm2
+; STRICT-NEXT: movaps %xmm2, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ugt_inverse:
@@ -418,12 +418,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: movapd %xmm1, %xmm2
+; STRICT-NEXT: movaps %xmm1, %xmm2
; STRICT-NEXT: cmpnlesd %xmm0, %xmm2
-; STRICT-NEXT: andpd %xmm2, %xmm1
-; STRICT-NEXT: andnpd %xmm0, %xmm2
-; STRICT-NEXT: orpd %xmm1, %xmm2
-; STRICT-NEXT: movapd %xmm2, %xmm0
+; STRICT-NEXT: andps %xmm2, %xmm1
+; STRICT-NEXT: andnps %xmm0, %xmm2
+; STRICT-NEXT: orps %xmm1, %xmm2
+; STRICT-NEXT: movaps %xmm2, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ult_inverse:
@@ -524,10 +524,10 @@ define double @ugt_x(double %x) {
; STRICT-LABEL: ugt_x:
; STRICT: # BB#0:
; STRICT-NEXT: xorps %xmm2, %xmm2
-; STRICT-NEXT: movapd %xmm0, %xmm1
+; STRICT-NEXT: movaps %xmm0, %xmm1
; STRICT-NEXT: cmpnlesd %xmm2, %xmm1
-; STRICT-NEXT: andpd %xmm0, %xmm1
-; STRICT-NEXT: movapd %xmm1, %xmm0
+; STRICT-NEXT: andps %xmm0, %xmm1
+; STRICT-NEXT: movaps %xmm1, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ugt_x:
@@ -546,7 +546,7 @@ define double @ult_x(double %x) {
; STRICT: # BB#0:
; STRICT-NEXT: xorps %xmm1, %xmm1
; STRICT-NEXT: cmpnlesd %xmm0, %xmm1
-; STRICT-NEXT: andpd %xmm1, %xmm0
+; STRICT-NEXT: andps %xmm1, %xmm0
; STRICT-NEXT: retq
;
; RELAX-LABEL: ult_x:
@@ -564,10 +564,10 @@ define double @ugt_inverse_x(double %x) {
; STRICT-LABEL: ugt_inverse_x:
; STRICT: # BB#0:
; STRICT-NEXT: xorps %xmm2, %xmm2
-; STRICT-NEXT: movapd %xmm0, %xmm1
+; STRICT-NEXT: movaps %xmm0, %xmm1
; STRICT-NEXT: cmpnlesd %xmm2, %xmm1
-; STRICT-NEXT: andnpd %xmm0, %xmm1
-; STRICT-NEXT: movapd %xmm1, %xmm0
+; STRICT-NEXT: andnps %xmm0, %xmm1
+; STRICT-NEXT: movaps %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ugt_inverse_x:
@@ -593,8 +593,8 @@ define double @ult_inverse_x(double %x) {
; STRICT: # BB#0:
; STRICT-NEXT: xorps %xmm1, %xmm1
; STRICT-NEXT: cmpnlesd %xmm0, %xmm1
-; STRICT-NEXT: andnpd %xmm0, %xmm1
-; STRICT-NEXT: movapd %xmm1, %xmm0
+; STRICT-NEXT: andnps %xmm0, %xmm1
+; STRICT-NEXT: movaps %xmm1, %xmm0
; STRICT-NEXT: retq
;
; UNSAFE-LABEL: ult_inverse_x:
OpenPOWER on IntegriCloud