1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names --enable-unsafe-fp-math \
3 ; RUN: -verify-machineinstrs --enable-no-signed-zeros-fp-math \
4 ; RUN: --enable-no-nans-fp-math --enable-no-infs-fp-math \
5 ; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \
6 ; RUN: --check-prefix=FAST-P8
7 ; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names --enable-unsafe-fp-math \
8 ; RUN: -verify-machineinstrs --enable-no-signed-zeros-fp-math \
9 ; RUN: --enable-no-nans-fp-math --enable-no-infs-fp-math \
10 ; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \
11 ; RUN: --check-prefix=FAST-P9
12 ; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names -verify-machineinstrs \
13 ; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \
14 ; RUN: --check-prefix=NO-FAST-P9
15 ; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -verify-machineinstrs \
16 ; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \
17 ; RUN: --check-prefix=NO-FAST-P8
19 define double @testoeq(double %a, double %b, double %c, double %d) {
20 ; FAST-P8-LABEL: testoeq:
21 ; FAST-P8: # %bb.0: # %entry
22 ; FAST-P8-NEXT: xssubdp f0, f1, f2
23 ; FAST-P8-NEXT: xsnegdp f1, f0
24 ; FAST-P8-NEXT: fsel f0, f0, f3, f4
25 ; FAST-P8-NEXT: fsel f1, f1, f0, f4
28 ; FAST-P9-LABEL: testoeq:
29 ; FAST-P9: # %bb.0: # %entry
30 ; FAST-P9-NEXT: xssubdp f0, f1, f2
31 ; FAST-P9-NEXT: fsel f1, f0, f3, f4
32 ; FAST-P9-NEXT: xsnegdp f0, f0
33 ; FAST-P9-NEXT: fsel f1, f0, f1, f4
36 ; NO-FAST-P9-LABEL: testoeq:
37 ; NO-FAST-P9: # %bb.0: # %entry
38 ; NO-FAST-P9-NEXT: xscmpudp cr0, f1, f2
39 ; NO-FAST-P9-NEXT: beq cr0, .LBB0_2
40 ; NO-FAST-P9-NEXT: # %bb.1: # %entry
41 ; NO-FAST-P9-NEXT: fmr f3, f4
42 ; NO-FAST-P9-NEXT: .LBB0_2: # %entry
43 ; NO-FAST-P9-NEXT: fmr f1, f3
44 ; NO-FAST-P9-NEXT: blr
46 ; NO-FAST-P8-LABEL: testoeq:
47 ; NO-FAST-P8: # %bb.0: # %entry
48 ; NO-FAST-P8-NEXT: xscmpudp cr0, f1, f2
49 ; NO-FAST-P8-NEXT: fmr f1, f3
50 ; NO-FAST-P8-NEXT: beqlr cr0
51 ; NO-FAST-P8-NEXT: # %bb.1: # %entry
52 ; NO-FAST-P8-NEXT: fmr f1, f4
53 ; NO-FAST-P8-NEXT: blr
55 %cmp = fcmp oeq double %a, %b
56 %cond = select i1 %cmp, double %c, double %d
60 define double @testoeq_fast(double %a, double %b, double %c, double %d) {
61 ; FAST-P8-LABEL: testoeq_fast:
62 ; FAST-P8: # %bb.0: # %entry
63 ; FAST-P8-NEXT: xssubdp f0, f1, f2
64 ; FAST-P8-NEXT: xsnegdp f1, f0
65 ; FAST-P8-NEXT: fsel f0, f0, f3, f4
66 ; FAST-P8-NEXT: fsel f1, f1, f0, f4
69 ; FAST-P9-LABEL: testoeq_fast:
70 ; FAST-P9: # %bb.0: # %entry
71 ; FAST-P9-NEXT: xssubdp f0, f1, f2
72 ; FAST-P9-NEXT: fsel f1, f0, f3, f4
73 ; FAST-P9-NEXT: xsnegdp f0, f0
74 ; FAST-P9-NEXT: fsel f1, f0, f1, f4
77 ; NO-FAST-P9-LABEL: testoeq_fast:
78 ; NO-FAST-P9: # %bb.0: # %entry
79 ; NO-FAST-P9-NEXT: xssubdp f0, f1, f2
80 ; NO-FAST-P9-NEXT: fsel f1, f0, f3, f4
81 ; NO-FAST-P9-NEXT: xsnegdp f0, f0
82 ; NO-FAST-P9-NEXT: fsel f1, f0, f1, f4
83 ; NO-FAST-P9-NEXT: blr
85 ; NO-FAST-P8-LABEL: testoeq_fast:
86 ; NO-FAST-P8: # %bb.0: # %entry
87 ; NO-FAST-P8-NEXT: xssubdp f0, f1, f2
88 ; NO-FAST-P8-NEXT: xsnegdp f1, f0
89 ; NO-FAST-P8-NEXT: fsel f0, f0, f3, f4
90 ; NO-FAST-P8-NEXT: fsel f1, f1, f0, f4
91 ; NO-FAST-P8-NEXT: blr
93 %cmp = fcmp nnan ninf nsz oeq double %a, %b
94 %cond = select nnan ninf nsz i1 %cmp, double %c, double %d