111 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve -run-pass=peephole-opt -verify-machineinstrs %s -o - | FileCheck %s3# Test that RDFFR followed by PTEST is replaced with RDFFRS.4---5name: substitute_rdffr_pp_with_rdffrs_pp6tracksRegLiveness: true7body: |8 bb.0:9 liveins: $ffr, $p010 ; CHECK-LABEL: name: substitute_rdffr_pp_with_rdffrs_pp11 ; CHECK: liveins: $ffr, $p012 ; CHECK-NEXT: {{ $}}13 ; CHECK-NEXT: [[COPY:%[0-9]+]]:ppr_3b = COPY $p014 ; CHECK-NEXT: [[RDFFRS_PPz:%[0-9]+]]:ppr_3b = RDFFRS_PPz [[COPY]], implicit $ffr, implicit-def $nzcv15 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $wzr16 ; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr killed [[COPY1]], $wzr, 0, implicit $nzcv17 ; CHECK-NEXT: $w0 = COPY [[CSINCWr]]18 ; CHECK-NEXT: RET_ReallyLR implicit $w019 %0:ppr_3b = COPY $p020 21 %1:ppr_3b = RDFFR_PPz %0:ppr_3b, implicit $ffr22 PTEST_PP killed %0:ppr_3b, killed %1:ppr_3b, implicit-def $nzcv23 %2:gpr32 = COPY $wzr24 %3:gpr32 = CSINCWr killed %2, $wzr, 0, implicit $nzcv25 $w0 = COPY %326 RET_ReallyLR implicit $w027...28---29name: fail_to_substitute_rdffr_pp_with_rdffrs_pp_differing_mask30tracksRegLiveness: true31body: |32 bb.0:33 liveins: $ffr, $p0, $p134 ; CHECK-LABEL: name: fail_to_substitute_rdffr_pp_with_rdffrs_pp_differing_mask35 ; CHECK: liveins: $ffr, $p0, $p136 ; CHECK-NEXT: {{ $}}37 ; CHECK-NEXT: [[COPY:%[0-9]+]]:ppr_3b = COPY $p038 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:ppr_3b = COPY $p139 ; CHECK-NEXT: [[RDFFR_PPz:%[0-9]+]]:ppr_3b = RDFFR_PPz [[COPY]], implicit $ffr40 ; CHECK-NEXT: PTEST_PP killed [[COPY1]], killed [[RDFFR_PPz]], implicit-def $nzcv41 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr32 = COPY $wzr42 ; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr killed [[COPY2]], $wzr, 0, implicit $nzcv43 ; CHECK-NEXT: $w0 = COPY [[CSINCWr]]44 ; CHECK-NEXT: RET_ReallyLR implicit $w045 %0:ppr_3b = COPY $p046 %1:ppr_3b = COPY $p147 48 %2:ppr_3b = RDFFR_PPz %0:ppr_3b, implicit $ffr49 PTEST_PP killed %1:ppr_3b, killed %2:ppr_3b, implicit-def $nzcv50 %3:gpr32 = COPY $wzr51 %4:gpr32 = CSINCWr killed %3, $wzr, 0, implicit $nzcv52 $w0 = COPY %453 RET_ReallyLR implicit $w054...55---56name: fail_to_substitute_rdffr_pp_with_rdffrs_pp_nzcv_clobbered57tracksRegLiveness: true58body: |59 bb.0:60 liveins: $ffr, $p0, $x061 ; CHECK-LABEL: name: fail_to_substitute_rdffr_pp_with_rdffrs_pp_nzcv_clobbered62 ; CHECK: liveins: $ffr, $p0, $x063 ; CHECK-NEXT: {{ $}}64 ; CHECK-NEXT: [[COPY:%[0-9]+]]:ppr_3b = COPY $p065 ; CHECK-NEXT: [[RDFFR_PPz:%[0-9]+]]:ppr_3b = RDFFR_PPz [[COPY]], implicit $ffr66 ; CHECK-NEXT: $x0 = ADDSXrr $x0, $x0, implicit-def $nzcv67 ; CHECK-NEXT: PTEST_PP killed [[COPY]], killed [[RDFFR_PPz]], implicit-def $nzcv68 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $wzr69 ; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr killed [[COPY1]], $wzr, 0, implicit $nzcv70 ; CHECK-NEXT: $w0 = COPY [[CSINCWr]]71 ; CHECK-NEXT: RET_ReallyLR implicit $w072 %0:ppr_3b = COPY $p073 74 %1:ppr_3b = RDFFR_PPz %0:ppr_3b, implicit $ffr75 $x0 = ADDSXrr $x0, $x0, implicit-def $nzcv76 PTEST_PP killed %0:ppr_3b, killed %1:ppr_3b, implicit-def $nzcv77 %2:gpr32 = COPY $wzr78 %3:gpr32 = CSINCWr killed %2, $wzr, 0, implicit $nzcv79 $w0 = COPY %380 RET_ReallyLR implicit $w081...82---83name: fail_to_substitute_rdffr_pp_with_rdffrs_pp_nzcv_flags_used_between84tracksRegLiveness: true85body: |86 bb.0:87 liveins: $ffr, $p0, $x088 ; CHECK-LABEL: name: fail_to_substitute_rdffr_pp_with_rdffrs_pp_nzcv_flags_used_between89 ; CHECK: liveins: $ffr, $p0, $x090 ; CHECK-NEXT: {{ $}}91 ; CHECK-NEXT: [[COPY:%[0-9]+]]:ppr_3b = COPY $p092 ; CHECK-NEXT: $wzr = SUBSWri $w0, 0, 0, implicit-def $nzcv93 ; CHECK-NEXT: [[RDFFR_PPz:%[0-9]+]]:ppr_3b = RDFFR_PPz [[COPY]], implicit $ffr94 ; CHECK-NEXT: [[CSINCWr:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 0, implicit $nzcv95 ; CHECK-NEXT: PTEST_PP killed [[COPY]], killed [[RDFFR_PPz]], implicit-def $nzcv96 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY $wzr97 ; CHECK-NEXT: [[CSINCWr1:%[0-9]+]]:gpr32 = CSINCWr killed [[COPY1]], $wzr, 0, implicit $nzcv98 ; CHECK-NEXT: $w0 = ORRWrs [[CSINCWr1]], [[CSINCWr]], 199 ; CHECK-NEXT: RET_ReallyLR implicit $w0100 %0:ppr_3b = COPY $p0101 102 $wzr = SUBSWri $w0, 0, 0, implicit-def $nzcv103 104 %1:ppr_3b = RDFFR_PPz %0:ppr_3b, implicit $ffr105 %2:gpr32 = CSINCWr $wzr, $wzr, 0, implicit $nzcv106 PTEST_PP killed %0:ppr_3b, killed %1:ppr_3b, implicit-def $nzcv107 %3:gpr32 = COPY $wzr108 %4:gpr32 = CSINCWr killed %3, $wzr, 0, implicit $nzcv109 $w0 = ORRWrs %4, %2, 1110 RET_ReallyLR implicit $w0111