xref: /llvm-project/llvm/test/CodeGen/PowerPC/fminimum-fmaximum.ll (revision 6a8d30b1c1be5e46deb9b3a17915d488e1dbc470)
14a8f2f2eSQiu Chaofan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
24a8f2f2eSQiu Chaofan; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s --check-prefix=NOVSX
34a8f2f2eSQiu Chaofan; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s --check-prefix=VSX
44a8f2f2eSQiu Chaofan; RUN: llc -mtriple=powerpc64-ibm-aix -mcpu=pwr8 < %s | FileCheck %s --check-prefix=AIX
54a8f2f2eSQiu Chaofan
64a8f2f2eSQiu Chaofandefine float @f32_minimum(float %a, float %b) {
74a8f2f2eSQiu Chaofan; NOVSX-LABEL: f32_minimum:
84a8f2f2eSQiu Chaofan; NOVSX:       # %bb.0: # %entry
94a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 1, 2
104a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 0, 1
114a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfs 2, -8(1)
124a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfs 1, -4(1)
134a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 0, .LBB0_2
144a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.1: # %entry
154a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 0, 2
164a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB0_2: # %entry
174a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lwz 3, -4(1)
184a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 4, 3, .LBB0_4
194a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.3:
204a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 4, 2, .LCPI0_0@toc@ha
214a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 0, .LCPI0_0@toc@l(4)
224a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB0_4: # %entry
234a8f2f2eSQiu Chaofan; NOVSX-NEXT:    xoris 3, 3, 32768
244a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lwz 4, -8(1)
254a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmplwi 3, 0
264a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB0_6
274a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.5: # %entry
284a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 0
294a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB0_6: # %entry
304a8f2f2eSQiu Chaofan; NOVSX-NEXT:    xoris 3, 4, 32768
314a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmplwi 3, 0
324a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB0_8
334a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.7: # %entry
344a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 1
354a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB0_8: # %entry
364a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 3, 2, .LCPI0_1@toc@ha
374a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 1, .LCPI0_1@toc@l(3)
384a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 0, 1
394a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB0_10
404a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.9: # %entry
414a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 0
424a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB0_10: # %entry
434a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 2
444a8f2f2eSQiu Chaofan; NOVSX-NEXT:    blr
454a8f2f2eSQiu Chaofan;
464a8f2f2eSQiu Chaofan; VSX-LABEL: f32_minimum:
474a8f2f2eSQiu Chaofan; VSX:       # %bb.0: # %entry
484a8f2f2eSQiu Chaofan; VSX-NEXT:    fcmpu 0, 1, 2
494a8f2f2eSQiu Chaofan; VSX-NEXT:    bc 12, 3, .LBB0_2
504a8f2f2eSQiu Chaofan; VSX-NEXT:  # %bb.1: # %entry
51*6a8d30b1SMatt Arsenault; VSX-NEXT:    xsmindp 1, 1, 2
52*6a8d30b1SMatt Arsenault; VSX-NEXT:    blr
534a8f2f2eSQiu Chaofan; VSX-NEXT:  .LBB0_2:
54*6a8d30b1SMatt Arsenault; VSX-NEXT:    addis 3, 2, .LCPI0_0@toc@ha
55*6a8d30b1SMatt Arsenault; VSX-NEXT:    lfs 1, .LCPI0_0@toc@l(3)
564a8f2f2eSQiu Chaofan; VSX-NEXT:    blr
574a8f2f2eSQiu Chaofan;
584a8f2f2eSQiu Chaofan; AIX-LABEL: f32_minimum:
594a8f2f2eSQiu Chaofan; AIX:       # %bb.0: # %entry
604a8f2f2eSQiu Chaofan; AIX-NEXT:    fcmpu 0, 1, 2
614a8f2f2eSQiu Chaofan; AIX-NEXT:    bc 12, 3, L..BB0_2
624a8f2f2eSQiu Chaofan; AIX-NEXT:  # %bb.1: # %entry
63*6a8d30b1SMatt Arsenault; AIX-NEXT:    xsmindp 1, 1, 2
64*6a8d30b1SMatt Arsenault; AIX-NEXT:    blr
654a8f2f2eSQiu Chaofan; AIX-NEXT:  L..BB0_2:
66*6a8d30b1SMatt Arsenault; AIX-NEXT:    ld 3, L..C0(2) # %const.0
67*6a8d30b1SMatt Arsenault; AIX-NEXT:    lfs 1, 0(3)
684a8f2f2eSQiu Chaofan; AIX-NEXT:    blr
694a8f2f2eSQiu Chaofanentry:
704a8f2f2eSQiu Chaofan  %m = call float @llvm.minimum.f32(float %a, float %b)
714a8f2f2eSQiu Chaofan  ret float %m
724a8f2f2eSQiu Chaofan}
734a8f2f2eSQiu Chaofan
744a8f2f2eSQiu Chaofandefine float @f32_maximum(float %a, float %b) {
754a8f2f2eSQiu Chaofan; NOVSX-LABEL: f32_maximum:
764a8f2f2eSQiu Chaofan; NOVSX:       # %bb.0: # %entry
774a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 1, 2
784a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 0, 1
794a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfs 2, -8(1)
804a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfs 1, -4(1)
814a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 1, .LBB1_2
824a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.1: # %entry
834a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 0, 2
844a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB1_2: # %entry
854a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lwz 3, -4(1)
864a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 4, 3, .LBB1_4
874a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.3:
884a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 4, 2, .LCPI1_0@toc@ha
894a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 0, .LCPI1_0@toc@l(4)
904a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB1_4: # %entry
914a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpwi 3, 0
924a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lwz 4, -8(1)
934a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB1_6
944a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.5: # %entry
954a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 0
964a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB1_6: # %entry
974a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpwi 4, 0
984a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB1_8
994a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.7: # %entry
1004a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 1
1014a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB1_8: # %entry
1024a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 3, 2, .LCPI1_1@toc@ha
1034a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 1, .LCPI1_1@toc@l(3)
1044a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 0, 1
1054a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB1_10
1064a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.9: # %entry
1074a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 0
1084a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB1_10: # %entry
1094a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 2
1104a8f2f2eSQiu Chaofan; NOVSX-NEXT:    blr
1114a8f2f2eSQiu Chaofan;
1124a8f2f2eSQiu Chaofan; VSX-LABEL: f32_maximum:
1134a8f2f2eSQiu Chaofan; VSX:       # %bb.0: # %entry
1144a8f2f2eSQiu Chaofan; VSX-NEXT:    fcmpu 0, 1, 2
1154a8f2f2eSQiu Chaofan; VSX-NEXT:    bc 12, 3, .LBB1_2
1164a8f2f2eSQiu Chaofan; VSX-NEXT:  # %bb.1: # %entry
117*6a8d30b1SMatt Arsenault; VSX-NEXT:    xsmaxdp 1, 1, 2
118*6a8d30b1SMatt Arsenault; VSX-NEXT:    blr
1194a8f2f2eSQiu Chaofan; VSX-NEXT:  .LBB1_2:
120*6a8d30b1SMatt Arsenault; VSX-NEXT:    addis 3, 2, .LCPI1_0@toc@ha
121*6a8d30b1SMatt Arsenault; VSX-NEXT:    lfs 1, .LCPI1_0@toc@l(3)
1224a8f2f2eSQiu Chaofan; VSX-NEXT:    blr
1234a8f2f2eSQiu Chaofan;
1244a8f2f2eSQiu Chaofan; AIX-LABEL: f32_maximum:
1254a8f2f2eSQiu Chaofan; AIX:       # %bb.0: # %entry
1264a8f2f2eSQiu Chaofan; AIX-NEXT:    fcmpu 0, 1, 2
1274a8f2f2eSQiu Chaofan; AIX-NEXT:    bc 12, 3, L..BB1_2
1284a8f2f2eSQiu Chaofan; AIX-NEXT:  # %bb.1: # %entry
129*6a8d30b1SMatt Arsenault; AIX-NEXT:    xsmaxdp 1, 1, 2
130*6a8d30b1SMatt Arsenault; AIX-NEXT:    blr
1314a8f2f2eSQiu Chaofan; AIX-NEXT:  L..BB1_2:
132*6a8d30b1SMatt Arsenault; AIX-NEXT:    ld 3, L..C1(2) # %const.0
133*6a8d30b1SMatt Arsenault; AIX-NEXT:    lfs 1, 0(3)
1344a8f2f2eSQiu Chaofan; AIX-NEXT:    blr
1354a8f2f2eSQiu Chaofanentry:
1364a8f2f2eSQiu Chaofan  %m = call float @llvm.maximum.f32(float %a, float %b)
1374a8f2f2eSQiu Chaofan  ret float %m
1384a8f2f2eSQiu Chaofan}
1394a8f2f2eSQiu Chaofan
1404a8f2f2eSQiu Chaofandefine double @f64_minimum(double %a, double %b) {
1414a8f2f2eSQiu Chaofan; NOVSX-LABEL: f64_minimum:
1424a8f2f2eSQiu Chaofan; NOVSX:       # %bb.0: # %entry
1434a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 1, 2
1444a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 0, 1
1454a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 2, -16(1)
1464a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 1, -8(1)
1474a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 0, .LBB2_2
1484a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.1: # %entry
1494a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 0, 2
1504a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB2_2: # %entry
1514a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 3, -8(1)
1524a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 4, 3, .LBB2_4
1534a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.3:
1544a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 4, 2, .LCPI2_0@toc@ha
1554a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 0, .LCPI2_0@toc@l(4)
1564a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB2_4: # %entry
1574a8f2f2eSQiu Chaofan; NOVSX-NEXT:    li 5, 1
1584a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 4, -16(1)
1594a8f2f2eSQiu Chaofan; NOVSX-NEXT:    rldic 5, 5, 63, 0
1604a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpd 3, 5
1614a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB2_6
1624a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.5: # %entry
1634a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 0
1644a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB2_6: # %entry
1654a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpd 4, 5
1664a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB2_8
1674a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.7: # %entry
1684a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 1
1694a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB2_8: # %entry
1704a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 3, 2, .LCPI2_1@toc@ha
1714a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 1, .LCPI2_1@toc@l(3)
1724a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 0, 1
1734a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB2_10
1744a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.9: # %entry
1754a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 0
1764a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB2_10: # %entry
1774a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 2
1784a8f2f2eSQiu Chaofan; NOVSX-NEXT:    blr
1794a8f2f2eSQiu Chaofan;
1804a8f2f2eSQiu Chaofan; VSX-LABEL: f64_minimum:
1814a8f2f2eSQiu Chaofan; VSX:       # %bb.0: # %entry
1824a8f2f2eSQiu Chaofan; VSX-NEXT:    fcmpu 0, 1, 2
1834a8f2f2eSQiu Chaofan; VSX-NEXT:    bc 12, 3, .LBB2_2
1844a8f2f2eSQiu Chaofan; VSX-NEXT:  # %bb.1: # %entry
185*6a8d30b1SMatt Arsenault; VSX-NEXT:    xsmindp 1, 1, 2
186*6a8d30b1SMatt Arsenault; VSX-NEXT:    blr
1874a8f2f2eSQiu Chaofan; VSX-NEXT:  .LBB2_2:
188*6a8d30b1SMatt Arsenault; VSX-NEXT:    addis 3, 2, .LCPI2_0@toc@ha
189*6a8d30b1SMatt Arsenault; VSX-NEXT:    lfs 1, .LCPI2_0@toc@l(3)
1904a8f2f2eSQiu Chaofan; VSX-NEXT:    blr
1914a8f2f2eSQiu Chaofan;
1924a8f2f2eSQiu Chaofan; AIX-LABEL: f64_minimum:
1934a8f2f2eSQiu Chaofan; AIX:       # %bb.0: # %entry
1944a8f2f2eSQiu Chaofan; AIX-NEXT:    fcmpu 0, 1, 2
1954a8f2f2eSQiu Chaofan; AIX-NEXT:    bc 12, 3, L..BB2_2
1964a8f2f2eSQiu Chaofan; AIX-NEXT:  # %bb.1: # %entry
197*6a8d30b1SMatt Arsenault; AIX-NEXT:    xsmindp 1, 1, 2
198*6a8d30b1SMatt Arsenault; AIX-NEXT:    blr
1994a8f2f2eSQiu Chaofan; AIX-NEXT:  L..BB2_2:
200*6a8d30b1SMatt Arsenault; AIX-NEXT:    ld 3, L..C2(2) # %const.0
201*6a8d30b1SMatt Arsenault; AIX-NEXT:    lfs 1, 0(3)
2024a8f2f2eSQiu Chaofan; AIX-NEXT:    blr
2034a8f2f2eSQiu Chaofanentry:
2044a8f2f2eSQiu Chaofan  %m = call double @llvm.minimum.f64(double %a, double %b)
2054a8f2f2eSQiu Chaofan  ret double %m
2064a8f2f2eSQiu Chaofan}
2074a8f2f2eSQiu Chaofan
2084a8f2f2eSQiu Chaofandefine double @f64_maximum(double %a, double %b) {
2094a8f2f2eSQiu Chaofan; NOVSX-LABEL: f64_maximum:
2104a8f2f2eSQiu Chaofan; NOVSX:       # %bb.0: # %entry
2114a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 1, 2
2124a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 0, 1
2134a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 2, -16(1)
2144a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 1, -8(1)
2154a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 1, .LBB3_2
2164a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.1: # %entry
2174a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 0, 2
2184a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB3_2: # %entry
2194a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 3, -8(1)
2204a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 4, 3, .LBB3_4
2214a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.3:
2224a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 4, 2, .LCPI3_0@toc@ha
2234a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 0, .LCPI3_0@toc@l(4)
2244a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB3_4: # %entry
2254a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpdi 3, 0
2264a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 4, -16(1)
2274a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB3_6
2284a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.5: # %entry
2294a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 0
2304a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB3_6: # %entry
2314a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpdi 4, 0
2324a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB3_8
2334a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.7: # %entry
2344a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 1
2354a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB3_8: # %entry
2364a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 3, 2, .LCPI3_1@toc@ha
2374a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 1, .LCPI3_1@toc@l(3)
2384a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 0, 1
2394a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB3_10
2404a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.9: # %entry
2414a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 0
2424a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB3_10: # %entry
2434a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 2
2444a8f2f2eSQiu Chaofan; NOVSX-NEXT:    blr
2454a8f2f2eSQiu Chaofan;
2464a8f2f2eSQiu Chaofan; VSX-LABEL: f64_maximum:
2474a8f2f2eSQiu Chaofan; VSX:       # %bb.0: # %entry
2484a8f2f2eSQiu Chaofan; VSX-NEXT:    fcmpu 0, 1, 2
2494a8f2f2eSQiu Chaofan; VSX-NEXT:    bc 12, 3, .LBB3_2
2504a8f2f2eSQiu Chaofan; VSX-NEXT:  # %bb.1: # %entry
251*6a8d30b1SMatt Arsenault; VSX-NEXT:    xsmaxdp 1, 1, 2
252*6a8d30b1SMatt Arsenault; VSX-NEXT:    blr
2534a8f2f2eSQiu Chaofan; VSX-NEXT:  .LBB3_2:
254*6a8d30b1SMatt Arsenault; VSX-NEXT:    addis 3, 2, .LCPI3_0@toc@ha
255*6a8d30b1SMatt Arsenault; VSX-NEXT:    lfs 1, .LCPI3_0@toc@l(3)
2564a8f2f2eSQiu Chaofan; VSX-NEXT:    blr
2574a8f2f2eSQiu Chaofan;
2584a8f2f2eSQiu Chaofan; AIX-LABEL: f64_maximum:
2594a8f2f2eSQiu Chaofan; AIX:       # %bb.0: # %entry
2604a8f2f2eSQiu Chaofan; AIX-NEXT:    fcmpu 0, 1, 2
2614a8f2f2eSQiu Chaofan; AIX-NEXT:    bc 12, 3, L..BB3_2
2624a8f2f2eSQiu Chaofan; AIX-NEXT:  # %bb.1: # %entry
263*6a8d30b1SMatt Arsenault; AIX-NEXT:    xsmaxdp 1, 1, 2
264*6a8d30b1SMatt Arsenault; AIX-NEXT:    blr
2654a8f2f2eSQiu Chaofan; AIX-NEXT:  L..BB3_2:
266*6a8d30b1SMatt Arsenault; AIX-NEXT:    ld 3, L..C3(2) # %const.0
267*6a8d30b1SMatt Arsenault; AIX-NEXT:    lfs 1, 0(3)
2684a8f2f2eSQiu Chaofan; AIX-NEXT:    blr
2694a8f2f2eSQiu Chaofanentry:
2704a8f2f2eSQiu Chaofan  %m = call double @llvm.maximum.f64(double %a, double %b)
2714a8f2f2eSQiu Chaofan  ret double %m
2724a8f2f2eSQiu Chaofan}
2734a8f2f2eSQiu Chaofan
2744a8f2f2eSQiu Chaofandefine <4 x float> @v4f32_minimum(<4 x float> %a, <4 x float> %b) {
2754a8f2f2eSQiu Chaofan; NOVSX-LABEL: v4f32_minimum:
2764a8f2f2eSQiu Chaofan; NOVSX:       # %bb.0: # %entry
2774a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpeqfp 0, 3, 3
2784a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpeqfp 1, 2, 2
2794a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 3, 2, .LCPI4_0@toc@ha
2804a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addi 3, 3, .LCPI4_0@toc@l
2814a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vnot 0, 0
2824a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vnot 1, 1
2834a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vspltisb 4, -1
2844a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpgtfp 5, 3, 2
2854a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vslw 4, 4, 4
2864a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vor 0, 1, 0
2874a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lvx 1, 0, 3
2884a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vsel 5, 3, 2, 5
2894a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vsel 5, 5, 1, 0
2904a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpequw 0, 2, 4
2914a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpequw 4, 3, 4
2924a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vsel 2, 5, 2, 0
2934a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vsel 2, 2, 3, 4
2944a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vxor 3, 3, 3
2954a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpeqfp 3, 5, 3
2964a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vsel 2, 5, 2, 3
2974a8f2f2eSQiu Chaofan; NOVSX-NEXT:    blr
2984a8f2f2eSQiu Chaofan;
2994a8f2f2eSQiu Chaofan; VSX-LABEL: v4f32_minimum:
3004a8f2f2eSQiu Chaofan; VSX:       # %bb.0: # %entry
3014a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqsp 1, 35, 35
3024a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqsp 2, 34, 34
3034a8f2f2eSQiu Chaofan; VSX-NEXT:    addis 3, 2, .LCPI4_0@toc@ha
3044a8f2f2eSQiu Chaofan; VSX-NEXT:    xxleqv 36, 36, 36
3054a8f2f2eSQiu Chaofan; VSX-NEXT:    xvminsp 0, 34, 35
3064a8f2f2eSQiu Chaofan; VSX-NEXT:    vslw 4, 4, 4
3074a8f2f2eSQiu Chaofan; VSX-NEXT:    addi 3, 3, .LCPI4_0@toc@l
3084a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlnor 1, 1, 1
3094a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlnor 2, 2, 2
3104a8f2f2eSQiu Chaofan; VSX-NEXT:    vcmpequw 5, 2, 4
3114a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlor 1, 2, 1
3124a8f2f2eSQiu Chaofan; VSX-NEXT:    lxvd2x 2, 0, 3
3134a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 0, 0, 2, 1
3144a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlxor 2, 2, 2
3154a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqsp 2, 0, 2
3164a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 1, 0, 34, 37
3174a8f2f2eSQiu Chaofan; VSX-NEXT:    vcmpequw 2, 3, 4
3184a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 1, 1, 35, 34
3194a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 34, 0, 1, 2
3204a8f2f2eSQiu Chaofan; VSX-NEXT:    blr
3214a8f2f2eSQiu Chaofan;
3224a8f2f2eSQiu Chaofan; AIX-LABEL: v4f32_minimum:
3234a8f2f2eSQiu Chaofan; AIX:       # %bb.0: # %entry
3244a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqsp 1, 35, 35
3254a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqsp 2, 34, 34
3264a8f2f2eSQiu Chaofan; AIX-NEXT:    ld 3, L..C4(2) # %const.0
3274a8f2f2eSQiu Chaofan; AIX-NEXT:    xxleqv 36, 36, 36
3284a8f2f2eSQiu Chaofan; AIX-NEXT:    xvminsp 0, 34, 35
3294a8f2f2eSQiu Chaofan; AIX-NEXT:    vslw 4, 4, 4
3304a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlnor 1, 1, 1
3314a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlnor 2, 2, 2
3324a8f2f2eSQiu Chaofan; AIX-NEXT:    vcmpequw 5, 2, 4
3334a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlor 1, 2, 1
3344a8f2f2eSQiu Chaofan; AIX-NEXT:    lxvw4x 2, 0, 3
3354a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 0, 0, 2, 1
3364a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlxor 2, 2, 2
3374a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqsp 2, 0, 2
3384a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 1, 0, 34, 37
3394a8f2f2eSQiu Chaofan; AIX-NEXT:    vcmpequw 2, 3, 4
3404a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 1, 1, 35, 34
3414a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 34, 0, 1, 2
3424a8f2f2eSQiu Chaofan; AIX-NEXT:    blr
3434a8f2f2eSQiu Chaofanentry:
3444a8f2f2eSQiu Chaofan  %m = call <4 x float> @llvm.minimum.v4f32(<4 x float> %a, <4 x float> %b)
3454a8f2f2eSQiu Chaofan  ret <4 x float> %m
3464a8f2f2eSQiu Chaofan}
3474a8f2f2eSQiu Chaofan
3484a8f2f2eSQiu Chaofandefine <4 x float> @v4f32_maximum(<4 x float> %a, <4 x float> %b) {
3494a8f2f2eSQiu Chaofan; NOVSX-LABEL: v4f32_maximum:
3504a8f2f2eSQiu Chaofan; NOVSX:       # %bb.0: # %entry
3514a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpeqfp 5, 3, 3
3524a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpeqfp 0, 2, 2
3534a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 3, 2, .LCPI5_0@toc@ha
3544a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addi 3, 3, .LCPI5_0@toc@l
3554a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vnot 5, 5
3564a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vnot 0, 0
3574a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpgtfp 4, 2, 3
3584a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vor 5, 0, 5
3594a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lvx 0, 0, 3
3604a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vsel 4, 3, 2, 4
3614a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vsel 4, 4, 0, 5
3624a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vxor 5, 5, 5
3634a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpequw 0, 2, 5
3644a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vsel 2, 4, 2, 0
3654a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpequw 0, 3, 5
3664a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vsel 2, 2, 3, 0
3674a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vcmpeqfp 3, 4, 5
3684a8f2f2eSQiu Chaofan; NOVSX-NEXT:    vsel 2, 4, 2, 3
3694a8f2f2eSQiu Chaofan; NOVSX-NEXT:    blr
3704a8f2f2eSQiu Chaofan;
3714a8f2f2eSQiu Chaofan; VSX-LABEL: v4f32_maximum:
3724a8f2f2eSQiu Chaofan; VSX:       # %bb.0: # %entry
3734a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqsp 1, 35, 35
3744a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqsp 2, 34, 34
3754a8f2f2eSQiu Chaofan; VSX-NEXT:    addis 3, 2, .LCPI5_0@toc@ha
3764a8f2f2eSQiu Chaofan; VSX-NEXT:    addi 3, 3, .LCPI5_0@toc@l
3774a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlnor 1, 1, 1
3784a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlnor 2, 2, 2
3794a8f2f2eSQiu Chaofan; VSX-NEXT:    xvmaxsp 0, 34, 35
3804a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlxor 36, 36, 36
3814a8f2f2eSQiu Chaofan; VSX-NEXT:    vcmpequw 5, 2, 4
3824a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlor 1, 2, 1
3834a8f2f2eSQiu Chaofan; VSX-NEXT:    lxvd2x 2, 0, 3
3844a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 0, 0, 2, 1
3854a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqsp 2, 0, 36
3864a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 1, 0, 34, 37
3874a8f2f2eSQiu Chaofan; VSX-NEXT:    vcmpequw 2, 3, 4
3884a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 1, 1, 35, 34
3894a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 34, 0, 1, 2
3904a8f2f2eSQiu Chaofan; VSX-NEXT:    blr
3914a8f2f2eSQiu Chaofan;
3924a8f2f2eSQiu Chaofan; AIX-LABEL: v4f32_maximum:
3934a8f2f2eSQiu Chaofan; AIX:       # %bb.0: # %entry
3944a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqsp 1, 35, 35
3954a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqsp 2, 34, 34
3964a8f2f2eSQiu Chaofan; AIX-NEXT:    ld 3, L..C5(2) # %const.0
3974a8f2f2eSQiu Chaofan; AIX-NEXT:    xvmaxsp 0, 34, 35
3984a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlxor 36, 36, 36
3994a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlnor 1, 1, 1
4004a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlnor 2, 2, 2
4014a8f2f2eSQiu Chaofan; AIX-NEXT:    vcmpequw 5, 2, 4
4024a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlor 1, 2, 1
4034a8f2f2eSQiu Chaofan; AIX-NEXT:    lxvw4x 2, 0, 3
4044a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 0, 0, 2, 1
4054a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqsp 2, 0, 36
4064a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 1, 0, 34, 37
4074a8f2f2eSQiu Chaofan; AIX-NEXT:    vcmpequw 2, 3, 4
4084a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 1, 1, 35, 34
4094a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 34, 0, 1, 2
4104a8f2f2eSQiu Chaofan; AIX-NEXT:    blr
4114a8f2f2eSQiu Chaofanentry:
4124a8f2f2eSQiu Chaofan  %m = call <4 x float> @llvm.maximum.v4f32(<4 x float> %a, <4 x float> %b)
4134a8f2f2eSQiu Chaofan  ret <4 x float> %m
4144a8f2f2eSQiu Chaofan}
4154a8f2f2eSQiu Chaofan
4164a8f2f2eSQiu Chaofandefine <2 x double> @v2f64_minimum(<2 x double> %a, <2 x double> %b) {
4174a8f2f2eSQiu Chaofan; NOVSX-LABEL: v2f64_minimum:
4184a8f2f2eSQiu Chaofan; NOVSX:       # %bb.0: # %entry
4194a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 1, 3
4204a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 6, 1
4214a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 4, -16(1)
4224a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 2, -8(1)
4234a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 3, -32(1)
4244a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 1, -24(1)
4254a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 0, .LBB6_2
4264a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.1: # %entry
4274a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 6, 3
4284a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_2: # %entry
4294a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 3, 2, .LCPI6_0@toc@ha
4304a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 4, -24(1)
4314a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 0, .LCPI6_0@toc@l(3)
4324a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 5, 0
4334a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 3, .LBB6_4
4344a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.3: # %entry
4354a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 5, 6
4364a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_4: # %entry
4374a8f2f2eSQiu Chaofan; NOVSX-NEXT:    li 3, 1
4384a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 5, -32(1)
4394a8f2f2eSQiu Chaofan; NOVSX-NEXT:    rldic 3, 3, 63, 0
4404a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpd 4, 3
4414a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB6_6
4424a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.5: # %entry
4434a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 5
4444a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_6: # %entry
4454a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpd 5, 3
4464a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB6_8
4474a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.7: # %entry
4484a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 3, 1
4494a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_8: # %entry
4504a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 4, 2, .LCPI6_1@toc@ha
4514a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 1, .LCPI6_1@toc@l(4)
4524a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 5, 1
4534a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB6_10
4544a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.9: # %entry
4554a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 3, 5
4564a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_10: # %entry
4574a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 2, 4
4584a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 5, 2
4594a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 0, .LBB6_12
4604a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.11: # %entry
4614a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 5, 4
4624a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_12: # %entry
4634a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 5, -8(1)
4644a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 3, .LBB6_14
4654a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.13: # %entry
4664a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 0, 5
4674a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_14: # %entry
4684a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpd 5, 3
4694a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 4, -16(1)
4704a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 4, 2, .LBB6_19
4714a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.15: # %entry
4724a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpd 4, 3
4734a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 4, 2, .LBB6_20
4744a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_16: # %entry
4754a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 0, 1
4764a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB6_18
4774a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_17: # %entry
4784a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 4, 0
4794a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_18: # %entry
4804a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 3
4814a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 4
4824a8f2f2eSQiu Chaofan; NOVSX-NEXT:    blr
4834a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_19: # %entry
4844a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 0
4854a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpd 4, 3
4864a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB6_16
4874a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB6_20: # %entry
4884a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 4, 2
4894a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 0, 1
4904a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 4, 2, .LBB6_17
4914a8f2f2eSQiu Chaofan; NOVSX-NEXT:    b .LBB6_18
4924a8f2f2eSQiu Chaofan;
4934a8f2f2eSQiu Chaofan; VSX-LABEL: v2f64_minimum:
4944a8f2f2eSQiu Chaofan; VSX:       # %bb.0: # %entry
4954a8f2f2eSQiu Chaofan; VSX-NEXT:    addis 3, 2, .LCPI6_0@toc@ha
4964a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqdp 36, 35, 35
4974a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqdp 37, 34, 34
4984a8f2f2eSQiu Chaofan; VSX-NEXT:    addi 3, 3, .LCPI6_0@toc@l
4994a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlnor 36, 36, 36
5004a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlnor 37, 37, 37
5014a8f2f2eSQiu Chaofan; VSX-NEXT:    xvmindp 0, 34, 35
5024a8f2f2eSQiu Chaofan; VSX-NEXT:    lxvd2x 2, 0, 3
5034a8f2f2eSQiu Chaofan; VSX-NEXT:    addis 3, 2, .LCPI6_1@toc@ha
5044a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlor 1, 37, 36
5054a8f2f2eSQiu Chaofan; VSX-NEXT:    addi 3, 3, .LCPI6_1@toc@l
5064a8f2f2eSQiu Chaofan; VSX-NEXT:    lxvd2x 36, 0, 3
5074a8f2f2eSQiu Chaofan; VSX-NEXT:    vcmpequd 5, 2, 4
5084a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 0, 0, 2, 1
5094a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlxor 2, 2, 2
5104a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 1, 0, 34, 37
5114a8f2f2eSQiu Chaofan; VSX-NEXT:    vcmpequd 2, 3, 4
5124a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 1, 1, 35, 34
5134a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqdp 34, 0, 2
5144a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 34, 0, 1, 34
5154a8f2f2eSQiu Chaofan; VSX-NEXT:    blr
5164a8f2f2eSQiu Chaofan;
5174a8f2f2eSQiu Chaofan; AIX-LABEL: v2f64_minimum:
5184a8f2f2eSQiu Chaofan; AIX:       # %bb.0: # %entry
5194a8f2f2eSQiu Chaofan; AIX-NEXT:    ld 3, L..C6(2) # %const.0
5204a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqdp 36, 35, 35
5214a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqdp 37, 34, 34
5224a8f2f2eSQiu Chaofan; AIX-NEXT:    lxvd2x 2, 0, 3
5234a8f2f2eSQiu Chaofan; AIX-NEXT:    ld 3, L..C7(2) # %const.1
5244a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlnor 36, 36, 36
5254a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlnor 37, 37, 37
5264a8f2f2eSQiu Chaofan; AIX-NEXT:    xvmindp 0, 34, 35
5274a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlor 1, 37, 36
5284a8f2f2eSQiu Chaofan; AIX-NEXT:    lxvd2x 36, 0, 3
5294a8f2f2eSQiu Chaofan; AIX-NEXT:    vcmpequd 5, 2, 4
5304a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 0, 0, 2, 1
5314a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlxor 2, 2, 2
5324a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 1, 0, 34, 37
5334a8f2f2eSQiu Chaofan; AIX-NEXT:    vcmpequd 2, 3, 4
5344a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 1, 1, 35, 34
5354a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqdp 34, 0, 2
5364a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 34, 0, 1, 34
5374a8f2f2eSQiu Chaofan; AIX-NEXT:    blr
5384a8f2f2eSQiu Chaofanentry:
5394a8f2f2eSQiu Chaofan  %m = call <2 x double> @llvm.minimum.v2f64(<2 x double> %a, <2 x double> %b)
5404a8f2f2eSQiu Chaofan  ret <2 x double> %m
5414a8f2f2eSQiu Chaofan}
5424a8f2f2eSQiu Chaofan
5434a8f2f2eSQiu Chaofandefine <2 x double> @v2f64_maximum(<2 x double> %a, <2 x double> %b) {
5444a8f2f2eSQiu Chaofan; NOVSX-LABEL: v2f64_maximum:
5454a8f2f2eSQiu Chaofan; NOVSX:       # %bb.0: # %entry
5464a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 1, 3
5474a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 6, 1
5484a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 4, -16(1)
5494a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 2, -8(1)
5504a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 3, -32(1)
5514a8f2f2eSQiu Chaofan; NOVSX-NEXT:    stfd 1, -24(1)
5524a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 1, .LBB7_2
5534a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.1: # %entry
5544a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 6, 3
5554a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_2: # %entry
5564a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 4, 2, .LCPI7_0@toc@ha
5574a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 3, -24(1)
5584a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 0, .LCPI7_0@toc@l(4)
5594a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 5, 0
5604a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 3, .LBB7_4
5614a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.3: # %entry
5624a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 5, 6
5634a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_4: # %entry
5644a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpdi 3, 0
5654a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 4, -32(1)
5664a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB7_6
5674a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.5: # %entry
5684a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 5
5694a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_6: # %entry
5704a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpdi 4, 0
5714a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB7_8
5724a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.7: # %entry
5734a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 3, 1
5744a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_8: # %entry
5754a8f2f2eSQiu Chaofan; NOVSX-NEXT:    addis 3, 2, .LCPI7_1@toc@ha
5764a8f2f2eSQiu Chaofan; NOVSX-NEXT:    lfs 1, .LCPI7_1@toc@l(3)
5774a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 5, 1
5784a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB7_10
5794a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.9: # %entry
5804a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 3, 5
5814a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_10: # %entry
5824a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 2, 4
5834a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 5, 2
5844a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 1, .LBB7_12
5854a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.11: # %entry
5864a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 5, 4
5874a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_12: # %entry
5884a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 4, -8(1)
5894a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 3, .LBB7_14
5904a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.13: # %entry
5914a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 0, 5
5924a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_14: # %entry
5934a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpdi 4, 0
5944a8f2f2eSQiu Chaofan; NOVSX-NEXT:    ld 3, -16(1)
5954a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 4, 2, .LBB7_19
5964a8f2f2eSQiu Chaofan; NOVSX-NEXT:  # %bb.15: # %entry
5974a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpdi 3, 0
5984a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 4, 2, .LBB7_20
5994a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_16: # %entry
6004a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 0, 1
6014a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB7_18
6024a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_17: # %entry
6034a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 4, 0
6044a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_18: # %entry
6054a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 1, 3
6064a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 4
6074a8f2f2eSQiu Chaofan; NOVSX-NEXT:    blr
6084a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_19: # %entry
6094a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 2, 0
6104a8f2f2eSQiu Chaofan; NOVSX-NEXT:    cmpdi 3, 0
6114a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 12, 2, .LBB7_16
6124a8f2f2eSQiu Chaofan; NOVSX-NEXT:  .LBB7_20: # %entry
6134a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fmr 4, 2
6144a8f2f2eSQiu Chaofan; NOVSX-NEXT:    fcmpu 0, 0, 1
6154a8f2f2eSQiu Chaofan; NOVSX-NEXT:    bc 4, 2, .LBB7_17
6164a8f2f2eSQiu Chaofan; NOVSX-NEXT:    b .LBB7_18
6174a8f2f2eSQiu Chaofan;
6184a8f2f2eSQiu Chaofan; VSX-LABEL: v2f64_maximum:
6194a8f2f2eSQiu Chaofan; VSX:       # %bb.0: # %entry
6204a8f2f2eSQiu Chaofan; VSX-NEXT:    addis 3, 2, .LCPI7_0@toc@ha
6214a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqdp 36, 35, 35
6224a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqdp 37, 34, 34
6234a8f2f2eSQiu Chaofan; VSX-NEXT:    addi 3, 3, .LCPI7_0@toc@l
6244a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlnor 36, 36, 36
6254a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlnor 37, 37, 37
6264a8f2f2eSQiu Chaofan; VSX-NEXT:    xvmaxdp 0, 34, 35
6274a8f2f2eSQiu Chaofan; VSX-NEXT:    lxvd2x 2, 0, 3
6284a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlor 1, 37, 36
6294a8f2f2eSQiu Chaofan; VSX-NEXT:    xxlxor 36, 36, 36
6304a8f2f2eSQiu Chaofan; VSX-NEXT:    vcmpequd 5, 2, 4
6314a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 0, 0, 2, 1
6324a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 1, 0, 34, 37
6334a8f2f2eSQiu Chaofan; VSX-NEXT:    vcmpequd 2, 3, 4
6344a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 1, 1, 35, 34
6354a8f2f2eSQiu Chaofan; VSX-NEXT:    xvcmpeqdp 34, 0, 36
6364a8f2f2eSQiu Chaofan; VSX-NEXT:    xxsel 34, 0, 1, 34
6374a8f2f2eSQiu Chaofan; VSX-NEXT:    blr
6384a8f2f2eSQiu Chaofan;
6394a8f2f2eSQiu Chaofan; AIX-LABEL: v2f64_maximum:
6404a8f2f2eSQiu Chaofan; AIX:       # %bb.0: # %entry
6414a8f2f2eSQiu Chaofan; AIX-NEXT:    ld 3, L..C8(2) # %const.0
6424a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqdp 36, 35, 35
6434a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqdp 37, 34, 34
6444a8f2f2eSQiu Chaofan; AIX-NEXT:    lxvd2x 2, 0, 3
6454a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlnor 36, 36, 36
6464a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlnor 37, 37, 37
6474a8f2f2eSQiu Chaofan; AIX-NEXT:    xvmaxdp 0, 34, 35
6484a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlor 1, 37, 36
6494a8f2f2eSQiu Chaofan; AIX-NEXT:    xxlxor 36, 36, 36
6504a8f2f2eSQiu Chaofan; AIX-NEXT:    vcmpequd 5, 2, 4
6514a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 0, 0, 2, 1
6524a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 1, 0, 34, 37
6534a8f2f2eSQiu Chaofan; AIX-NEXT:    vcmpequd 2, 3, 4
6544a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 1, 1, 35, 34
6554a8f2f2eSQiu Chaofan; AIX-NEXT:    xvcmpeqdp 34, 0, 36
6564a8f2f2eSQiu Chaofan; AIX-NEXT:    xxsel 34, 0, 1, 34
6574a8f2f2eSQiu Chaofan; AIX-NEXT:    blr
6584a8f2f2eSQiu Chaofanentry:
6594a8f2f2eSQiu Chaofan  %m = call <2 x double> @llvm.maximum.v2f64(<2 x double> %a, <2 x double> %b)
6604a8f2f2eSQiu Chaofan  ret <2 x double> %m
6614a8f2f2eSQiu Chaofan}
6624a8f2f2eSQiu Chaofan
6634a8f2f2eSQiu Chaofandeclare float @llvm.maximum.f32(float, float)
6644a8f2f2eSQiu Chaofandeclare double @llvm.maximum.f64(double, double)
6654a8f2f2eSQiu Chaofandeclare <4 x float> @llvm.maximum.v4f32(<4 x float>, <4 x float>)
6664a8f2f2eSQiu Chaofandeclare <2 x double> @llvm.maximum.v2f64(<2 x double>, <2 x double>)
6674a8f2f2eSQiu Chaofan
6684a8f2f2eSQiu Chaofandeclare float @llvm.minimum.f32(float, float)
6694a8f2f2eSQiu Chaofandeclare double @llvm.minimum.f64(double, double)
6704a8f2f2eSQiu Chaofandeclare <4 x float> @llvm.minimum.v4f32(<4 x float>, <4 x float>)
6714a8f2f2eSQiu Chaofandeclare <2 x double> @llvm.minimum.v2f64(<2 x double>, <2 x double>)
672