# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -o - -mtriple=aarch64-unknown-unknown -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s | FileCheck %s --check-prefixes=CHECK --- name: test_fcmp_canon body: | bb.1: ; CHECK-LABEL: name: test_fcmp_canon ; CHECK: %lhs:_(s64) = G_FCONSTANT double 1.000000e+00 ; CHECK-NEXT: %rhs:_(s64) = COPY $x0 ; CHECK-NEXT: %res:_(s32) = afn G_FCMP floatpred(ole), %rhs(s64), %lhs ; CHECK-NEXT: $w0 = COPY %res(s32) %lhs:_(s64) = G_FCONSTANT double 1.0 %rhs:_(s64) = COPY $x0 %res:_(s32) = afn G_FCMP floatpred(oge), %lhs(s64), %rhs $w0 = COPY %res(s32) ... --- name: test_fcmp_no_canon body: | bb.1: ; CHECK-LABEL: name: test_fcmp_no_canon ; CHECK: %lhs:_(s64) = COPY $x0 ; CHECK-NEXT: %rhs:_(s64) = G_FCONSTANT double 1.000000e+00 ; CHECK-NEXT: %res:_(s32) = afn G_FCMP floatpred(oge), %lhs(s64), %rhs ; CHECK-NEXT: $w0 = COPY %res(s32) %lhs:_(s64) = COPY $x0 %rhs:_(s64) = G_FCONSTANT double 1.0 %res:_(s32) = afn G_FCMP floatpred(oge), %lhs(s64), %rhs $w0 = COPY %res(s32) ... --- name: test_fcmp_no_canon_bv body: | bb.1: ; CHECK-LABEL: name: test_fcmp_no_canon_bv ; CHECK: %opaque1:_(s64) = COPY $x0 ; CHECK-NEXT: %opaque2:_(s64) = COPY $x0 ; CHECK-NEXT: %const1:_(s64) = G_FCONSTANT double 1.000000e+00 ; CHECK-NEXT: %const2:_(s64) = G_FCONSTANT double 2.000000e+00 ; CHECK-NEXT: %lhs:_(<2 x s64>) = G_BUILD_VECTOR %const1(s64), %opaque2(s64) ; CHECK-NEXT: %rhs:_(<2 x s64>) = G_BUILD_VECTOR %opaque1(s64), %const2(s64) ; CHECK-NEXT: %res:_(<2 x s32>) = afn G_FCMP floatpred(oge), %lhs(<2 x s64>), %rhs ; CHECK-NEXT: $x0 = COPY %res(<2 x s32>) %opaque1:_(s64) = COPY $x0 %opaque2:_(s64) = COPY $x0 %const1:_(s64) = G_FCONSTANT double 1.0 %const2:_(s64) = G_FCONSTANT double 2.0 %lhs:_(<2 x s64>) = G_BUILD_VECTOR %const1(s64), %opaque2(s64) %rhs:_(<2 x s64>) = G_BUILD_VECTOR %opaque1(s64), %const2(s64) %res:_(<2 x s32>) = afn G_FCMP floatpred(oge), %lhs(<2 x s64>), %rhs $x0 = COPY %res(<2 x s32>) ... --- name: test_fcmp_canon_bv body: | bb.1: ; CHECK-LABEL: name: test_fcmp_canon_bv ; CHECK: %opaque1:_(s64) = COPY $x0 ; CHECK-NEXT: %opaque2:_(s64) = COPY $x0 ; CHECK-NEXT: %const1:_(s64) = G_FCONSTANT double 1.000000e+00 ; CHECK-NEXT: %const2:_(s64) = G_FCONSTANT double 2.000000e+00 ; CHECK-NEXT: %lhs:_(<2 x s64>) = G_BUILD_VECTOR %const1(s64), %const2(s64) ; CHECK-NEXT: %rhs:_(<2 x s64>) = G_BUILD_VECTOR %opaque1(s64), %opaque2(s64) ; CHECK-NEXT: %res:_(<2 x s32>) = afn G_FCMP floatpred(ole), %rhs(<2 x s64>), %lhs ; CHECK-NEXT: $x0 = COPY %res(<2 x s32>) %opaque1:_(s64) = COPY $x0 %opaque2:_(s64) = COPY $x0 %const1:_(s64) = G_FCONSTANT double 1.0 %const2:_(s64) = G_FCONSTANT double 2.0 %lhs:_(<2 x s64>) = G_BUILD_VECTOR %const1(s64), %const2(s64) %rhs:_(<2 x s64>) = G_BUILD_VECTOR %opaque1(s64), %opaque2(s64) %res:_(<2 x s32>) = afn G_FCMP floatpred(oge), %lhs(<2 x s64>), %rhs $x0 = COPY %res(<2 x s32>) ... --- name: test_fcmp_canon_splat body: | bb.1: ; CHECK-LABEL: name: test_fcmp_canon_splat ; CHECK: %const:_(s64) = G_FCONSTANT double 1.000000e+00 ; CHECK-NEXT: %lhs:_() = G_SPLAT_VECTOR %const(s64) ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1 ; CHECK-NEXT: %rhs:_() = G_SPLAT_VECTOR [[COPY]](s64) ; CHECK-NEXT: %res:_() = afn G_FCMP floatpred(ole), %rhs(), %lhs ; CHECK-NEXT: %z:_() = G_ZEXT %res() ; CHECK-NEXT: $z0 = COPY %z() %const:_(s64) = G_FCONSTANT double 1.0 %lhs:_() = G_SPLAT_VECTOR %const:_(s64) %1:_(s64) = COPY $x1 %rhs:_() = G_SPLAT_VECTOR %1:_(s64) %res:_() = afn G_FCMP floatpred(oge), %lhs(), %rhs %z:_() = G_ZEXT %res $z0 = COPY %z() ... --- name: test_fcmp_const body: | bb.1: ; CHECK-LABEL: name: test_fcmp_const ; CHECK: %res:_(s32) = G_CONSTANT i32 0 ; CHECK-NEXT: $w0 = COPY %res(s32) %lhs:_(s64) = G_FCONSTANT double 1.0 %rhs:_(s64) = G_FCONSTANT double 2.0 %res:_(s32) = afn G_FCMP floatpred(oge), %lhs(s64), %rhs $w0 = COPY %res(s32) ... --- name: test_fcmp_const_other body: | bb.1: ; CHECK-LABEL: name: test_fcmp_const_other ; CHECK: %res:_(s32) = G_CONSTANT i32 1 ; CHECK-NEXT: $w0 = COPY %res(s32) %lhs:_(s64) = G_FCONSTANT double 2.0 %rhs:_(s64) = G_FCONSTANT double 1.0 %res:_(s32) = afn G_FCMP floatpred(oge), %lhs(s64), %rhs $w0 = COPY %res(s32) ... --- name: test_fcmp_no_same_semantics body: | bb.1: ; CHECK-LABEL: name: test_fcmp_no_same_semantics ; CHECK: %res:_(s32) = G_CONSTANT i32 0 ; CHECK-NEXT: $w0 = COPY %res(s32) %lhs:_(s64) = G_FCONSTANT double 2.0 %fabs:_(s64) = G_FABS %lhs %trunc:_(s32) = G_TRUNC %fabs(s64) %rhs:_(s32) = G_FCONSTANT float 1.0 %res:_(s32) = G_FCMP floatpred(oge), %trunc(s32), %rhs $w0 = COPY %res(s32) ...