118 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="mulo_by_2" -global-isel -verify-machineinstrs %s -o - | FileCheck %s3# REQUIRES: asserts4...5---6name: smulo_to_saddo7tracksRegLiveness: true8body: |9 bb.0:10 liveins: $x011 12 ; CHECK-LABEL: name: smulo_to_saddo13 ; CHECK: liveins: $x014 ; CHECK-NEXT: {{ $}}15 ; CHECK-NEXT: %copy:_(s64) = COPY $x016 ; CHECK-NEXT: %mul:_(s64), %o:_(s1) = G_SADDO %copy, %copy17 ; CHECK-NEXT: %overflow_ext:_(s32) = G_ZEXT %o(s1)18 ; CHECK-NEXT: $w0 = COPY %overflow_ext(s32)19 ; CHECK-NEXT: RET_ReallyLR implicit $w020 %copy:_(s64) = COPY $x021 %two:_(s64) = G_CONSTANT i64 222 %mul:_(s64), %o:_(s1) = G_SMULO %copy, %two23 %overflow_ext:_(s32) = G_ZEXT %o(s1)24 $w0 = COPY %overflow_ext(s32)25 RET_ReallyLR implicit $w026...27---28name: umulo_to_uaddo29tracksRegLiveness: true30body: |31 bb.0:32 liveins: $x033 34 ; CHECK-LABEL: name: umulo_to_uaddo35 ; CHECK: liveins: $x036 ; CHECK-NEXT: {{ $}}37 ; CHECK-NEXT: %copy:_(s64) = COPY $x038 ; CHECK-NEXT: %mul:_(s64), %o:_(s1) = G_UADDO %copy, %copy39 ; CHECK-NEXT: %overflow_ext:_(s32) = G_ZEXT %o(s1)40 ; CHECK-NEXT: $w0 = COPY %overflow_ext(s32)41 ; CHECK-NEXT: RET_ReallyLR implicit $w042 %copy:_(s64) = COPY $x043 %two:_(s64) = G_CONSTANT i64 244 %mul:_(s64), %o:_(s1) = G_UMULO %copy, %two45 %overflow_ext:_(s32) = G_ZEXT %o(s1)46 $w0 = COPY %overflow_ext(s32)47 RET_ReallyLR implicit $w048...49---50name: vector51tracksRegLiveness: true52body: |53 bb.0:54 liveins: $d0, $d155 56 ; CHECK-LABEL: name: vector57 ; CHECK: liveins: $d0, $d158 ; CHECK-NEXT: {{ $}}59 ; CHECK-NEXT: %copy:_(<2 x s32>) = COPY $d060 ; CHECK-NEXT: %mul:_(<2 x s32>), %o:_(<2 x s1>) = G_SADDO %copy, %copy61 ; CHECK-NEXT: %overflow_ext:_(<2 x s32>) = G_ANYEXT %o(<2 x s1>)62 ; CHECK-NEXT: $d0 = COPY %overflow_ext(<2 x s32>)63 ; CHECK-NEXT: RET_ReallyLR implicit $d064 %copy:_(<2 x s32>) = COPY $d065 %two:_(s32) = G_CONSTANT i32 266 %splat_two:_(<2 x s32>) = G_BUILD_VECTOR %two(s32), %two(s32)67 %mul:_(<2 x s32>), %o:_(<2 x s1>) = G_SMULO %copy, %splat_two68 %overflow_ext:_(<2 x s32>) = G_ANYEXT %o(<2 x s1>)69 $d0 = COPY %overflow_ext(<2 x s32>)70 RET_ReallyLR implicit $d071...72---73name: dont_combine_wrong_cst74tracksRegLiveness: true75body: |76 bb.0:77 liveins: $x078 79 ; CHECK-LABEL: name: dont_combine_wrong_cst80 ; CHECK: liveins: $x081 ; CHECK-NEXT: {{ $}}82 ; CHECK-NEXT: %copy:_(s64) = COPY $x083 ; CHECK-NEXT: %three:_(s64) = G_CONSTANT i64 384 ; CHECK-NEXT: %mul:_(s64), %o:_(s1) = G_UMULO %copy, %three85 ; CHECK-NEXT: %overflow_ext:_(s32) = G_ZEXT %o(s1)86 ; CHECK-NEXT: $w0 = COPY %overflow_ext(s32)87 ; CHECK-NEXT: RET_ReallyLR implicit $w088 %copy:_(s64) = COPY $x089 %three:_(s64) = G_CONSTANT i64 390 %mul:_(s64), %o:_(s1) = G_UMULO %copy, %three91 %overflow_ext:_(s32) = G_ZEXT %o(s1)92 $w0 = COPY %overflow_ext(s32)93 RET_ReallyLR implicit $w094...95---96name: dont_combine_not_cst97tracksRegLiveness: true98body: |99 bb.0:100 liveins: $x0, $x1101 102 ; CHECK-LABEL: name: dont_combine_not_cst103 ; CHECK: liveins: $x0, $x1104 ; CHECK-NEXT: {{ $}}105 ; CHECK-NEXT: %copy1:_(s64) = COPY $x0106 ; CHECK-NEXT: %copy2:_(s64) = COPY $x1107 ; CHECK-NEXT: %mul:_(s64), %o:_(s1) = G_UMULO %copy1, %copy2108 ; CHECK-NEXT: %overflow_ext:_(s32) = G_ZEXT %o(s1)109 ; CHECK-NEXT: $w0 = COPY %overflow_ext(s32)110 ; CHECK-NEXT: RET_ReallyLR implicit $w0111 %copy1:_(s64) = COPY $x0112 %copy2:_(s64) = COPY $x1113 %mul:_(s64), %o:_(s1) = G_UMULO %copy1, %copy2114 %overflow_ext:_(s32) = G_ZEXT %o(s1)115 $w0 = COPY %overflow_ext(s32)116 RET_ReallyLR implicit $w0117...118