]> granicus.if.org Git - llvm/commitdiff
[AArch64][x86] add tests for pessimization of expression with X*2.0 (PR32939); NFC
authorSanjay Patel <spatel@rotateright.com>
Fri, 9 Aug 2019 14:52:31 +0000 (14:52 +0000)
committerSanjay Patel <spatel@rotateright.com>
Fri, 9 Aug 2019 14:52:31 +0000 (14:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@368445 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGen/AArch64/fadd-combines.ll
test/CodeGen/X86/fadd-combines.ll

index 831703c3abce02a9cca5a8df6edb493e3a75b336..7e34d2ea9e0fd274ad286143a056af679b2ea529 100644 (file)
@@ -164,5 +164,35 @@ define float @fadd_const_multiuse_attr(float %x) {
   ret float %a3
 }
 
+; PR32939 - https://bugs.llvm.org/show_bug.cgi?id=32939
+
+define double @fmul2_negated(double %a, double %b, double %c) {
+; CHECK-LABEL: fmul2_negated:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmov d3, #-2.00000000
+; CHECK-NEXT:    fmul d1, d1, d3
+; CHECK-NEXT:    fmul d1, d1, d2
+; CHECK-NEXT:    fadd d0, d0, d1
+; CHECK-NEXT:    ret
+  %mul = fmul double %b, 2.0
+  %mul1 = fmul double %mul, %c
+  %sub = fsub double %a, %mul1
+  ret double %sub
+}
+
+define <2 x double> @fmul2_negated_vec(<2 x double> %a, <2 x double> %b, <2 x double> %c) {
+; CHECK-LABEL: fmul2_negated_vec:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmov v3.2d, #-2.00000000
+; CHECK-NEXT:    fmul v1.2d, v1.2d, v3.2d
+; CHECK-NEXT:    fmul v1.2d, v1.2d, v2.2d
+; CHECK-NEXT:    fadd v0.2d, v0.2d, v1.2d
+; CHECK-NEXT:    ret
+  %mul = fmul <2 x double> %b, <double 2.0, double 2.0>
+  %mul1 = fmul <2 x double> %mul, %c
+  %sub = fsub <2 x double> %a, %mul1
+  ret <2 x double> %sub
+}
+
 declare void @use(double)
 
index fdd83dacd707467e56816272ea56b40ed25e873f..07e203f3a716408d48b7f4e392c447e1febd1261 100644 (file)
@@ -247,4 +247,32 @@ define float @fadd_const_multiuse_attr(float %x) #0 {
   ret float %a3
 }
 
+; PR32939 - https://bugs.llvm.org/show_bug.cgi?id=32939
+
+define double @fmul2_negated(double %a, double %b, double %c) {
+; CHECK-LABEL: fmul2_negated:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    mulsd {{.*}}(%rip), %xmm1
+; CHECK-NEXT:    mulsd %xmm2, %xmm1
+; CHECK-NEXT:    addsd %xmm1, %xmm0
+; CHECK-NEXT:    retq
+  %mul = fmul double %b, 2.0
+  %mul1 = fmul double %mul, %c
+  %sub = fsub double %a, %mul1
+  ret double %sub
+}
+
+define <2 x double> @fmul2_negated_vec(<2 x double> %a, <2 x double> %b, <2 x double> %c) {
+; CHECK-LABEL: fmul2_negated_vec:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    mulpd {{.*}}(%rip), %xmm1
+; CHECK-NEXT:    mulpd %xmm2, %xmm1
+; CHECK-NEXT:    addpd %xmm1, %xmm0
+; CHECK-NEXT:    retq
+  %mul = fmul <2 x double> %b, <double 2.0, double 2.0>
+  %mul1 = fmul <2 x double> %mul, %c
+  %sub = fsub <2 x double> %a, %mul1
+  ret <2 x double> %sub
+}
+
 attributes #0 = { "less-precise-fpmad"="true" "no-infs-fp-math"="true" "no-nans-fp-math"="true" "unsafe-fp-math"="true" "no-signed-zeros-fp-math"="true" }