From 69ab7a0e4552bd7e475b990bd4c8a75f3b2671c9 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Fri, 9 Aug 2019 14:52:31 +0000 Subject: [PATCH] [AArch64][x86] add tests for pessimization of expression with X*2.0 (PR32939); NFC llvm-svn: 368445 --- llvm/test/CodeGen/AArch64/fadd-combines.ll | 30 ++++++++++++++++++++++++++++++ llvm/test/CodeGen/X86/fadd-combines.ll | 28 ++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/llvm/test/CodeGen/AArch64/fadd-combines.ll b/llvm/test/CodeGen/AArch64/fadd-combines.ll index 831703c..7e34d2e 100644 --- a/llvm/test/CodeGen/AArch64/fadd-combines.ll +++ b/llvm/test/CodeGen/AArch64/fadd-combines.ll @@ -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, + %mul1 = fmul <2 x double> %mul, %c + %sub = fsub <2 x double> %a, %mul1 + ret <2 x double> %sub +} + declare void @use(double) diff --git a/llvm/test/CodeGen/X86/fadd-combines.ll b/llvm/test/CodeGen/X86/fadd-combines.ll index fdd83da..07e203f 100644 --- a/llvm/test/CodeGen/X86/fadd-combines.ll +++ b/llvm/test/CodeGen/X86/fadd-combines.ll @@ -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, + %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" } -- 2.7.4