diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/fp-fold.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/fp-fold.ll | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/llvm/test/CodeGen/X86/fp-fold.ll b/llvm/test/CodeGen/X86/fp-fold.ll index 34354436c6e..b8e30a4ce42 100644 --- a/llvm/test/CodeGen/X86/fp-fold.ll +++ b/llvm/test/CodeGen/X86/fp-fold.ll @@ -17,18 +17,33 @@ define float @fadd_zero(float %x) { } define float @fadd_negzero(float %x) { -; STRICT-LABEL: fadd_negzero: -; STRICT: # %bb.0: -; STRICT-NEXT: addss {{.*}}(%rip), %xmm0 -; STRICT-NEXT: retq -; -; UNSAFE-LABEL: fadd_negzero: -; UNSAFE: # %bb.0: -; UNSAFE-NEXT: retq +; ANY-LABEL: fadd_negzero: +; ANY: # %bb.0: +; ANY-NEXT: retq %r = fadd float %x, -0.0 ret float %r } +define float @fadd_produce_zero(float %x) { +; ANY-LABEL: fadd_produce_zero: +; ANY: # %bb.0: +; ANY-NEXT: xorps %xmm0, %xmm0 +; ANY-NEXT: retq + %neg = fsub nsz float 0.0, %x + %r = fadd nnan float %neg, %x + ret float %r +} + +define float @fadd_reassociate(float %x) { +; ANY-LABEL: fadd_reassociate: +; ANY: # %bb.0: +; ANY-NEXT: addss {{.*}}(%rip), %xmm0 +; ANY-NEXT: retq + %sum = fadd float %x, 8.0 + %r = fadd reassoc nsz float %sum, 12.0 + ret float %r +} + define float @fadd_negzero_nsz(float %x) { ; ANY-LABEL: fadd_negzero_nsz: ; ANY: # %bb.0: |