brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.1 KiB · c8c5b15 Raw
208 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_AND into a G_SBFX/G_UBFX.5 6---7name:            mask_extract_unsigned_328legalized: true9body:             |10  bb.0.entry:11    ; CHECK-LABEL: name: mask_extract_unsigned_3212    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w013    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 214    ; CHECK-NEXT: [[UBFX:%[0-9]+]]:_(s32) = G_UBFX [[COPY]], [[C]](s32), [[C]]15    ; CHECK-NEXT: $w0 = COPY [[UBFX]](s32)16    %0:_(s32) = COPY $w017    %1:_(s32) = G_CONSTANT i32 1218    %2:_(s32) = G_CONSTANT i32 219    %3:_(s32) = G_AND %0, %120    %4:_(s32) = G_LSHR %3, %221    $w0 = COPY %4(s32)22...23---24name:            mask_extract_unsigned_6425legalized: true26body:             |27  bb.0.entry:28    ; CHECK-LABEL: name: mask_extract_unsigned_6429    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x030    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 5631    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 432    ; CHECK-NEXT: [[UBFX:%[0-9]+]]:_(s64) = G_UBFX [[COPY]], [[C]](s64), [[C1]]33    ; CHECK-NEXT: $x0 = COPY [[UBFX]](s64)34    %0:_(s64) = COPY $x035    %1:_(s64) = G_CONSTANT i64 108086391056891904036    %2:_(s64) = G_CONSTANT i64 5637    %3:_(s64) = G_AND %0, %138    %4:_(s64) = G_LSHR %3, %239    $x0 = COPY %4(s64)40...41---42name:            no_mask_extract_unsigned_12843legalized: true44body:             |45  bb.0.entry:46    ; CHECK-LABEL: name: no_mask_extract_unsigned_12847    ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q048    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 108086391056891904049    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s128) = G_CONSTANT i128 5650    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s128) = G_AND [[COPY]], [[C]]51    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s128) = G_LSHR [[AND]], [[C1]](s128)52    ; CHECK-NEXT: $q0 = COPY [[LSHR]](s128)53    %0:_(s128) = COPY $q054    %1:_(s128) = G_CONSTANT i128 108086391056891904055    %2:_(s128) = G_CONSTANT i128 5656    %3:_(s128) = G_AND %0, %157    %4:_(s128) = G_LSHR %3, %258    $q0 = COPY %4(s128)59...60---61name:            mask_extract_asr62legalized: true63body:             |64  bb.0.entry:65    ; CHECK-LABEL: name: mask_extract_asr66    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w067    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 2968    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 269    ; CHECK-NEXT: [[UBFX:%[0-9]+]]:_(s32) = G_UBFX [[COPY]], [[C]](s32), [[C1]]70    ; CHECK-NEXT: $w0 = COPY [[UBFX]](s32)71    %0:_(s32) = COPY $w072    %1:_(s32) = G_CONSTANT i32 161061273673    %2:_(s32) = G_CONSTANT i32 2974    %3:_(s32) = G_AND %0, %175    %4:_(s32) = G_ASHR %3, %276    $w0 = COPY %4(s32)77...78---79name:            no_mask_extract_asr80legalized: true81body:             |82  bb.0.entry:83    ; CHECK-LABEL: name: no_mask_extract_asr84    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w085    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -107374182486    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 3087    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]88    ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[AND]], [[C1]](s32)89    ; CHECK-NEXT: $w0 = COPY [[ASHR]](s32)90    %0:_(s32) = COPY $w091    %1:_(s32) = G_CONSTANT i32 322122547292    %2:_(s32) = G_CONSTANT i32 3093    %3:_(s32) = G_AND %0, %194    %4:_(s32) = G_ASHR %3, %295    $w0 = COPY %4(s32)96...97---98name:            mask_extract_signed_nonneg99legalized: true100body:             |101  bb.0.entry:102    ; CHECK-LABEL: name: mask_extract_signed_nonneg103    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0104    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 29105    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2106    ; CHECK-NEXT: [[UBFX:%[0-9]+]]:_(s32) = G_UBFX [[COPY]], [[C]](s32), [[C1]]107    ; CHECK-NEXT: $w0 = COPY [[UBFX]](s32)108    %0:_(s32) = COPY $w0109    %1:_(s32) = G_CONSTANT i32 2147483647110    %2:_(s32) = G_CONSTANT i32 29111    %3:_(s32) = G_AND %0, %1112    %4:_(s32) = G_ASHR %3, %2113    $w0 = COPY %4(s32)114...115---116name:            no_mask_extract_large_shift117legalized: true118body:             |119  bb.0.entry:120    ; CHECK-LABEL: name: no_mask_extract_large_shift121    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0122    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 12123    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 33124    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]125    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C1]](s32)126    ; CHECK-NEXT: $w0 = COPY [[LSHR]](s32)127    %0:_(s32) = COPY $w0128    %1:_(s32) = G_CONSTANT i32 12129    %2:_(s32) = G_CONSTANT i32 33130    %3:_(s32) = G_AND %0, %1131    %4:_(s32) = G_LSHR %3, %2132    $w0 = COPY %4(s32)133...134---135name:            no_mask_extract_negative_shift136legalized: true137body:             |138  bb.0.entry:139    ; CHECK-LABEL: name: no_mask_extract_negative_shift140    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0141    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 12142    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1143    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]144    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C1]](s32)145    ; CHECK-NEXT: $w0 = COPY [[LSHR]](s32)146    %0:_(s32) = COPY $w0147    %1:_(s32) = G_CONSTANT i32 12148    %2:_(s32) = G_CONSTANT i32 -1149    %3:_(s32) = G_AND %0, %1150    %4:_(s32) = G_LSHR %3, %2151    $w0 = COPY %4(s32)152...153---154name:            no_mask_extract_disjoint155legalized: true156body:             |157  bb.0.entry:158    ; CHECK-LABEL: name: no_mask_extract_disjoint159    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0160    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 26161    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1162    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]163    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C1]](s32)164    ; CHECK-NEXT: $w0 = COPY [[LSHR]](s32)165    %0:_(s32) = COPY $w0166    %1:_(s32) = G_CONSTANT i32 26167    %2:_(s32) = G_CONSTANT i32 1168    %3:_(s32) = G_AND %0, %1169    %4:_(s32) = G_LSHR %3, %2170    $w0 = COPY %4(s32)171...172---173name:           no_mask_extract_extra_bits174legalized: true175body:             |176  bb.0.entry:177    ; CHECK-LABEL: name: no_mask_extract_extra_bits178    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0179    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 25180    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 2181    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]182    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[C1]](s32)183    ; CHECK-NEXT: $w0 = COPY [[LSHR]](s32)184    %0:_(s32) = COPY $w0185    %1:_(s32) = G_CONSTANT i32 25186    %2:_(s32) = G_CONSTANT i32 2187    %3:_(s32) = G_AND %0, %1188    %4:_(s32) = G_LSHR %3, %2189    $w0 = COPY %4(s32)190...191---192name:          zero_from_large_shift193legalized: true194body:              |195  bb.1.entry:196    ; CHECK-LABEL: name: zero_from_large_shift197    ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0198    ; CHECK-NEXT: $x0 = COPY [[C]](s64)199    %2:_(s32) = COPY $w0200    %1:_(s8) = G_TRUNC %2:_(s32)201    %3:_(s8) = G_ASSERT_ZEXT %1:_, 1202    %5:_(s64) = G_CONSTANT i64 1203    %7:_(s64) = G_ANYEXT %3:_(s8)204    %4:_(s64) = G_AND %7:_, %5:_205    %6:_(s64) = G_LSHR %4:_, %5:_(s64)206    $x0 = COPY %6:_(s64)207...208