137 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64 -debugify-and-strip-all-safe -run-pass=aarch64-prelegalizer-combiner --aarch64prelegalizercombiner-only-enable-rule="match_addos" -global-isel -verify-machineinstrs %s -o - | FileCheck %s3# REQUIRES: asserts4 5# (G_*ADDO x, 0) -> x + no carry6 7...8---9name: uadd_zero10tracksRegLiveness: true11body: |12 bb.0:13 liveins: $w0, $w114 ; CHECK-LABEL: name: uadd_zero15 ; CHECK: liveins: $w0, $w116 ; CHECK-NEXT: {{ $}}17 ; CHECK-NEXT: %lhs:_(s32) = COPY $w018 ; CHECK-NEXT: %add:_(s32) = COPY %lhs(s32)19 ; CHECK-NEXT: %o:_(s1) = G_CONSTANT i1 false20 ; CHECK-NEXT: %o_wide:_(s32) = G_ZEXT %o(s1)21 ; CHECK-NEXT: $w0 = COPY %add(s32)22 ; CHECK-NEXT: $w1 = COPY %o_wide(s32)23 ; CHECK-NEXT: RET_ReallyLR implicit $w024 %lhs:_(s32) = COPY $w025 %zero:_(s32) = G_CONSTANT i32 026 %add:_(s32), %o:_(s1) = G_UADDO %lhs, %zero27 %o_wide:_(s32) = G_ZEXT %o(s1)28 $w0 = COPY %add(s32)29 $w1 = COPY %o_wide30 RET_ReallyLR implicit $w031...32---33name: sadd_zero34tracksRegLiveness: true35body: |36 bb.0:37 liveins: $w0, $w138 ; CHECK-LABEL: name: sadd_zero39 ; CHECK: liveins: $w0, $w140 ; CHECK-NEXT: {{ $}}41 ; CHECK-NEXT: %lhs:_(s32) = COPY $w042 ; CHECK-NEXT: %add:_(s32) = COPY %lhs(s32)43 ; CHECK-NEXT: %o:_(s1) = G_CONSTANT i1 false44 ; CHECK-NEXT: %o_wide:_(s32) = G_ZEXT %o(s1)45 ; CHECK-NEXT: $w0 = COPY %add(s32)46 ; CHECK-NEXT: $w1 = COPY %o_wide(s32)47 ; CHECK-NEXT: RET_ReallyLR implicit $w048 %lhs:_(s32) = COPY $w049 %zero:_(s32) = G_CONSTANT i32 050 %add:_(s32), %o:_(s1) = G_SADDO %lhs, %zero51 %o_wide:_(s32) = G_ZEXT %o(s1)52 $w0 = COPY %add(s32)53 $w1 = COPY %o_wide54 RET_ReallyLR implicit $w055...56---57name: wrong_cst58tracksRegLiveness: true59body: |60 bb.0:61 liveins: $w0, $w162 ; CHECK-LABEL: name: wrong_cst63 ; CHECK: liveins: $w0, $w164 ; CHECK-NEXT: {{ $}}65 ; CHECK-NEXT: %lhs:_(s32) = COPY $w066 ; CHECK-NEXT: %not_zero:_(s32) = G_CONSTANT i32 367 ; CHECK-NEXT: %add:_(s32), %o:_(s1) = G_UADDO %lhs, %not_zero68 ; CHECK-NEXT: %o_wide:_(s32) = G_ZEXT %o(s1)69 ; CHECK-NEXT: $w0 = COPY %add(s32)70 ; CHECK-NEXT: $w1 = COPY %o_wide(s32)71 ; CHECK-NEXT: RET_ReallyLR implicit $w072 %lhs:_(s32) = COPY $w073 %not_zero:_(s32) = G_CONSTANT i32 374 %add:_(s32), %o:_(s1) = G_UADDO %lhs, %not_zero75 %o_wide:_(s32) = G_ZEXT %o(s1)76 $w0 = COPY %add(s32)77 $w1 = COPY %o_wide78 RET_ReallyLR implicit $w079...80---81name: uadd_vec_zero82tracksRegLiveness: true83body: |84 bb.0:85 liveins: $q0, $x086 ; CHECK-LABEL: name: uadd_vec_zero87 ; CHECK: liveins: $q0, $x088 ; CHECK-NEXT: {{ $}}89 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q090 ; CHECK-NEXT: %zero:_(s64) = G_CONSTANT i64 091 ; CHECK-NEXT: %add:_(<2 x s64>) = COPY %lhs(<2 x s64>)92 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false93 ; CHECK-NEXT: %o:_(<2 x s1>) = G_BUILD_VECTOR [[C]](s1), [[C]](s1)94 ; CHECK-NEXT: %o_elt_0:_(s1) = G_EXTRACT_VECTOR_ELT %o(<2 x s1>), %zero(s64)95 ; CHECK-NEXT: %o_wide:_(s64) = G_ZEXT %o_elt_0(s1)96 ; CHECK-NEXT: $q0 = COPY %add(<2 x s64>)97 ; CHECK-NEXT: $x0 = COPY %o_wide(s64)98 ; CHECK-NEXT: RET_ReallyLR implicit $q099 %lhs:_(<2 x s64>) = COPY $q0100 %zero:_(s64) = G_CONSTANT i64 0101 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero102 %add:_(<2 x s64>), %o:_(<2 x s1>) = G_UADDO %lhs, %zero_vec103 %o_elt_0:_(s1) = G_EXTRACT_VECTOR_ELT %o:_(<2 x s1>), %zero:_(s64)104 %o_wide:_(s64) = G_ZEXT %o_elt_0105 $q0 = COPY %add(<2 x s64>)106 $x0 = COPY %o_wide107 RET_ReallyLR implicit $q0108...109---110name: sadd_vec_zero111tracksRegLiveness: true112body: |113 bb.0:114 liveins: $q0, $x0115 ; CHECK-LABEL: name: sadd_vec_zero116 ; CHECK: liveins: $q0, $x0117 ; CHECK-NEXT: {{ $}}118 ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0119 ; CHECK-NEXT: %zero:_(s64) = G_CONSTANT i64 0120 ; CHECK-NEXT: %add:_(<2 x s64>) = COPY %lhs(<2 x s64>)121 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false122 ; CHECK-NEXT: %o:_(<2 x s1>) = G_BUILD_VECTOR [[C]](s1), [[C]](s1)123 ; CHECK-NEXT: %o_elt_0:_(s1) = G_EXTRACT_VECTOR_ELT %o(<2 x s1>), %zero(s64)124 ; CHECK-NEXT: %o_wide:_(s64) = G_ZEXT %o_elt_0(s1)125 ; CHECK-NEXT: $q0 = COPY %add(<2 x s64>)126 ; CHECK-NEXT: $x0 = COPY %o_wide(s64)127 ; CHECK-NEXT: RET_ReallyLR implicit $q0128 %lhs:_(<2 x s64>) = COPY $q0129 %zero:_(s64) = G_CONSTANT i64 0130 %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero131 %add:_(<2 x s64>), %o:_(<2 x s1>) = G_SADDO %lhs, %zero_vec132 %o_elt_0:_(s1) = G_EXTRACT_VECTOR_ELT %o:_(<2 x s1>), %zero:_(s64)133 %o_wide:_(s64) = G_ZEXT %o_elt_0134 $q0 = COPY %add(<2 x s64>)135 $x0 = COPY %o_wide136 RET_ReallyLR implicit $q0137