]> granicus.if.org Git - llvm/commitdiff
[NFC][CodeGen] Add unary fneg tests to fp-fast.ll fp-fold.ll fp-in-intregs.ll fp...
authorCameron McInally <cameron.mcinally@nyu.edu>
Thu, 6 Jun 2019 15:29:11 +0000 (15:29 +0000)
committerCameron McInally <cameron.mcinally@nyu.edu>
Thu, 6 Jun 2019 15:29:11 +0000 (15:29 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362712 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGen/X86/fp-fast.ll
test/CodeGen/X86/fp-fold.ll
test/CodeGen/X86/fp-in-intregs.ll
test/CodeGen/X86/fp-stack-compare-cmov.ll
test/CodeGen/X86/fp-stack-compare.ll
test/CodeGen/X86/fsxor-alignment.ll

index 7abedfd2d171b30e5d0735932c761fd849ee7af6..9e8cdf0a5305202f711ff6780ceea15342d9b1f8 100644 (file)
@@ -104,3 +104,13 @@ define float @test10(float %a) {
   %t2 = fadd float %a, %t1
   ret float %t2
 }
+
+define float @test11(float %a) {
+; CHECK-LABEL: test11:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
+; CHECK-NEXT:    retq
+  %t1 = fneg float %a
+  %t2 = fadd float %a, %t1
+  ret float %t2
+}
index aee451857002dcb0b2a88754bdad8cb3c75c9c6c..45cfa58703aaacf6fae24164be0493d114828bfe 100644 (file)
@@ -34,6 +34,16 @@ define float @fadd_produce_zero(float %x) {
   ret float %r
 }
 
+define float @fadd_produce_zero_unary_fneg(float %x) {
+; ANY-LABEL: fadd_produce_zero_unary_fneg:
+; ANY:       # %bb.0:
+; ANY-NEXT:    xorps %xmm0, %xmm0
+; ANY-NEXT:    retq
+  %neg = fneg nsz float %x
+  %r = fadd nnan float %neg, %x
+  ret float %r
+}
+
 define float @fadd_reassociate(float %x) {
 ; ANY-LABEL: fadd_reassociate:
 ; ANY:       # %bb.0:
@@ -88,6 +98,17 @@ define float @fsub_neg_x_y(float %x, float %y) {
   ret float %r
 }
 
+define float @unary_neg_x_y(float %x, float %y) {
+; ANY-LABEL: unary_neg_x_y:
+; ANY:       # %bb.0:
+; ANY-NEXT:    subss %xmm0, %xmm1
+; ANY-NEXT:    movaps %xmm1, %xmm0
+; ANY-NEXT:    retq
+  %neg = fneg nsz float %x
+  %r = fadd nsz float %neg, %y
+  ret float %r
+}
+
 define float @fsub_neg_y(float %x, float %y) {
 ; ANY-LABEL: fsub_neg_y:
 ; ANY:       # %bb.0:
index 1f5121d271c0e604936db0b49cbd129d0fe618e8..89631a388cd4b7b4d6757a6a40cf78a616f37417 100644 (file)
@@ -18,5 +18,12 @@ entry:
        ret i32 %tmp210
 }
 
+define i32 @test3(float %x) nounwind  {
+entry:
+        %tmp2 = fneg float %x                           ; <float> [#uses=1]
+        %tmp210 = bitcast float %tmp2 to i32            ; <i32> [#uses=1]
+        ret i32 %tmp210
+}
+
 declare float @copysignf(float, float) nounwind readnone 
 
index d0e816db3b6932ab57350e8d278f471190482eef..72cd034fc91c4d33cbb88184db71fadc9f67ef91 100644 (file)
@@ -10,3 +10,13 @@ define float @foo(float* %col.2.0) {
   %iftmp.2.0 = select i1 %tmp16, float %tmp20, float %tmp
   ret float %iftmp.2.0
 }
+
+define float @foo_unary_fneg(float* %col.2.0) {
+; CHECK: fucompi
+; CHECK: fcmov
+  %tmp = load float, float* %col.2.0
+  %tmp16 = fcmp olt float %tmp, 0.000000e+00
+  %tmp20 = fneg float %tmp
+  %iftmp.2.0 = select i1 %tmp16, float %tmp20, float %tmp
+  ret float %iftmp.2.0
+}
index 8ff0dd442f9d504b1d629001b671a72af31a1624..974e4d55b22f3771969f161b608e99c8598bfd91 100644 (file)
@@ -12,3 +12,15 @@ define float @foo(float* %col.2.0) {
   %iftmp.2.0 = select i1 %tmp16, float %tmp20, float %tmp
   ret float %iftmp.2.0
 }
+
+define float @foo_unary_fneg(float* %col.2.0) {
+; CHECK: fucomp
+; CHECK-NOT: fucompi
+; CHECK: j
+; CHECK-NOT: fcmov
+  %tmp = load float, float* %col.2.0
+  %tmp16 = fcmp olt float %tmp, 0.000000e+00
+  %tmp20 = fneg float %tmp
+  %iftmp.2.0 = select i1 %tmp16, float %tmp20, float %tmp
+  ret float %iftmp.2.0
+}
index 6f9738f50fb4b8f918c5dff122042299f1c16e8d..f43ece087e6c8e4c67123b201913a92168eb25e3 100644 (file)
@@ -1,5 +1,5 @@
 ; RUN: llc < %s -mtriple=i686-- -mattr=+sse2 -enable-unsafe-fp-math | \
-; RUN:  grep -v sp | grep xorps | count 2
+; RUN:  grep -v sp | grep xorps | count 8
 
 ; Don't fold the incoming stack arguments into the xorps instructions used
 ; to do floating-point negations, because the arguments aren't vectors
@@ -12,3 +12,27 @@ define void @foo(float* %p, float* %q, float %s, float %y) {
   store float %yy, float* %q
   ret void
 }
+
+define void @foo_unary_fneg_x_y(float* %p, float* %q, float %s, float %y) {
+  %ss = fneg float %s
+  %yy = fneg float %y
+  store float %ss, float* %p
+  store float %yy, float* %q
+  ret void
+}
+
+define void @foo_unary_fneg_x(float* %p, float* %q, float %s, float %y) {
+  %ss = fneg float %s
+  %yy = fsub float -0.0, %y
+  store float %ss, float* %p
+  store float %yy, float* %q
+  ret void
+}
+
+define void @foo_unary_fneg_y(float* %p, float* %q, float %s, float %y) {
+  %ss = fsub float -0.0, %s
+  %yy = fneg float %y
+  store float %ss, float* %p
+  store float %yy, float* %q
+  ret void
+}