%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
-}
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:
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:
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
%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
-}
%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
-}
; RUN: llc < %s -mtriple=i686-- -mattr=+sse2 -enable-unsafe-fp-math | \
-; RUN: grep -v sp | grep xorps | count 8
+; RUN: grep -v sp | grep xorps | count 2
; Don't fold the incoming stack arguments into the xorps instructions used
; to do floating-point negations, because the arguments aren't vectors
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
-}