1 ; RUN: llc < %s -march=ppc32 -fp-contract=fast -mattr=-vsx | FileCheck %s
2 ; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -fp-contract=fast -mattr=+vsx -mcpu=pwr7 | FileCheck -check-prefix=CHECK-VSX %s
4 define double @test_FMADD_ASSOC1(double %A, double %B, double %C,
5 double %D, double %E) {
6 %F = fmul double %A, %B ; <double> [#uses=1]
7 %G = fmul double %C, %D ; <double> [#uses=1]
8 %H = fadd double %F, %G ; <double> [#uses=1]
9 %I = fadd double %H, %E ; <double> [#uses=1]
11 ; CHECK-LABEL: test_FMADD_ASSOC1:
16 ; CHECK-VSX-LABEL: test_FMADD_ASSOC1:
17 ; CHECK-VSX: xsmaddmdp
18 ; CHECK-VSX-NEXT: xsmaddadp
23 define double @test_FMADD_ASSOC2(double %A, double %B, double %C,
24 double %D, double %E) {
25 %F = fmul double %A, %B ; <double> [#uses=1]
26 %G = fmul double %C, %D ; <double> [#uses=1]
27 %H = fadd double %F, %G ; <double> [#uses=1]
28 %I = fadd double %E, %H ; <double> [#uses=1]
30 ; CHECK-LABEL: test_FMADD_ASSOC2:
35 ; CHECK-VSX-LABEL: test_FMADD_ASSOC2:
36 ; CHECK-VSX: xsmaddmdp
37 ; CHECK-VSX-NEXT: xsmaddadp
42 define double @test_FMSUB_ASSOC1(double %A, double %B, double %C,
43 double %D, double %E) {
44 %F = fmul double %A, %B ; <double> [#uses=1]
45 %G = fmul double %C, %D ; <double> [#uses=1]
46 %H = fadd double %F, %G ; <double> [#uses=1]
47 %I = fsub double %H, %E ; <double> [#uses=1]
49 ; CHECK-LABEL: test_FMSUB_ASSOC1:
54 ; CHECK-VSX-LABEL: test_FMSUB_ASSOC1:
55 ; CHECK-VSX: xsmsubmdp
56 ; CHECK-VSX-NEXT: xsmaddadp
61 define double @test_FMSUB_ASSOC2(double %A, double %B, double %C,
62 double %D, double %E) {
63 %F = fmul double %A, %B ; <double> [#uses=1]
64 %G = fmul double %C, %D ; <double> [#uses=1]
65 %H = fadd double %F, %G ; <double> [#uses=1]
66 %I = fsub double %E, %H ; <double> [#uses=1]
68 ; CHECK-LABEL: test_FMSUB_ASSOC2:
73 ; CHECK-VSX-LABEL: test_FMSUB_ASSOC2:
74 ; CHECK-VSX: xsnmsubmdp
75 ; CHECK-VSX-NEXT: xsnmsubadp