1; RUN: llc < %s -O0 -fast-isel-abort -verify-machineinstrs -mtriple=arm64-apple-darwin | FileCheck %s 2 3define zeroext i1 @fcmp_float1(float %a) nounwind ssp { 4entry: 5; CHECK-LABEL: @fcmp_float1 6; CHECK: fcmp s0, #0.0 7; CHECK: cset w{{[0-9]+}}, ne 8 %cmp = fcmp une float %a, 0.000000e+00 9 ret i1 %cmp 10} 11 12define zeroext i1 @fcmp_float2(float %a, float %b) nounwind ssp { 13entry: 14; CHECK-LABEL: @fcmp_float2 15; CHECK: fcmp s0, s1 16; CHECK: cset w{{[0-9]+}}, ne 17 %cmp = fcmp une float %a, %b 18 ret i1 %cmp 19} 20 21define zeroext i1 @fcmp_double1(double %a) nounwind ssp { 22entry: 23; CHECK-LABEL: @fcmp_double1 24; CHECK: fcmp d0, #0.0 25; CHECK: cset w{{[0-9]+}}, ne 26 %cmp = fcmp une double %a, 0.000000e+00 27 ret i1 %cmp 28} 29 30define zeroext i1 @fcmp_double2(double %a, double %b) nounwind ssp { 31entry: 32; CHECK-LABEL: @fcmp_double2 33; CHECK: fcmp d0, d1 34; CHECK: cset w{{[0-9]+}}, ne 35 %cmp = fcmp une double %a, %b 36 ret i1 %cmp 37} 38 39; Check each fcmp condition 40define float @fcmp_oeq(float %a, float %b) nounwind ssp { 41; CHECK-LABEL: @fcmp_oeq 42; CHECK: fcmp s0, s1 43; CHECK: cset w{{[0-9]+}}, eq 44 %cmp = fcmp oeq float %a, %b 45 %conv = uitofp i1 %cmp to float 46 ret float %conv 47} 48 49define float @fcmp_ogt(float %a, float %b) nounwind ssp { 50; CHECK-LABEL: @fcmp_ogt 51; CHECK: fcmp s0, s1 52; CHECK: cset w{{[0-9]+}}, gt 53 %cmp = fcmp ogt float %a, %b 54 %conv = uitofp i1 %cmp to float 55 ret float %conv 56} 57 58define float @fcmp_oge(float %a, float %b) nounwind ssp { 59; CHECK-LABEL: @fcmp_oge 60; CHECK: fcmp s0, s1 61; CHECK: cset w{{[0-9]+}}, ge 62 %cmp = fcmp oge float %a, %b 63 %conv = uitofp i1 %cmp to float 64 ret float %conv 65} 66 67define float @fcmp_olt(float %a, float %b) nounwind ssp { 68; CHECK-LABEL: @fcmp_olt 69; CHECK: fcmp s0, s1 70; CHECK: cset w{{[0-9]+}}, mi 71 %cmp = fcmp olt float %a, %b 72 %conv = uitofp i1 %cmp to float 73 ret float %conv 74} 75 76define float @fcmp_ole(float %a, float %b) nounwind ssp { 77; CHECK-LABEL: @fcmp_ole 78; CHECK: fcmp s0, s1 79; CHECK: cset w{{[0-9]+}}, ls 80 %cmp = fcmp ole float %a, %b 81 %conv = uitofp i1 %cmp to float 82 ret float %conv 83} 84 85define float @fcmp_ord(float %a, float %b) nounwind ssp { 86; CHECK-LABEL: @fcmp_ord 87; CHECK: fcmp s0, s1 88; CHECK: cset {{w[0-9]+}}, vc 89 %cmp = fcmp ord float %a, %b 90 %conv = uitofp i1 %cmp to float 91 ret float %conv 92} 93 94define float @fcmp_uno(float %a, float %b) nounwind ssp { 95; CHECK-LABEL: @fcmp_uno 96; CHECK: fcmp s0, s1 97; CHECK: cset {{w[0-9]+}}, vs 98 %cmp = fcmp uno float %a, %b 99 %conv = uitofp i1 %cmp to float 100 ret float %conv 101} 102 103define float @fcmp_ugt(float %a, float %b) nounwind ssp { 104; CHECK-LABEL: @fcmp_ugt 105; CHECK: fcmp s0, s1 106; CHECK: cset {{w[0-9]+}}, hi 107 %cmp = fcmp ugt float %a, %b 108 %conv = uitofp i1 %cmp to float 109 ret float %conv 110} 111 112define float @fcmp_uge(float %a, float %b) nounwind ssp { 113; CHECK-LABEL: @fcmp_uge 114; CHECK: fcmp s0, s1 115; CHECK: cset {{w[0-9]+}}, pl 116 %cmp = fcmp uge float %a, %b 117 %conv = uitofp i1 %cmp to float 118 ret float %conv 119} 120 121define float @fcmp_ult(float %a, float %b) nounwind ssp { 122; CHECK-LABEL: @fcmp_ult 123; CHECK: fcmp s0, s1 124; CHECK: cset {{w[0-9]+}}, lt 125 %cmp = fcmp ult float %a, %b 126 %conv = uitofp i1 %cmp to float 127 ret float %conv 128} 129 130define float @fcmp_ule(float %a, float %b) nounwind ssp { 131; CHECK-LABEL: @fcmp_ule 132; CHECK: fcmp s0, s1 133; CHECK: cset {{w[0-9]+}}, le 134 %cmp = fcmp ule float %a, %b 135 %conv = uitofp i1 %cmp to float 136 ret float %conv 137} 138 139define float @fcmp_une(float %a, float %b) nounwind ssp { 140; CHECK-LABEL: @fcmp_une 141; CHECK: fcmp s0, s1 142; CHECK: cset {{w[0-9]+}}, ne 143 %cmp = fcmp une float %a, %b 144 %conv = uitofp i1 %cmp to float 145 ret float %conv 146} 147