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 \ 5; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s 6; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names --enable-unsafe-fp-math \ 7; RUN: -verify-machineinstrs --enable-no-signed-zeros-fp-math \ 8; RUN: --enable-no-nans-fp-math \ 9; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s 10; RUN: llc -mcpu=pwr9 -ppc-asm-full-reg-names -verify-machineinstrs \ 11; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \ 12; RUN: --check-prefix=NO-FAST-P9 13; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names -verify-machineinstrs \ 14; RUN: -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s \ 15; RUN: --check-prefix=NO-FAST-P8 16define dso_local float @testfmax(float %a, float %b) local_unnamed_addr { 17; CHECK-LABEL: testfmax: 18; CHECK: # %bb.0: # %entry 19; CHECK-NEXT: xsmaxdp f1, f1, f2 20; CHECK-NEXT: blr 21; 22; NO-FAST-P9-LABEL: testfmax: 23; NO-FAST-P9: # %bb.0: # %entry 24; NO-FAST-P9-NEXT: xsmaxcdp f1, f1, f2 25; NO-FAST-P9-NEXT: blr 26; 27; NO-FAST-P8-LABEL: testfmax: 28; NO-FAST-P8: # %bb.0: # %entry 29; NO-FAST-P8-NEXT: fcmpu cr0, f1, f2 30; NO-FAST-P8-NEXT: bgtlr cr0 31; NO-FAST-P8-NEXT: # %bb.1: # %entry 32; NO-FAST-P8-NEXT: fmr f1, f2 33; NO-FAST-P8-NEXT: blr 34entry: 35 %cmp = fcmp ogt float %a, %b 36 %cond = select i1 %cmp, float %a, float %b 37 ret float %cond 38} 39 40define dso_local double @testdmax(double %a, double %b) local_unnamed_addr { 41; CHECK-LABEL: testdmax: 42; CHECK: # %bb.0: # %entry 43; CHECK-NEXT: xsmaxdp f1, f1, f2 44; CHECK-NEXT: blr 45; 46; NO-FAST-P9-LABEL: testdmax: 47; NO-FAST-P9: # %bb.0: # %entry 48; NO-FAST-P9-NEXT: xsmaxcdp f1, f1, f2 49; NO-FAST-P9-NEXT: blr 50; 51; NO-FAST-P8-LABEL: testdmax: 52; NO-FAST-P8: # %bb.0: # %entry 53; NO-FAST-P8-NEXT: xscmpudp cr0, f1, f2 54; NO-FAST-P8-NEXT: bgtlr cr0 55; NO-FAST-P8-NEXT: # %bb.1: # %entry 56; NO-FAST-P8-NEXT: fmr f1, f2 57; NO-FAST-P8-NEXT: blr 58entry: 59 %cmp = fcmp ogt double %a, %b 60 %cond = select i1 %cmp, double %a, double %b 61 ret double %cond 62} 63 64define dso_local float @testfmin(float %a, float %b) local_unnamed_addr { 65; CHECK-LABEL: testfmin: 66; CHECK: # %bb.0: # %entry 67; CHECK-NEXT: xsmindp f1, f1, f2 68; CHECK-NEXT: blr 69; 70; NO-FAST-P9-LABEL: testfmin: 71; NO-FAST-P9: # %bb.0: # %entry 72; NO-FAST-P9-NEXT: xsmincdp f1, f1, f2 73; NO-FAST-P9-NEXT: blr 74; 75; NO-FAST-P8-LABEL: testfmin: 76; NO-FAST-P8: # %bb.0: # %entry 77; NO-FAST-P8-NEXT: fcmpu cr0, f1, f2 78; NO-FAST-P8-NEXT: bltlr cr0 79; NO-FAST-P8-NEXT: # %bb.1: # %entry 80; NO-FAST-P8-NEXT: fmr f1, f2 81; NO-FAST-P8-NEXT: blr 82entry: 83 %cmp = fcmp olt float %a, %b 84 %cond = select i1 %cmp, float %a, float %b 85 ret float %cond 86} 87 88define dso_local double @testdmin(double %a, double %b) local_unnamed_addr { 89; CHECK-LABEL: testdmin: 90; CHECK: # %bb.0: # %entry 91; CHECK-NEXT: xsmindp f1, f1, f2 92; CHECK-NEXT: blr 93; 94; NO-FAST-P9-LABEL: testdmin: 95; NO-FAST-P9: # %bb.0: # %entry 96; NO-FAST-P9-NEXT: xsmincdp f1, f1, f2 97; NO-FAST-P9-NEXT: blr 98; 99; NO-FAST-P8-LABEL: testdmin: 100; NO-FAST-P8: # %bb.0: # %entry 101; NO-FAST-P8-NEXT: xscmpudp cr0, f1, f2 102; NO-FAST-P8-NEXT: bltlr cr0 103; NO-FAST-P8-NEXT: # %bb.1: # %entry 104; NO-FAST-P8-NEXT: fmr f1, f2 105; NO-FAST-P8-NEXT: blr 106entry: 107 %cmp = fcmp olt double %a, %b 108 %cond = select i1 %cmp, double %a, double %b 109 ret double %cond 110} 111 112define dso_local float @testfmax_fast(float %a, float %b) local_unnamed_addr { 113; CHECK-LABEL: testfmax_fast: 114; CHECK: # %bb.0: # %entry 115; CHECK-NEXT: xsmaxdp f1, f1, f2 116; CHECK-NEXT: blr 117; 118; NO-FAST-P9-LABEL: testfmax_fast: 119; NO-FAST-P9: # %bb.0: # %entry 120; NO-FAST-P9-NEXT: xsmaxcdp f1, f1, f2 121; NO-FAST-P9-NEXT: blr 122; 123; NO-FAST-P8-LABEL: testfmax_fast: 124; NO-FAST-P8: # %bb.0: # %entry 125; NO-FAST-P8-NEXT: xssubsp f0, f2, f1 126; NO-FAST-P8-NEXT: fsel f1, f0, f2, f1 127; NO-FAST-P8-NEXT: blr 128entry: 129 %cmp = fcmp nnan ninf ogt float %a, %b 130 %cond = select i1 %cmp, float %a, float %b 131 ret float %cond 132} 133define dso_local double @testdmax_fast(double %a, double %b) local_unnamed_addr { 134; CHECK-LABEL: testdmax_fast: 135; CHECK: # %bb.0: # %entry 136; CHECK-NEXT: xsmaxdp f1, f1, f2 137; CHECK-NEXT: blr 138; 139; NO-FAST-P9-LABEL: testdmax_fast: 140; NO-FAST-P9: # %bb.0: # %entry 141; NO-FAST-P9-NEXT: xsmaxcdp f1, f1, f2 142; NO-FAST-P9-NEXT: blr 143; 144; NO-FAST-P8-LABEL: testdmax_fast: 145; NO-FAST-P8: # %bb.0: # %entry 146; NO-FAST-P8-NEXT: xssubdp f0, f2, f1 147; NO-FAST-P8-NEXT: fsel f1, f0, f2, f1 148; NO-FAST-P8-NEXT: blr 149entry: 150 %cmp = fcmp nnan ninf ogt double %a, %b 151 %cond = select i1 %cmp, double %a, double %b 152 ret double %cond 153} 154define dso_local float @testfmin_fast(float %a, float %b) local_unnamed_addr { 155; CHECK-LABEL: testfmin_fast: 156; CHECK: # %bb.0: # %entry 157; CHECK-NEXT: xsmindp f1, f1, f2 158; CHECK-NEXT: blr 159; 160; NO-FAST-P9-LABEL: testfmin_fast: 161; NO-FAST-P9: # %bb.0: # %entry 162; NO-FAST-P9-NEXT: xsmincdp f1, f1, f2 163; NO-FAST-P9-NEXT: blr 164; 165; NO-FAST-P8-LABEL: testfmin_fast: 166; NO-FAST-P8: # %bb.0: # %entry 167; NO-FAST-P8-NEXT: xssubsp f0, f1, f2 168; NO-FAST-P8-NEXT: fsel f1, f0, f2, f1 169; NO-FAST-P8-NEXT: blr 170entry: 171 %cmp = fcmp nnan ninf olt float %a, %b 172 %cond = select i1 %cmp, float %a, float %b 173 ret float %cond 174} 175define dso_local double @testdmin_fast(double %a, double %b) local_unnamed_addr { 176; CHECK-LABEL: testdmin_fast: 177; CHECK: # %bb.0: # %entry 178; CHECK-NEXT: xsmindp f1, f1, f2 179; CHECK-NEXT: blr 180; 181; NO-FAST-P9-LABEL: testdmin_fast: 182; NO-FAST-P9: # %bb.0: # %entry 183; NO-FAST-P9-NEXT: xsmincdp f1, f1, f2 184; NO-FAST-P9-NEXT: blr 185; 186; NO-FAST-P8-LABEL: testdmin_fast: 187; NO-FAST-P8: # %bb.0: # %entry 188; NO-FAST-P8-NEXT: xssubdp f0, f1, f2 189; NO-FAST-P8-NEXT: fsel f1, f0, f2, f1 190; NO-FAST-P8-NEXT: blr 191entry: 192 %cmp = fcmp nnan ninf olt double %a, %b 193 %cond = select i1 %cmp, double %a, double %b 194 ret double %cond 195} 196