1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2 2# RUN: llc -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s 3--- 4name: cfb_lhs 5tracksRegLiveness: true 6body: | 7 bb.1: 8 liveins: $w0 9 10 ; CHECK-LABEL: name: cfb_lhs 11 ; CHECK: liveins: $w0 12 ; CHECK-NEXT: {{ $}} 13 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 14 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 15 ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 16 ; CHECK-NEXT: %add:_(s32) = G_ADD [[COPY]], %cfb 17 ; CHECK-NEXT: $w0 = COPY %add(s32) 18 ; CHECK-NEXT: RET_ReallyLR 19 %0:_(s32) = COPY $w0 20 %cst:_(s32) = G_CONSTANT i32 1 21 %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 22 %cst2:_(s32) = G_CONSTANT i32 2 23 %add:_(s32) = G_ADD %cfb, %0 24 $w0 = COPY %add 25 RET_ReallyLR 26 27... 28--- 29name: cfb_lhs_cfb_already_rhs 30tracksRegLiveness: true 31body: | 32 bb.1: 33 liveins: $w0 34 35 ; CHECK-LABEL: name: cfb_lhs_cfb_already_rhs 36 ; CHECK: liveins: $w0 37 ; CHECK-NEXT: {{ $}} 38 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 39 ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 40 ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 2 41 ; CHECK-NEXT: %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2 42 ; CHECK-NEXT: %add:_(s32) = G_ADD %cfb, %cfb2 43 ; CHECK-NEXT: $w0 = COPY %add(s32) 44 ; CHECK-NEXT: RET_ReallyLR 45 %0:_(s32) = COPY $w0 46 %cst:_(s32) = G_CONSTANT i32 1 47 %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 48 %cst2:_(s32) = G_CONSTANT i32 2 49 %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2 50 %add:_(s32) = G_ADD %cfb, %cfb2 51 $w0 = COPY %add 52 RET_ReallyLR 53 54... 55--- 56name: cfb_lhs_cst_on_rhs 57alignment: 4 58tracksRegLiveness: true 59body: | 60 bb.1: 61 liveins: $w0 62 63 ; CHECK-LABEL: name: cfb_lhs_cst_on_rhs 64 ; CHECK: liveins: $w0 65 ; CHECK-NEXT: {{ $}} 66 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 67 ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 68 ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 2 69 ; CHECK-NEXT: %add:_(s32) = G_ADD %cfb, %cst2 70 ; CHECK-NEXT: $w0 = COPY %add(s32) 71 ; CHECK-NEXT: RET_ReallyLR 72 %0:_(s32) = COPY $w0 73 %cst:_(s32) = G_CONSTANT i32 1 74 %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 75 %cst2:_(s32) = G_CONSTANT i32 2 76 %add:_(s32) = G_ADD %cfb, %cst2 77 $w0 = COPY %add 78 RET_ReallyLR 79 80... 81--- 82name: cfb_lhs_smulo 83tracksRegLiveness: true 84body: | 85 bb.1: 86 liveins: $w0 87 88 ; CHECK-LABEL: name: cfb_lhs_smulo 89 ; CHECK: liveins: $w0 90 ; CHECK-NEXT: {{ $}} 91 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 92 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 93 ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 94 ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_SMULO [[COPY]], %cfb 95 ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1) 96 ; CHECK-NEXT: $w0 = COPY %ret(s32) 97 ; CHECK-NEXT: RET_ReallyLR 98 %0:_(s32) = COPY $w0 99 %cst:_(s32) = G_CONSTANT i32 1 100 %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 101 %mul:_(s32), %overflow:_(s1) = G_SMULO %cfb, %0 102 %ret:_(s32) = G_ANYEXT %overflow 103 $w0 = COPY %ret 104 RET_ReallyLR 105 106... 107--- 108name: cfb_lhs_cfb_already_rhs_smulo 109tracksRegLiveness: true 110body: | 111 bb.1: 112 liveins: $w0 113 114 ; CHECK-LABEL: name: cfb_lhs_cfb_already_rhs_smulo 115 ; CHECK: liveins: $w0 116 ; CHECK-NEXT: {{ $}} 117 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 118 ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 119 ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 6 120 ; CHECK-NEXT: %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2 121 ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_SMULO %cfb, %cfb2 122 ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1) 123 ; CHECK-NEXT: $w0 = COPY %ret(s32) 124 ; CHECK-NEXT: RET_ReallyLR 125 %0:_(s32) = COPY $w0 126 %cst:_(s32) = G_CONSTANT i32 1 127 %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 128 %cst2:_(s32) = G_CONSTANT i32 6 129 %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2 130 %mul:_(s32), %overflow:_(s1) = G_SMULO %cfb, %cfb2 131 %ret:_(s32) = G_ANYEXT %overflow 132 $w0 = COPY %ret 133 RET_ReallyLR 134 135... 136--- 137name: cfb_lhs_cst_on_rhs_smulo 138alignment: 4 139tracksRegLiveness: true 140body: | 141 bb.1: 142 liveins: $w0 143 144 ; CHECK-LABEL: name: cfb_lhs_cst_on_rhs_smulo 145 ; CHECK: liveins: $w0 146 ; CHECK-NEXT: {{ $}} 147 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 148 ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 149 ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 6 150 ; CHECK-NEXT: %mul:_(s32), %overflow:_(s1) = G_SMULO %cfb, %cst2 151 ; CHECK-NEXT: %ret:_(s32) = G_ANYEXT %overflow(s1) 152 ; CHECK-NEXT: $w0 = COPY %ret(s32) 153 ; CHECK-NEXT: RET_ReallyLR 154 %0:_(s32) = COPY $w0 155 %cst:_(s32) = G_CONSTANT i32 1 156 %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 157 %cst2:_(s32) = G_CONSTANT i32 6 158 %mul:_(s32), %overflow:_(s1) = G_SMULO %cfb, %cst2 159 %ret:_(s32) = G_ANYEXT %overflow 160 $w0 = COPY %ret 161 RET_ReallyLR 162 163... 164--- 165name: cfb_lhs_umulfixsat 166tracksRegLiveness: true 167body: | 168 bb.1: 169 liveins: $w0 170 171 ; CHECK-LABEL: name: cfb_lhs_umulfixsat 172 ; CHECK: liveins: $w0 173 ; CHECK-NEXT: {{ $}} 174 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 175 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 176 ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 177 ; CHECK-NEXT: %mul:_(s32) = G_UMULFIXSAT [[COPY]], %cfb, 7 178 ; CHECK-NEXT: $w0 = COPY %mul(s32) 179 ; CHECK-NEXT: RET_ReallyLR 180 %0:_(s32) = COPY $w0 181 %cst:_(s32) = G_CONSTANT i32 1 182 %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 183 %mul:_(s32) = G_UMULFIXSAT %cfb, %0, 7 184 $w0 = COPY %mul 185 RET_ReallyLR 186 187... 188--- 189name: cfb_lhs_cfb_already_rhs_umulfixsat 190tracksRegLiveness: true 191body: | 192 bb.1: 193 liveins: $w0 194 195 ; CHECK-LABEL: name: cfb_lhs_cfb_already_rhs_umulfixsat 196 ; CHECK: liveins: $w0 197 ; CHECK-NEXT: {{ $}} 198 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 199 ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 200 ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 2 201 ; CHECK-NEXT: %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2 202 ; CHECK-NEXT: %add:_(s32) = G_UMULFIXSAT %cfb, %cfb2, 7 203 ; CHECK-NEXT: $w0 = COPY %add(s32) 204 ; CHECK-NEXT: RET_ReallyLR 205 %0:_(s32) = COPY $w0 206 %cst:_(s32) = G_CONSTANT i32 1 207 %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 208 %cst2:_(s32) = G_CONSTANT i32 2 209 %cfb2:_(s32) = G_CONSTANT_FOLD_BARRIER %cst2 210 %add:_(s32) = G_UMULFIXSAT %cfb, %cfb2, 7 211 $w0 = COPY %add 212 RET_ReallyLR 213 214... 215--- 216name: cfb_lhs_cst_on_rhs_umulfixsat 217alignment: 4 218tracksRegLiveness: true 219body: | 220 bb.1: 221 liveins: $w0 222 223 ; CHECK-LABEL: name: cfb_lhs_cst_on_rhs_umulfixsat 224 ; CHECK: liveins: $w0 225 ; CHECK-NEXT: {{ $}} 226 ; CHECK-NEXT: %cst:_(s32) = G_CONSTANT i32 1 227 ; CHECK-NEXT: %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 228 ; CHECK-NEXT: %cst2:_(s32) = G_CONSTANT i32 2 229 ; CHECK-NEXT: %add:_(s32) = G_UMULFIXSAT %cfb, %cst2, 7 230 ; CHECK-NEXT: $w0 = COPY %add(s32) 231 ; CHECK-NEXT: RET_ReallyLR 232 %0:_(s32) = COPY $w0 233 %cst:_(s32) = G_CONSTANT i32 1 234 %cfb:_(s32) = G_CONSTANT_FOLD_BARRIER %cst 235 %cst2:_(s32) = G_CONSTANT i32 2 236 %add:_(s32) = G_UMULFIXSAT %cfb, %cst2, 7 237 $w0 = COPY %add 238 RET_ReallyLR 239 240... 241