xref: /llvm-project/llvm/test/CodeGen/PowerPC/fdiv-combine.ll (revision e82a54ae87cb65a91f583570636461e7b2046b6f)
1; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s
2
3; Following test case checks:
4;   a / D; b / D; c / D;
5;                =>
6;   recip = 1.0 / D; a * recip; b * recip; c * recip;
7
8define void @three_fdiv_double(double %D, double %a, double %b, double %c) #0 {
9; CHECK-LABEL: three_fdiv_double:
10; CHECK: fdiv {{[0-9]}}
11; CHECK-NOT: fdiv
12; CHECK: fmul
13; CHECK: fmul
14; CHECK: fmul
15  %div = fdiv arcp double %a, %D
16  %div1 = fdiv arcp double %b, %D
17  %div2 = fdiv arcp double %c, %D
18  tail call void @foo_3d(double %div, double %div1, double %div2)
19  ret void
20}
21
22define void @two_fdiv_double(double %D, double %a, double %b) #0 {
23; CHECK-LABEL: two_fdiv_double:
24; CHECK: fdiv {{[0-9]}}
25; CHECK: fdiv {{[0-9]}}
26; CHECK-NOT: fmul
27  %div = fdiv arcp double %a, %D
28  %div1 = fdiv arcp double %b, %D
29  tail call void @foo_2d(double %div, double %div1)
30  ret void
31}
32
33declare void @foo_3d(double, double, double)
34declare void @foo_3_2xd(<2 x double>, <2 x double>, <2 x double>)
35declare void @foo_2d(double, double)
36