brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · ff8bab9 Raw
179 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s3 4# Check that we can fold a G_ASHR/G_LSHR fed by a G_SHL into a G_SBFX/G_UBFX.5 6---7name:            apply_ashr_shl_to_sbfx8legalized: true9body:             |10  bb.0.entry:11    ; CHECK-LABEL: name: apply_ashr_shl_to_sbfx12    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w013    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1614    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1115    ; CHECK-NEXT: [[SBFX:%[0-9]+]]:_(s32) = G_SBFX [[COPY]], [[C1]](s32), [[C]]16    ; CHECK-NEXT: $w0 = COPY [[SBFX]](s32)17    %0:_(s32) = COPY $w018    %1:_(s32) = G_CONSTANT i32 519    %2:_(s32) = G_CONSTANT i32 1620    %3:_(s32) = G_SHL %0, %121    %4:_(s32) = G_ASHR %3, %222    $w0 = COPY %4(s32)23...24 25---26name:            apply_ashr_shl_to_sbfx_lower_bound27legalized: true28body:             |29  bb.0.entry:30    ; CHECK-LABEL: name: apply_ashr_shl_to_sbfx_lower_bound31    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w032    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 133    ; CHECK-NEXT: [[SBFX:%[0-9]+]]:_(s32) = G_SBFX [[COPY]], [[C]](s32), [[C]]34    ; CHECK-NEXT: $w0 = COPY [[SBFX]](s32)35    %0:_(s32) = COPY $w036    %1:_(s32) = G_CONSTANT i32 3037    %2:_(s32) = G_CONSTANT i32 3138    %3:_(s32) = G_SHL %0, %139    %4:_(s32) = G_ASHR %3, %240    $w0 = COPY %4(s32)41...42 43---44name:            apply_ashr_shl_to_sbfx_upper_bound45legalized: true46body:             |47  bb.0.entry:48    ; CHECK-LABEL: name: apply_ashr_shl_to_sbfx_upper_bound49    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w050    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 151    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3052    ; CHECK-NEXT: [[SBFX:%[0-9]+]]:_(s32) = G_SBFX [[COPY]], [[C1]](s32), [[C]]53    ; CHECK-NEXT: $w0 = COPY [[SBFX]](s32)54    %0:_(s32) = COPY $w055    %1:_(s32) = G_CONSTANT i32 156    %2:_(s32) = G_CONSTANT i32 3157    %3:_(s32) = G_SHL %0, %158    %4:_(s32) = G_ASHR %3, %259    $w0 = COPY %4(s32)60...61 62---63name:            apply_lshr_shl_to_ubfx64legalized: true65body:             |66  bb.0.entry:67    ; CHECK-LABEL: name: apply_lshr_shl_to_ubfx68    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w069    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1670    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1171    ; CHECK-NEXT: [[UBFX:%[0-9]+]]:_(s32) = G_UBFX [[COPY]], [[C1]](s32), [[C]]72    ; CHECK-NEXT: $w0 = COPY [[UBFX]](s32)73    %0:_(s32) = COPY $w074    %1:_(s32) = G_CONSTANT i32 575    %2:_(s32) = G_CONSTANT i32 1676    %3:_(s32) = G_SHL %0, %177    %4:_(s32) = G_LSHR %3, %278    $w0 = COPY %4(s32)79...80 81---82name:            apply_lshr_shl_to_ubfx_lower_bound83legalized: true84body:             |85  bb.0.entry:86    ; CHECK-LABEL: name: apply_lshr_shl_to_ubfx_lower_bound87    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w088    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 189    ; CHECK-NEXT: [[UBFX:%[0-9]+]]:_(s32) = G_UBFX [[COPY]], [[C]](s32), [[C]]90    ; CHECK-NEXT: $w0 = COPY [[UBFX]](s32)91    %0:_(s32) = COPY $w092    %1:_(s32) = G_CONSTANT i32 3093    %2:_(s32) = G_CONSTANT i32 3194    %3:_(s32) = G_SHL %0, %195    %4:_(s32) = G_LSHR %3, %296    $w0 = COPY %4(s32)97...98 99---100name:            apply_lshr_shl_to_ubfx_upper_bound101legalized: true102body:             |103  bb.0.entry:104    ; CHECK-LABEL: name: apply_lshr_shl_to_ubfx_upper_bound105    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0106    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1107    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 30108    ; CHECK-NEXT: [[UBFX:%[0-9]+]]:_(s32) = G_UBFX [[COPY]], [[C1]](s32), [[C]]109    ; CHECK-NEXT: $w0 = COPY [[UBFX]](s32)110    %0:_(s32) = COPY $w0111    %1:_(s32) = G_CONSTANT i32 1112    %2:_(s32) = G_CONSTANT i32 31113    %3:_(s32) = G_SHL %0, %1114    %4:_(s32) = G_LSHR %3, %2115    $w0 = COPY %4(s32)116...117 118---119name:            dont_apply_pos_out_of_bounds120legalized: true121body:             |122  bb.0.entry:123    ; CHECK-LABEL: name: dont_apply_pos_out_of_bounds124    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0125    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 5126    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2127    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)128    ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)129    ; CHECK-NEXT: $w0 = COPY [[ASHR]](s32)130    %0:_(s32) = COPY $w0131    %1:_(s32) = G_CONSTANT i32 5132    %2:_(s32) = G_CONSTANT i32 2133    %3:_(s32) = G_SHL %0, %1134    %4:_(s32) = G_ASHR %3, %2135    $w0 = COPY %4(s32)136...137 138---139name:            dont_apply_no_constant140legalized: true141body:             |142  bb.0.entry:143    ; CHECK-LABEL: name: dont_apply_no_constant144    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0145    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1146    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2147    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[COPY1]](s32)148    ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)149    ; CHECK-NEXT: $w0 = COPY [[ASHR]](s32)150    %0:_(s32) = COPY $w0151    %1:_(s32) = COPY $w1152    %2:_(s32) = G_CONSTANT i32 2153    %3:_(s32) = G_SHL %0, %1154    %4:_(s32) = G_ASHR %3, %2155    $w0 = COPY %4(s32)156...157 158---159name:            dont_apply_more_than_one_use160legalized: true161body:             |162  bb.0.entry:163    ; CHECK-LABEL: name: dont_apply_more_than_one_use164    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0165    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 5166    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16167    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)168    ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C1]](s32)169    ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[SHL]], [[ASHR]]170    ; CHECK-NEXT: $w0 = COPY [[MUL]](s32)171    %0:_(s32) = COPY $w0172    %1:_(s32) = G_CONSTANT i32 5173    %2:_(s32) = G_CONSTANT i32 16174    %3:_(s32) = G_SHL %0, %1175    %4:_(s32) = G_ASHR %3, %2176    %5:_(s32) = G_MUL %3, %4177    $w0 = COPY %5(s32)178...179