| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,146 @@ | ||
| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | ||
| # RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s | ||
| --- | ||
| name: sext_of_fcmp_v4s32 | ||
| legalized: true | ||
| liveins: | ||
| - { reg: '$q0' } | ||
| - { reg: '$x0' } | ||
| - { reg: '$x1' } | ||
| - { reg: '$x2' } | ||
| body: | | ||
| bb.1: | ||
| liveins: $q0, $x0, $x1, $x2 | ||
| ; CHECK-LABEL: name: sext_of_fcmp_v4s32 | ||
| ; CHECK: liveins: $q0, $x0, $x1, $x2 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0 | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 6.000000e+00 | ||
| ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) | ||
| ; CHECK-NEXT: [[FCMP:%[0-9]+]]:_(<4 x s32>) = G_FCMP floatpred(ogt), [[COPY]](<4 x s32>), [[BUILD_VECTOR]] | ||
| ; CHECK-NEXT: $q0 = COPY [[FCMP]](<4 x s32>) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $q0 | ||
| %0:_(<4 x s32>) = COPY $q0 | ||
| %6:_(s32) = G_FCONSTANT float 6.000000e+00 | ||
| %5:_(<4 x s32>) = G_BUILD_VECTOR %6(s32), %6(s32), %6(s32), %6(s32) | ||
| %17:_(<4 x s32>) = G_FCMP floatpred(ogt), %0(<4 x s32>), %5 | ||
| %19:_(s32) = G_CONSTANT i32 31 | ||
| %20:_(<4 x s32>) = G_BUILD_VECTOR %19(s32), %19(s32), %19(s32), %19(s32) | ||
| %18:_(<4 x s32>) = G_SHL %17, %20(<4 x s32>) | ||
| %11:_(<4 x s32>) = G_ASHR %18, %20(<4 x s32>) | ||
| $q0 = COPY %11(<4 x s32>) | ||
| RET_ReallyLR implicit $q0 | ||
| ... | ||
| --- | ||
| name: sext_of_icmp_v4s32 | ||
| legalized: true | ||
| liveins: | ||
| - { reg: '$q0' } | ||
| - { reg: '$x0' } | ||
| - { reg: '$x1' } | ||
| - { reg: '$x2' } | ||
| body: | | ||
| bb.1: | ||
| liveins: $q0, $x0, $x1, $x2 | ||
| ; CHECK-LABEL: name: sext_of_icmp_v4s32 | ||
| ; CHECK: liveins: $q0, $x0, $x1, $x2 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0 | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 42 | ||
| ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) | ||
| ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<4 x s32>) = G_ICMP intpred(eq), [[COPY]](<4 x s32>), [[BUILD_VECTOR]] | ||
| ; CHECK-NEXT: $q0 = COPY [[ICMP]](<4 x s32>) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $q0 | ||
| %0:_(<4 x s32>) = COPY $q0 | ||
| %6:_(s32) = G_CONSTANT i32 42 | ||
| %5:_(<4 x s32>) = G_BUILD_VECTOR %6(s32), %6(s32), %6(s32), %6(s32) | ||
| %17:_(<4 x s32>) = G_ICMP intpred(eq), %0(<4 x s32>), %5 | ||
| %19:_(s32) = G_CONSTANT i32 31 | ||
| %20:_(<4 x s32>) = G_BUILD_VECTOR %19(s32), %19(s32), %19(s32), %19(s32) | ||
| %18:_(<4 x s32>) = G_SHL %17, %20(<4 x s32>) | ||
| %11:_(<4 x s32>) = G_ASHR %18, %20(<4 x s32>) | ||
| $q0 = COPY %11(<4 x s32>) | ||
| RET_ReallyLR implicit $q0 | ||
| ... | ||
| --- | ||
| name: sext_of_fcmp_wrong_shift | ||
| legalized: true | ||
| liveins: | ||
| - { reg: '$q0' } | ||
| - { reg: '$x0' } | ||
| - { reg: '$x1' } | ||
| - { reg: '$x2' } | ||
| body: | | ||
| bb.1: | ||
| liveins: $q0, $x0, $x1, $x2 | ||
| ; CHECK-LABEL: name: sext_of_fcmp_wrong_shift | ||
| ; CHECK: liveins: $q0, $x0, $x1, $x2 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0 | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 6.000000e+00 | ||
| ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) | ||
| ; CHECK-NEXT: [[FCMP:%[0-9]+]]:_(<4 x s32>) = G_FCMP floatpred(ogt), [[COPY]](<4 x s32>), [[BUILD_VECTOR]] | ||
| ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 29 | ||
| ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C1]](s32), [[C1]](s32), [[C1]](s32) | ||
| ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(<4 x s32>) = G_SHL [[FCMP]], [[BUILD_VECTOR1]](<4 x s32>) | ||
| ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[SHL]], [[BUILD_VECTOR1]](<4 x s32>) | ||
| ; CHECK-NEXT: $q0 = COPY [[ASHR]](<4 x s32>) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $q0 | ||
| %0:_(<4 x s32>) = COPY $q0 | ||
| %6:_(s32) = G_FCONSTANT float 6.000000e+00 | ||
| %5:_(<4 x s32>) = G_BUILD_VECTOR %6(s32), %6(s32), %6(s32), %6(s32) | ||
| %17:_(<4 x s32>) = G_FCMP floatpred(ogt), %0(<4 x s32>), %5 | ||
| %19:_(s32) = G_CONSTANT i32 29 | ||
| %20:_(<4 x s32>) = G_BUILD_VECTOR %19(s32), %19(s32), %19(s32), %19(s32) | ||
| %18:_(<4 x s32>) = G_SHL %17, %20(<4 x s32>) | ||
| %11:_(<4 x s32>) = G_ASHR %18, %20(<4 x s32>) | ||
| $q0 = COPY %11(<4 x s32>) | ||
| RET_ReallyLR implicit $q0 | ||
| ... | ||
| --- | ||
| name: sext_of_fcmp_mismatch_shift | ||
| legalized: true | ||
| liveins: | ||
| - { reg: '$q0' } | ||
| - { reg: '$x0' } | ||
| - { reg: '$x1' } | ||
| - { reg: '$x2' } | ||
| body: | | ||
| bb.1: | ||
| liveins: $q0, $x0, $x1, $x2 | ||
| ; CHECK-LABEL: name: sext_of_fcmp_mismatch_shift | ||
| ; CHECK: liveins: $q0, $x0, $x1, $x2 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0 | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 6.000000e+00 | ||
| ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) | ||
| ; CHECK-NEXT: [[FCMP:%[0-9]+]]:_(<4 x s32>) = G_FCMP floatpred(ogt), [[COPY]](<4 x s32>), [[BUILD_VECTOR]] | ||
| ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 29 | ||
| ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C1]](s32), [[C1]](s32), [[C1]](s32) | ||
| ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 31 | ||
| ; CHECK-NEXT: %cstv2:_(<4 x s32>) = G_BUILD_VECTOR %cst2(s32), %cst2(s32), %cst2(s32), %cst2(s32) | ||
| ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(<4 x s32>) = G_SHL [[FCMP]], [[BUILD_VECTOR1]](<4 x s32>) | ||
| ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[SHL]], %cstv2(<4 x s32>) | ||
| ; CHECK-NEXT: $q0 = COPY [[ASHR]](<4 x s32>) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $q0 | ||
| %0:_(<4 x s32>) = COPY $q0 | ||
| %6:_(s32) = G_FCONSTANT float 6.000000e+00 | ||
| %5:_(<4 x s32>) = G_BUILD_VECTOR %6(s32), %6(s32), %6(s32), %6(s32) | ||
| %17:_(<4 x s32>) = G_FCMP floatpred(ogt), %0(<4 x s32>), %5 | ||
| %19:_(s32) = G_CONSTANT i32 29 | ||
| %20:_(<4 x s32>) = G_BUILD_VECTOR %19(s32), %19(s32), %19(s32), %19(s32) | ||
| %cst2:_(s32) = G_CONSTANT i32 31 | ||
| %cstv2:_(<4 x s32>) = G_BUILD_VECTOR %cst2(s32), %cst2(s32), %cst2(s32), %cst2(s32) | ||
| %18:_(<4 x s32>) = G_SHL %17, %20(<4 x s32>) | ||
| %11:_(<4 x s32>) = G_ASHR %18, %cstv2(<4 x s32>) | ||
| $q0 = COPY %11(<4 x s32>) | ||
| RET_ReallyLR implicit $q0 | ||
| ... |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,188 @@ | ||
| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py | ||
| # RUN: llc -mtriple aarch64 -mattr=+fullfp16 -run-pass=aarch64-prelegalizer-combiner -global-isel -verify-machineinstrs %s -o - | FileCheck %s | ||
| --- | ||
| name: test_s16 | ||
| body: | | ||
| bb.0: | ||
| liveins: $h0 | ||
| ; CHECK-LABEL: name: test_s16 | ||
| ; CHECK: liveins: $h0 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $h0 | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH0000 | ||
| ; CHECK-NEXT: [[FMAXIMUM:%[0-9]+]]:_(s16) = G_FMAXIMUM [[C]], [[COPY]] | ||
| ; CHECK-NEXT: $h0 = COPY [[FMAXIMUM]](s16) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $h0 | ||
| %0:_(s16) = COPY $h0 | ||
| %1:_(s16) = G_FCONSTANT half 0xH0000 | ||
| %2:_(s1) = G_FCMP floatpred(olt), %0(s16), %1 | ||
| %3:_(s16) = G_SELECT %2(s1), %1, %0 | ||
| $h0 = COPY %3(s16) | ||
| RET_ReallyLR implicit $h0 | ||
| ... | ||
| --- | ||
| name: test_s32 | ||
| body: | | ||
| bb.0: | ||
| liveins: $s0 | ||
| ; CHECK-LABEL: name: test_s32 | ||
| ; CHECK: liveins: $s0 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0.000000e+00 | ||
| ; CHECK-NEXT: [[FMAXIMUM:%[0-9]+]]:_(s32) = G_FMAXIMUM [[C]], [[COPY]] | ||
| ; CHECK-NEXT: $s0 = COPY [[FMAXIMUM]](s32) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $s0 | ||
| %0:_(s32) = COPY $s0 | ||
| %1:_(s32) = G_FCONSTANT float 0.000000e+00 | ||
| %2:_(s1) = G_FCMP floatpred(olt), %0(s32), %1 | ||
| %3:_(s32) = G_SELECT %2(s1), %1, %0 | ||
| $s0 = COPY %3(s32) | ||
| RET_ReallyLR implicit $s0 | ||
| ... | ||
| --- | ||
| name: test_s64 | ||
| body: | | ||
| bb.0: | ||
| liveins: $d0 | ||
| ; CHECK-LABEL: name: test_s64 | ||
| ; CHECK: liveins: $d0 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d0 | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00 | ||
| ; CHECK-NEXT: [[FMAXIMUM:%[0-9]+]]:_(s64) = G_FMAXIMUM [[C]], [[COPY]] | ||
| ; CHECK-NEXT: $d0 = COPY [[FMAXIMUM]](s64) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $d0 | ||
| %0:_(s64) = COPY $d0 | ||
| %1:_(s64) = G_FCONSTANT double 0.000000e+00 | ||
| %2:_(s1) = G_FCMP floatpred(olt), %0(s64), %1 | ||
| %3:_(s64) = G_SELECT %2(s1), %1, %0 | ||
| $d0 = COPY %3(s64) | ||
| RET_ReallyLR implicit $d0 | ||
| ... | ||
| --- | ||
| name: test_s64_fmin | ||
| body: | | ||
| bb.0: | ||
| liveins: $d0 | ||
| ; CHECK-LABEL: name: test_s64_fmin | ||
| ; CHECK: liveins: $d0 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d0 | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00 | ||
| ; CHECK-NEXT: [[FMINIMUM:%[0-9]+]]:_(s64) = G_FMINIMUM [[C]], [[COPY]] | ||
| ; CHECK-NEXT: $d0 = COPY [[FMINIMUM]](s64) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $d0 | ||
| %0:_(s64) = COPY $d0 | ||
| %1:_(s64) = G_FCONSTANT double 0.000000e+00 | ||
| %2:_(s1) = G_FCMP floatpred(ogt), %0(s64), %1 | ||
| %3:_(s64) = G_SELECT %2(s1), %1, %0 | ||
| $d0 = COPY %3(s64) | ||
| RET_ReallyLR implicit $d0 | ||
| ... | ||
| --- | ||
| name: test_v8s16 | ||
| body: | | ||
| bb.0: | ||
| liveins: $q0 | ||
| ; CHECK-LABEL: name: test_v8s16 | ||
| ; CHECK: liveins: $q0 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0 | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_FCONSTANT half 0xH0000 | ||
| ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16) | ||
| ; CHECK-NEXT: [[FMAXIMUM:%[0-9]+]]:_(<8 x s16>) = G_FMAXIMUM [[BUILD_VECTOR]], [[COPY]] | ||
| ; CHECK-NEXT: $q0 = COPY [[FMAXIMUM]](<8 x s16>) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $q0 | ||
| %0:_(<8 x s16>) = COPY $q0 | ||
| %2:_(s16) = G_FCONSTANT half 0xH0000 | ||
| %1:_(<8 x s16>) = G_BUILD_VECTOR %2(s16), %2(s16), %2(s16), %2(s16), %2(s16), %2(s16), %2(s16), %2(s16) | ||
| %3:_(<8 x s1>) = G_FCMP floatpred(olt), %0(<8 x s16>), %1 | ||
| %4:_(<8 x s16>) = G_SELECT %3(<8 x s1>), %1, %0 | ||
| $q0 = COPY %4(<8 x s16>) | ||
| RET_ReallyLR implicit $q0 | ||
| ... | ||
| --- | ||
| name: test_v4s32 | ||
| body: | | ||
| bb.0: | ||
| liveins: $q0 | ||
| ; CHECK-LABEL: name: test_v4s32 | ||
| ; CHECK: liveins: $q0 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0 | ||
| ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<4 x s32>) = G_BITCAST [[COPY]](<2 x s64>) | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0.000000e+00 | ||
| ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) | ||
| ; CHECK-NEXT: [[FMAXIMUM:%[0-9]+]]:_(<4 x s32>) = G_FMAXIMUM [[BUILD_VECTOR]], [[BITCAST]] | ||
| ; CHECK-NEXT: $q0 = COPY [[FMAXIMUM]](<4 x s32>) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $q0 | ||
| %1:_(<2 x s64>) = COPY $q0 | ||
| %0:_(<4 x s32>) = G_BITCAST %1(<2 x s64>) | ||
| %3:_(s32) = G_FCONSTANT float 0.000000e+00 | ||
| %2:_(<4 x s32>) = G_BUILD_VECTOR %3(s32), %3(s32), %3(s32), %3(s32) | ||
| %4:_(<4 x s1>) = G_FCMP floatpred(olt), %0(<4 x s32>), %2 | ||
| %5:_(<4 x s32>) = G_SELECT %4(<4 x s1>), %2, %0 | ||
| $q0 = COPY %5(<4 x s32>) | ||
| RET_ReallyLR implicit $q0 | ||
| ... | ||
| --- | ||
| name: test_v2s64 | ||
| body: | | ||
| bb.0: | ||
| liveins: $q0 | ||
| ; CHECK-LABEL: name: test_v2s64 | ||
| ; CHECK: liveins: $q0 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0 | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00 | ||
| ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) | ||
| ; CHECK-NEXT: [[FMAXIMUM:%[0-9]+]]:_(<2 x s64>) = G_FMAXIMUM [[BUILD_VECTOR]], [[COPY]] | ||
| ; CHECK-NEXT: $q0 = COPY [[FMAXIMUM]](<2 x s64>) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $q0 | ||
| %0:_(<2 x s64>) = COPY $q0 | ||
| %2:_(s64) = G_FCONSTANT double 0.000000e+00 | ||
| %1:_(<2 x s64>) = G_BUILD_VECTOR %2(s64), %2(s64) | ||
| %3:_(<2 x s1>) = G_FCMP floatpred(olt), %0(<2 x s64>), %1 | ||
| %4:_(<2 x s64>) = G_SELECT %3(<2 x s1>), %1, %0 | ||
| $q0 = COPY %4(<2 x s64>) | ||
| RET_ReallyLR implicit $q0 | ||
| ... | ||
| --- | ||
| name: test_v2s64_fmin | ||
| body: | | ||
| bb.0: | ||
| liveins: $q0 | ||
| ; CHECK-LABEL: name: test_v2s64_fmin | ||
| ; CHECK: liveins: $q0 | ||
| ; CHECK-NEXT: {{ $}} | ||
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0 | ||
| ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0.000000e+00 | ||
| ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64) | ||
| ; CHECK-NEXT: [[FMINIMUM:%[0-9]+]]:_(<2 x s64>) = G_FMINIMUM [[BUILD_VECTOR]], [[COPY]] | ||
| ; CHECK-NEXT: $q0 = COPY [[FMINIMUM]](<2 x s64>) | ||
| ; CHECK-NEXT: RET_ReallyLR implicit $q0 | ||
| %0:_(<2 x s64>) = COPY $q0 | ||
| %2:_(s64) = G_FCONSTANT double 0.000000e+00 | ||
| %1:_(<2 x s64>) = G_BUILD_VECTOR %2(s64), %2(s64) | ||
| %3:_(<2 x s1>) = G_FCMP floatpred(ogt), %0(<2 x s64>), %1 | ||
| %4:_(<2 x s64>) = G_SELECT %3(<2 x s1>), %1, %0 | ||
| $q0 = COPY %4(<2 x s64>) | ||
| RET_ReallyLR implicit $q0 | ||
| ... |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,103 @@ | ||
| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | ||
| ; RUN: llc -mtriple aarch64 -mattr=+fullfp16 -global-isel -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s | ||
| define half @test_s16(half %a) #0 { | ||
| ; CHECK-LABEL: test_s16: | ||
| ; CHECK: // %bb.0: // %entry | ||
| ; CHECK-NEXT: movi d1, #0000000000000000 | ||
| ; CHECK-NEXT: fmax h0, h1, h0 | ||
| ; CHECK-NEXT: ret | ||
| entry: | ||
| %fcmp = fcmp olt half %a, 0.0 | ||
| %sel = select i1 %fcmp, half 0.0, half %a | ||
| ret half %sel | ||
| } | ||
|
|
||
| define float @test_s32(float %a) #0 { | ||
| ; CHECK-LABEL: test_s32: | ||
| ; CHECK: // %bb.0: // %entry | ||
| ; CHECK-NEXT: movi d1, #0000000000000000 | ||
| ; CHECK-NEXT: fmax s0, s1, s0 | ||
| ; CHECK-NEXT: ret | ||
| entry: | ||
| %fcmp = fcmp olt float %a, 0.0 | ||
| %sel = select i1 %fcmp, float 0.0, float %a | ||
| ret float %sel | ||
| } | ||
|
|
||
| define double @test_s64(double %a) #0 { | ||
| ; CHECK-LABEL: test_s64: | ||
| ; CHECK: // %bb.0: // %entry | ||
| ; CHECK-NEXT: movi d1, #0000000000000000 | ||
| ; CHECK-NEXT: fmax d0, d1, d0 | ||
| ; CHECK-NEXT: ret | ||
| entry: | ||
| %fcmp = fcmp olt double %a, 0.0 | ||
| %sel = select i1 %fcmp, double 0.0, double %a | ||
| ret double %sel | ||
| } | ||
|
|
||
| define <4 x half> @test_v4s16(<4 x half> %a) #0 { | ||
| ; CHECK-LABEL: test_v4s16: | ||
| ; CHECK: // %bb.0: // %entry | ||
| ; CHECK-NEXT: movi d1, #0000000000000000 | ||
| ; CHECK-NEXT: dup v1.4h, v1.h[0] | ||
| ; CHECK-NEXT: fmax v0.4h, v1.4h, v0.4h | ||
| ; CHECK-NEXT: ret | ||
| entry: | ||
| %fcmp = fcmp olt <4 x half> %a, zeroinitializer | ||
| %sel = select <4 x i1> %fcmp, <4 x half> zeroinitializer, <4 x half> %a | ||
| ret <4 x half> %sel | ||
| } | ||
|
|
||
| define <8 x half> @test_v8s16(<8 x half> %a) #0 { | ||
| ; CHECK-LABEL: test_v8s16: | ||
| ; CHECK: // %bb.0: // %entry | ||
| ; CHECK-NEXT: movi d1, #0000000000000000 | ||
| ; CHECK-NEXT: dup v1.8h, v1.h[0] | ||
| ; CHECK-NEXT: fmax v0.8h, v1.8h, v0.8h | ||
| ; CHECK-NEXT: ret | ||
| entry: | ||
| %fcmp = fcmp olt <8 x half> %a, zeroinitializer | ||
| %sel = select <8 x i1> %fcmp, <8 x half> zeroinitializer, <8 x half> %a | ||
| ret <8 x half> %sel | ||
| } | ||
|
|
||
| define <2 x float> @test_v2s32(<2 x float> %a) #0 { | ||
| ; CHECK-LABEL: test_v2s32: | ||
| ; CHECK: // %bb.0: // %entry | ||
| ; CHECK-NEXT: movi d1, #0000000000000000 | ||
| ; CHECK-NEXT: dup v1.2s, v1.s[0] | ||
| ; CHECK-NEXT: fmax v0.2s, v1.2s, v0.2s | ||
| ; CHECK-NEXT: ret | ||
| entry: | ||
| %fcmp = fcmp olt <2 x float> %a, zeroinitializer | ||
| %sel = select <2 x i1> %fcmp, <2 x float> zeroinitializer, <2 x float> %a | ||
| ret <2 x float> %sel | ||
| } | ||
|
|
||
| define <4 x float> @test_v4s32(<4 x float> %a) #0 { | ||
| ; CHECK-LABEL: test_v4s32: | ||
| ; CHECK: // %bb.0: // %entry | ||
| ; CHECK-NEXT: movi d1, #0000000000000000 | ||
| ; CHECK-NEXT: dup v1.4s, v1.s[0] | ||
| ; CHECK-NEXT: fmax v0.4s, v1.4s, v0.4s | ||
| ; CHECK-NEXT: ret | ||
| entry: | ||
| %fcmp = fcmp olt <4 x float> %a, zeroinitializer | ||
| %sel = select <4 x i1> %fcmp, <4 x float> zeroinitializer, <4 x float> %a | ||
| ret <4 x float> %sel | ||
| } | ||
|
|
||
| define <2 x double> @test_v2s64(<2 x double> %a) #0 { | ||
| ; CHECK-LABEL: test_v2s64: | ||
| ; CHECK: // %bb.0: // %entry | ||
| ; CHECK-NEXT: movi d1, #0000000000000000 | ||
| ; CHECK-NEXT: dup v1.2d, v1.d[0] | ||
| ; CHECK-NEXT: fmax v0.2d, v1.2d, v0.2d | ||
| ; CHECK-NEXT: ret | ||
| entry: | ||
| %fcmp = fcmp olt <2 x double> %a, zeroinitializer | ||
| %sel = select <2 x i1> %fcmp, <2 x double> zeroinitializer, <2 x double> %a | ||
| ret <2 x double> %sel | ||
| } | ||
|
|