[x86] Clean up a bunch of vector shuffle tests with my script. Notably,
[oota-llvm.git] / test / CodeGen / X86 / sse-minmax.ll
index 5fa0ca3226c6f9f810d49c04f9d2037d7b06f6db..da36a4232862f604ce650e58a5578b4be2c92041 100644 (file)
@@ -77,7 +77,7 @@ define double @olt_inverse(double %x, double %y) nounwind {
 }
 
 ; CHECK-LABEL:      oge:
-; CHECK-NEXT: ucomisd %xmm1, %xmm0
+; CHECK: cmplesd %xmm0
 ; UNSAFE-LABEL:      oge:
 ; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
@@ -91,7 +91,7 @@ define double @oge(double %x, double %y) nounwind {
 }
 
 ; CHECK-LABEL:      ole:
-; CHECK-NEXT: ucomisd %xmm0, %xmm1
+; CHECK: cmplesd %xmm1
 ; UNSAFE-LABEL:      ole:
 ; UNSAFE-NEXT: minsd %xmm1, %xmm0
 ; FINITE-LABEL:      ole:
@@ -103,7 +103,7 @@ define double @ole(double %x, double %y) nounwind {
 }
 
 ; CHECK-LABEL:      oge_inverse:
-; CHECK-NEXT: ucomisd %xmm1, %xmm0
+; CHECK: cmplesd %xmm0
 ; UNSAFE-LABEL:      oge_inverse:
 ; UNSAFE-NEXT: minsd %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
@@ -118,7 +118,7 @@ define double @oge_inverse(double %x, double %y) nounwind {
 }
 
 ; CHECK-LABEL:      ole_inverse:
-; CHECK-NEXT: ucomisd %xmm0, %xmm1
+; CHECK: cmplesd %xmm1
 ; UNSAFE-LABEL:      ole_inverse:
 ; UNSAFE-NEXT: maxsd %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
@@ -138,8 +138,7 @@ define double @ole_inverse(double %x, double %y) nounwind {
 ; CHECK-NEXT: ret
 ; UNSAFE-LABEL:      ogt_x:
 ; UNSAFE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
-; UNSAFE-NEXT: maxsd %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}} %xmm1, %xmm0
+; UNSAFE-NEXT: maxsd %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      ogt_x:
 ; FINITE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
@@ -157,8 +156,7 @@ define double @ogt_x(double %x) nounwind {
 ; CHECK-NEXT: ret
 ; UNSAFE-LABEL:      olt_x:
 ; UNSAFE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
-; UNSAFE-NEXT: minsd %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}} %xmm1, %xmm0
+; UNSAFE-NEXT: minsd %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      olt_x:
 ; FINITE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
@@ -177,8 +175,7 @@ define double @olt_x(double %x) nounwind {
 ; CHECK-NEXT: ret
 ; UNSAFE-LABEL:      ogt_inverse_x:
 ; UNSAFE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
-; UNSAFE-NEXT: minsd  %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}} %xmm1, %xmm0
+; UNSAFE-NEXT: minsd  %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      ogt_inverse_x:
 ; FINITE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
@@ -198,8 +195,7 @@ define double @ogt_inverse_x(double %x) nounwind {
 ; CHECK-NEXT: ret
 ; UNSAFE-LABEL:      olt_inverse_x:
 ; UNSAFE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
-; UNSAFE-NEXT: maxsd  %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}} %xmm1, %xmm0
+; UNSAFE-NEXT: maxsd  %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      olt_inverse_x:
 ; FINITE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
@@ -213,11 +209,11 @@ define double @olt_inverse_x(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      oge_x:
-; CHECK:      ucomisd %xmm1, %xmm0
+; CHECK:      cmplesd %xmm
+; CHECK-NEXT: andpd
 ; UNSAFE-LABEL:      oge_x:
 ; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
-; UNSAFE-NEXT: maxsd   %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}} %xmm1, %xmm0
+; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      oge_x:
 ; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
@@ -230,11 +226,11 @@ define double @oge_x(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ole_x:
-; CHECK:      ucomisd %xmm0, %xmm1
+; CHECK:      cmplesd %xmm
+; CHECK-NEXT: andpd
 ; UNSAFE-LABEL:      ole_x:
 ; UNSAFE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
-; UNSAFE-NEXT: minsd %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}} %xmm1, %xmm0
+; UNSAFE-NEXT: minsd %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      ole_x:
 ; FINITE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
@@ -247,11 +243,11 @@ define double @ole_x(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      oge_inverse_x:
-; CHECK:      ucomisd %xmm
+; CHECK:      cmplesd %xmm
+; CHECK-NEXT: andnpd
 ; UNSAFE-LABEL:      oge_inverse_x:
 ; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
-; UNSAFE-NEXT: minsd   %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
+; UNSAFE-NEXT: minsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      oge_inverse_x:
 ; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
@@ -265,11 +261,10 @@ define double @oge_inverse_x(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ole_inverse_x:
-; CHECK:      ucomisd %xmm
+; CHECK:      cmplesd %xmm
 ; UNSAFE-LABEL:      ole_inverse_x:
 ; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
-; UNSAFE-NEXT: maxsd   %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
+; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      ole_inverse_x:
 ; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
@@ -283,7 +278,7 @@ define double @ole_inverse_x(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ugt:
-; CHECK:      ucomisd %xmm0, %xmm1
+; CHECK:      cmpnlesd %xmm1
 ; UNSAFE-LABEL:      ugt:
 ; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
@@ -297,7 +292,7 @@ define double @ugt(double %x, double %y) nounwind {
 }
 
 ; CHECK-LABEL:      ult:
-; CHECK:      ucomisd %xmm1, %xmm0
+; CHECK:      cmpnlesd %xmm0
 ; UNSAFE-LABEL:      ult:
 ; UNSAFE-NEXT: minsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
@@ -311,7 +306,7 @@ define double @ult(double %x, double %y) nounwind {
 }
 
 ; CHECK-LABEL:      ugt_inverse:
-; CHECK:      ucomisd %xmm0, %xmm1
+; CHECK:      cmpnlesd %xmm1
 ; UNSAFE-LABEL:      ugt_inverse:
 ; UNSAFE-NEXT: minsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
@@ -326,7 +321,7 @@ define double @ugt_inverse(double %x, double %y) nounwind {
 }
 
 ; CHECK-LABEL:      ult_inverse:
-; CHECK:      ucomisd %xmm1, %xmm0
+; CHECK:      cmpnlesd %xmm0
 ; UNSAFE-LABEL:      ult_inverse:
 ; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
@@ -405,11 +400,11 @@ define double @ule_inverse(double %x, double %y) nounwind {
 }
 
 ; CHECK-LABEL:      ugt_x:
-; CHECK:      ucomisd %xmm0, %xmm1
+; CHECK:      cmpnlesd %xmm
+; CHECK-NEXT: andpd
 ; UNSAFE-LABEL:      ugt_x:
 ; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
-; UNSAFE-NEXT: maxsd   %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}} %xmm1, %xmm0
+; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      ugt_x:
 ; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
@@ -422,11 +417,11 @@ define double @ugt_x(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ult_x:
-; CHECK:      ucomisd %xmm1, %xmm0
+; CHECK:      cmpnlesd %xmm
+; CHECK-NEXT: andpd
 ; UNSAFE-LABEL:      ult_x:
 ; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
-; UNSAFE-NEXT: minsd   %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}} %xmm1, %xmm0
+; UNSAFE-NEXT: minsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      ult_x:
 ; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
@@ -439,11 +434,11 @@ define double @ult_x(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ugt_inverse_x:
-; CHECK:      ucomisd %xmm
+; CHECK:      cmpnlesd %xmm
+; CHECK-NEXT: andnpd
 ; UNSAFE-LABEL:      ugt_inverse_x:
 ; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
-; UNSAFE-NEXT: minsd   %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
+; UNSAFE-NEXT: minsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      ugt_inverse_x:
 ; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
@@ -457,11 +452,11 @@ define double @ugt_inverse_x(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ult_inverse_x:
-; CHECK:      ucomisd %xmm
+; CHECK:      cmpnlesd %xmm
+; CHECK-NEXT: andnpd
 ; UNSAFE-LABEL:      ult_inverse_x:
 ; UNSAFE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
-; UNSAFE-NEXT: maxsd   %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
+; UNSAFE-NEXT: maxsd   %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      ult_inverse_x:
 ; FINITE-NEXT: xorp{{[sd]}}   %xmm1, %xmm1
@@ -481,8 +476,7 @@ define double @ult_inverse_x(double %x) nounwind {
 ; CHECK-NEXT: ret
 ; UNSAFE-LABEL:      uge_x:
 ; UNSAFE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
-; UNSAFE-NEXT: maxsd  %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}}  %xmm1, %xmm0
+; UNSAFE-NEXT: maxsd  %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      uge_x:
 ; FINITE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
@@ -501,8 +495,7 @@ define double @uge_x(double %x) nounwind {
 ; CHECK-NEXT: ret
 ; UNSAFE-LABEL:      ule_x:
 ; UNSAFE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
-; UNSAFE-NEXT: minsd  %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}} %xmm1, %xmm0
+; UNSAFE-NEXT: minsd  %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      ule_x:
 ; FINITE-NEXT: xorp{{[sd]}}  %xmm1, %xmm1
@@ -520,8 +513,7 @@ define double @ule_x(double %x) nounwind {
 ; CHECK-NEXT: ret
 ; UNSAFE-LABEL:      uge_inverse_x:
 ; UNSAFE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
-; UNSAFE-NEXT: minsd %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}} %xmm1, %xmm0
+; UNSAFE-NEXT: minsd %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      uge_inverse_x:
 ; FINITE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
@@ -540,8 +532,7 @@ define double @uge_inverse_x(double %x) nounwind {
 ; CHECK-NEXT: ret
 ; UNSAFE-LABEL:      ule_inverse_x:
 ; UNSAFE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
-; UNSAFE-NEXT: maxsd %xmm0, %xmm1
-; UNSAFE-NEXT: movap{{[sd]}} %xmm1, %xmm0
+; UNSAFE-NEXT: maxsd %xmm1, %xmm0
 ; UNSAFE-NEXT: ret
 ; FINITE-LABEL:      ule_inverse_x:
 ; FINITE-NEXT: xorp{{[sd]}} %xmm1, %xmm1
@@ -623,7 +614,7 @@ define double @olt_inverse_y(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      oge_y:
-; CHECK:      ucomisd %xmm1, %xmm0
+; CHECK:      cmplesd %xmm0
 ; UNSAFE-LABEL:      oge_y:
 ; UNSAFE-NEXT: maxsd   {{[^,]*}}, %xmm0
 ; UNSAFE-NEXT: ret
@@ -637,7 +628,7 @@ define double @oge_y(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ole_y:
-; CHECK:      ucomisd %xmm0, %xmm1
+; CHECK:      cmplesd %xmm
 ; UNSAFE-LABEL:      ole_y:
 ; UNSAFE-NEXT: minsd {{[^,]*}}, %xmm0
 ; UNSAFE-NEXT: ret
@@ -651,7 +642,7 @@ define double @ole_y(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      oge_inverse_y:
-; CHECK:      ucomisd %xmm
+; CHECK:      cmplesd %xmm0
 ; UNSAFE-LABEL:      oge_inverse_y:
 ; UNSAFE-NEXT: minsd   {{[^,]*}}, %xmm0
 ; UNSAFE-NEXT: ret
@@ -667,7 +658,7 @@ define double @oge_inverse_y(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ole_inverse_y:
-; CHECK:      ucomisd %xmm
+; CHECK:      cmplesd %xmm
 ; UNSAFE-LABEL:      ole_inverse_y:
 ; UNSAFE-NEXT: maxsd   {{[^,]*}}, %xmm0
 ; UNSAFE-NEXT: ret
@@ -683,7 +674,7 @@ define double @ole_inverse_y(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ugt_y:
-; CHECK:      ucomisd %xmm0, %xmm1
+; CHECK:      cmpnlesd %xmm
 ; UNSAFE-LABEL:      ugt_y:
 ; UNSAFE-NEXT: maxsd   {{[^,]*}}, %xmm0
 ; UNSAFE-NEXT: ret
@@ -697,7 +688,7 @@ define double @ugt_y(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ult_y:
-; CHECK:      ucomisd %xmm1, %xmm0
+; CHECK:      cmpnlesd %xmm0
 ; UNSAFE-LABEL:      ult_y:
 ; UNSAFE-NEXT: minsd   {{[^,]*}}, %xmm0
 ; UNSAFE-NEXT: ret
@@ -711,7 +702,7 @@ define double @ult_y(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ugt_inverse_y:
-; CHECK:      ucomisd %xmm
+; CHECK:      cmpnlesd %xmm
 ; UNSAFE-LABEL:      ugt_inverse_y:
 ; UNSAFE-NEXT: minsd   {{[^,]*}}, %xmm0
 ; UNSAFE-NEXT: ret
@@ -727,7 +718,7 @@ define double @ugt_inverse_y(double %x) nounwind {
 }
 
 ; CHECK-LABEL:      ult_inverse_y:
-; CHECK:      ucomisd %xmm
+; CHECK:      cmpnlesd %xmm
 ; UNSAFE-LABEL:      ult_inverse_y:
 ; UNSAFE-NEXT: maxsd   {{[^,]*}}, %xmm0
 ; UNSAFE-NEXT: ret