1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs -mtriple aarch64-unknown-unknown %s -o - | FileCheck %s 3 4--- 5name: mul_by_zero 6alignment: 4 7tracksRegLiveness: true 8frameInfo: 9 maxAlignment: 1 10machineFunctionInfo: {} 11body: | 12 bb.0: 13 liveins: $x0 14 ; CHECK-LABEL: name: mul_by_zero 15 ; CHECK: liveins: $x0 16 ; CHECK-NEXT: {{ $}} 17 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 18 ; CHECK-NEXT: $x0 = COPY [[C]](s64) 19 %0:_(s64) = COPY $x0 20 %1:_(s64) = G_CONSTANT i64 0 21 %2:_(s64) = G_MUL %0, %1(s64) 22 $x0 = COPY %2(s64) 23... 24--- 25name: mul_vector_by_zero 26alignment: 4 27tracksRegLiveness: true 28frameInfo: 29 maxAlignment: 1 30machineFunctionInfo: {} 31body: | 32 bb.0: 33 liveins: $q0 34 ; CHECK-LABEL: name: mul_vector_by_zero 35 ; CHECK: liveins: $q0 36 ; CHECK-NEXT: {{ $}} 37 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 38 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 39 ; CHECK-NEXT: $q0 = COPY [[BUILD_VECTOR]](<4 x s32>) 40 %0:_(<4 x s32>) = COPY $q0 41 %1:_(s32) = G_CONSTANT i32 0 42 %2:_(<4 x s32>) = G_BUILD_VECTOR %1(s32), %1(s32), %1(s32), %1(s32) 43 %3:_(<4 x s32>) = G_MUL %0, %2(<4 x s32>) 44 $q0 = COPY %3(<4 x s32>) 45... 46--- 47name: mul_by_one 48alignment: 4 49tracksRegLiveness: true 50frameInfo: 51 maxAlignment: 1 52machineFunctionInfo: {} 53body: | 54 bb.0: 55 liveins: $x0 56 ; CHECK-LABEL: name: mul_by_one 57 ; CHECK: liveins: $x0 58 ; CHECK-NEXT: {{ $}} 59 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 60 ; CHECK-NEXT: $x0 = COPY [[COPY]](s64) 61 %0:_(s64) = COPY $x0 62 %1:_(s64) = G_CONSTANT i64 1 63 %2:_(s64) = G_MUL %0, %1(s64) 64 $x0 = COPY %2(s64) 65... 66--- 67name: fmul_by_one 68tracksRegLiveness: true 69body: | 70 bb.0: 71 liveins: $d0 72 ; CHECK-LABEL: name: fmul_by_one 73 ; CHECK: liveins: $d0 74 ; CHECK-NEXT: {{ $}} 75 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d0 76 ; CHECK-NEXT: $d0 = COPY [[COPY]](s64) 77 %0:_(s64) = COPY $d0 78 %1:_(s64) = G_FCONSTANT double 1.000000e+00 79 %2:_(s64) = G_FMUL %0, %1(s64) 80 $d0 = COPY %2(s64) 81... 82--- 83name: fmul_vector_by_one 84alignment: 4 85tracksRegLiveness: true 86frameInfo: 87 maxAlignment: 1 88machineFunctionInfo: {} 89body: | 90 bb.0: 91 liveins: $q0 92 ; CHECK-LABEL: name: fmul_vector_by_one 93 ; CHECK: liveins: $q0 94 ; CHECK-NEXT: {{ $}} 95 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0 96 ; CHECK-NEXT: $q0 = COPY [[COPY]](<4 x s32>) 97 %0:_(<4 x s32>) = COPY $q0 98 %1:_(s32) = G_FCONSTANT float 1.0 99 %2:_(<4 x s32>) = G_BUILD_VECTOR %1(s32), %1(s32), %1(s32), %1(s32) 100 %3:_(<4 x s32>) = G_FMUL %0, %2(<4 x s32>) 101 $q0 = COPY %3(<4 x s32>) 102... 103--- 104name: mul_vector_by_one 105alignment: 4 106tracksRegLiveness: true 107frameInfo: 108 maxAlignment: 1 109machineFunctionInfo: {} 110body: | 111 bb.0: 112 liveins: $q0 113 ; CHECK-LABEL: name: mul_vector_by_one 114 ; CHECK: liveins: $q0 115 ; CHECK-NEXT: {{ $}} 116 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0 117 ; CHECK-NEXT: $q0 = COPY [[COPY]](<4 x s32>) 118 %0:_(<4 x s32>) = COPY $q0 119 %1:_(s32) = G_CONSTANT i32 1 120 %2:_(<4 x s32>) = G_BUILD_VECTOR %1(s32), %1(s32), %1(s32), %1(s32) 121 %3:_(<4 x s32>) = G_MUL %0, %2(<4 x s32>) 122 $q0 = COPY %3(<4 x s32>) 123... 124--- 125name: mul_by_neg_one 126alignment: 4 127tracksRegLiveness: true 128frameInfo: 129 maxAlignment: 1 130machineFunctionInfo: {} 131body: | 132 bb.0: 133 liveins: $x0 134 ; CHECK-LABEL: name: mul_by_neg_one 135 ; CHECK: liveins: $x0 136 ; CHECK-NEXT: {{ $}} 137 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 138 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 139 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[COPY]] 140 ; CHECK-NEXT: $x0 = COPY [[SUB]](s64) 141 %0:_(s64) = COPY $x0 142 %1:_(s64) = G_CONSTANT i64 -1 143 %2:_(s64) = G_MUL %0, %1(s64) 144 $x0 = COPY %2(s64) 145... 146--- 147name: mul_vector_by_neg_one 148alignment: 4 149tracksRegLiveness: true 150frameInfo: 151 maxAlignment: 1 152machineFunctionInfo: {} 153body: | 154 bb.0: 155 liveins: $q0 156 ; CHECK-LABEL: name: mul_vector_by_neg_one 157 ; CHECK: liveins: $q0 158 ; CHECK-NEXT: {{ $}} 159 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0 160 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 161 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) 162 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<4 x s32>) = G_SUB [[BUILD_VECTOR]], [[COPY]] 163 ; CHECK-NEXT: $q0 = COPY [[SUB]](<4 x s32>) 164 %0:_(<4 x s32>) = COPY $q0 165 %1:_(s32) = G_CONSTANT i32 -1 166 %2:_(<4 x s32>) = G_BUILD_VECTOR %1(s32), %1(s32), %1(s32), %1(s32) 167 %3:_(<4 x s32>) = G_MUL %0, %2(<4 x s32>) 168 $q0 = COPY %3(<4 x s32>) 169... 170