Home | History | Annotate | Download | only in PowerPC
      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
      3 
      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]
     10 	ret double %I
     11 ; CHECK-LABEL: test_FMADD_ASSOC1:
     12 ; CHECK: fmadd
     13 ; CHECK-NEXT: fmadd
     14 ; CHECK-NEXT: blr
     15 
     16 ; CHECK-VSX-LABEL: test_FMADD_ASSOC1:
     17 ; CHECK-VSX: xsmaddmdp
     18 ; CHECK-VSX-NEXT: xsmaddadp
     19 ; CHECK-VSX-NEXT: fmr
     20 ; CHECK-VSX-NEXT: blr
     21 }
     22 
     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]
     29 	ret double %I
     30 ; CHECK-LABEL: test_FMADD_ASSOC2:
     31 ; CHECK: fmadd
     32 ; CHECK-NEXT: fmadd
     33 ; CHECK-NEXT: blr
     34 
     35 ; CHECK-VSX-LABEL: test_FMADD_ASSOC2:
     36 ; CHECK-VSX: xsmaddmdp
     37 ; CHECK-VSX-NEXT: xsmaddadp
     38 ; CHECK-VSX-NEXT: fmr
     39 ; CHECK-VSX-NEXT: blr
     40 }
     41 
     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]
     48 	ret double %I
     49 ; CHECK-LABEL: test_FMSUB_ASSOC1:
     50 ; CHECK: fmsub
     51 ; CHECK-NEXT: fmadd
     52 ; CHECK-NEXT: blr
     53 
     54 ; CHECK-VSX-LABEL: test_FMSUB_ASSOC1:
     55 ; CHECK-VSX: xsmsubmdp
     56 ; CHECK-VSX-NEXT: xsmaddadp
     57 ; CHECK-VSX-NEXT: fmr
     58 ; CHECK-VSX-NEXT: blr
     59 }
     60 
     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]
     67 	ret double %I
     68 ; CHECK-LABEL: test_FMSUB_ASSOC2:
     69 ; CHECK: fnmsub
     70 ; CHECK-NEXT: fnmsub
     71 ; CHECK-NEXT: blr
     72 
     73 ; CHECK-VSX-LABEL: test_FMSUB_ASSOC2:
     74 ; CHECK-VSX: xsnmsubmdp
     75 ; CHECK-VSX-NEXT: xsnmsubadp
     76 ; CHECK-VSX-NEXT: fmr
     77 ; CHECK-VSX-NEXT: blr
     78 }
     79 
     80