80 lines · plain
1; Check that 0.0 is not materialized for CSEL when comparing against it.2 3; RUN: llc -mtriple=aarch64-linux-gnu -o - < %s | FileCheck %s4 5define float @foeq(float %a, float %b) {6 %t = fcmp nsz oeq float %a, 0.07 %v = select i1 %t, float 0.0, float %b8 ret float %v9; CHECK-LABEL: foeq10; CHECK: fcmp [[R:s[0-9]+]], #0.011; CHECK-NEXT: fcsel {{s[0-9]+}}, [[R]], {{s[0-9]+}}, eq12}13 14define float @fueq(float %a, float %b) {15 %t = fcmp nsz ueq float %a, 0.016 %v = select i1 %t, float 0.0, float %b17 ret float %v18; CHECK-LABEL: fueq19; CHECK: fcmp [[R:s[0-9]+]], #0.020; CHECK-NEXT: fcsel {{s[0-9]+}}, [[R]], {{s[0-9]+}}, eq21; CHECK-NEXT: fcsel {{s[0-9]+}}, [[R]], {{s[0-9]+}}, vs22}23 24define float @fone(float %a, float %b) {25 %t = fcmp nsz one float %a, 0.026 %v = select i1 %t, float %b, float 0.027 ret float %v28; CHECK-LABEL: fone29; CHECK: fcmp [[R:s[0-9]+]], #0.030; CHECK-NEXT: fcsel {{s[0-9]+}}, {{s[0-9]+}}, [[R]], mi31; CHECK-NEXT: fcsel {{s[0-9]+}}, {{s[0-9]+}}, [[R]], gt32}33 34define float @fune(float %a, float %b) {35 %t = fcmp nsz une float %a, 0.036 %v = select i1 %t, float %b, float 0.037 ret float %v38; CHECK-LABEL: fune39; CHECK: fcmp [[R:s[0-9]+]], #0.040; CHECK-NEXT: fcsel {{s[0-9]+}}, {{s[0-9]+}}, [[R]], ne41}42 43define double @doeq(double %a, double %b) {44 %t = fcmp nsz oeq double %a, 0.045 %v = select i1 %t, double 0.0, double %b46 ret double %v47; CHECK-LABEL: doeq48; CHECK: fcmp [[R:d[0-9]+]], #0.049; CHECK-NEXT: fcsel {{d[0-9]+}}, [[R]], {{d[0-9]+}}, eq50}51 52define double @dueq(double %a, double %b) {53 %t = fcmp nsz ueq double %a, 0.054 %v = select i1 %t, double 0.0, double %b55 ret double %v56; CHECK-LABEL: dueq57; CHECK: fcmp [[R:d[0-9]+]], #0.058; CHECK-NEXT: fcsel {{d[0-9]+}}, [[R]], {{d[0-9]+}}, eq59; CHECK-NEXT: fcsel {{d[0-9]+}}, [[R]], {{d[0-9]+}}, vs60}61 62define double @done(double %a, double %b) {63 %t = fcmp nsz one double %a, 0.064 %v = select i1 %t, double %b, double 0.065 ret double %v66; CHECK-LABEL: done67; CHECK: fcmp [[R:d[0-9]+]], #0.068; CHECK-NEXT: fcsel {{d[0-9]+}}, {{d[0-9]+}}, [[R]], mi69; CHECK-NEXT: fcsel {{d[0-9]+}}, {{d[0-9]+}}, [[R]], gt70}71 72define double @dune(double %a, double %b) {73 %t = fcmp nsz une double %a, 0.074 %v = select i1 %t, double %b, double 0.075 ret double %v76; CHECK-LABEL: dune77; CHECK: fcmp [[R:d[0-9]+]], #0.078; CHECK-NEXT: fcsel {{d[0-9]+}}, {{d[0-9]+}}, [[R]], ne79}80