summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/fp-fold.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/fp-fold.ll')
-rw-r--r--llvm/test/CodeGen/X86/fp-fold.ll31
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:
OpenPOWER on IntegriCloud