1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=x86_64-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s 3 4--- | 5 6 define i8 @zext_i1_to_i8(i1 %val) { 7 %res = zext i1 %val to i8 8 ret i8 %res 9 } 10 11 define i16 @zext_i1_to_i16(i1 %val) { 12 %res = zext i1 %val to i16 13 ret i16 %res 14 } 15 16 define i32 @zext_i1_to_i32(i1 %val) { 17 %res = zext i1 %val to i32 18 ret i32 %res 19 } 20 21 define i64 @zext_i1_to_i64(i1 %val) { 22 %res = zext i1 %val to i64 23 ret i64 %res 24 } 25 26 define i16 @zext_i8_to_i16(i8 %val) { 27 %res = zext i8 %val to i16 28 ret i16 %res 29 } 30 31 define i32 @zext_i8_to_i32(i8 %val) { 32 %res = zext i8 %val to i32 33 ret i32 %res 34 } 35 36 define i64 @zext_i8_to_i64(i8 %val) { 37 %res = zext i8 %val to i64 38 ret i64 %res 39 } 40 41 define i32 @zext_i16_to_i32(i16 %val) { 42 %res = zext i16 %val to i32 43 ret i32 %res 44 } 45 46 define i64 @zext_i16_to_i64(i16 %val) { 47 %res = zext i16 %val to i64 48 ret i64 %res 49 } 50 51 define i64 @zext_i32_to_i64(i32 %val) { 52 %res = zext i32 %val to i64 53 ret i64 %res 54 } 55 56... 57--- 58name: zext_i1_to_i8 59alignment: 16 60tracksRegLiveness: true 61registers: 62 - { id: 0, class: _ } 63 - { id: 1, class: _ } 64 - { id: 2, class: _ } 65body: | 66 bb.1 (%ir-block.0): 67 liveins: $edi 68 69 ; CHECK-LABEL: name: zext_i1_to_i8 70 ; CHECK: liveins: $edi 71 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 72 ; CHECK: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 1 73 ; CHECK: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[COPY]](s32) 74 ; CHECK: [[AND:%[0-9]+]]:_(s8) = G_AND [[TRUNC]], [[C]] 75 ; CHECK: $al = COPY [[AND]](s8) 76 ; CHECK: RET 0, implicit $al 77 %1:_(s32) = COPY $edi 78 %0:_(s1) = G_TRUNC %1(s32) 79 %2:_(s8) = G_ZEXT %0(s1) 80 $al = COPY %2(s8) 81 RET 0, implicit $al 82 83... 84--- 85name: zext_i1_to_i16 86alignment: 16 87tracksRegLiveness: true 88registers: 89 - { id: 0, class: _ } 90 - { id: 1, class: _ } 91 - { id: 2, class: _ } 92body: | 93 bb.1 (%ir-block.0): 94 liveins: $edi 95 96 ; CHECK-LABEL: name: zext_i1_to_i16 97 ; CHECK: liveins: $edi 98 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 99 ; CHECK: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 1 100 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 101 ; CHECK: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]] 102 ; CHECK: $ax = COPY [[AND]](s16) 103 ; CHECK: RET 0, implicit $ax 104 %1:_(s32) = COPY $edi 105 %0:_(s1) = G_TRUNC %1(s32) 106 %2:_(s16) = G_ZEXT %0(s1) 107 $ax = COPY %2(s16) 108 RET 0, implicit $ax 109 110... 111--- 112name: zext_i1_to_i32 113alignment: 16 114tracksRegLiveness: true 115registers: 116 - { id: 0, class: _ } 117 - { id: 1, class: _ } 118 - { id: 2, class: _ } 119body: | 120 bb.1 (%ir-block.0): 121 liveins: $edi 122 123 ; CHECK-LABEL: name: zext_i1_to_i32 124 ; CHECK: liveins: $edi 125 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 126 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 127 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 128 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]] 129 ; CHECK: $eax = COPY [[AND]](s32) 130 ; CHECK: RET 0, implicit $eax 131 %1:_(s32) = COPY $edi 132 %0:_(s1) = G_TRUNC %1(s32) 133 %2:_(s32) = G_ZEXT %0(s1) 134 $eax = COPY %2(s32) 135 RET 0, implicit $eax 136 137... 138--- 139name: zext_i1_to_i64 140alignment: 16 141tracksRegLiveness: true 142registers: 143 - { id: 0, class: _ } 144 - { id: 1, class: _ } 145 - { id: 2, class: _ } 146body: | 147 bb.1 (%ir-block.0): 148 liveins: $edi 149 150 ; CHECK-LABEL: name: zext_i1_to_i64 151 ; CHECK: liveins: $edi 152 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 153 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 154 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32) 155 ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]] 156 ; CHECK: $rax = COPY [[AND]](s64) 157 ; CHECK: RET 0, implicit $rax 158 %1:_(s32) = COPY $edi 159 %0:_(s1) = G_TRUNC %1(s32) 160 %2:_(s64) = G_ZEXT %0(s1) 161 $rax = COPY %2(s64) 162 RET 0, implicit $rax 163 164... 165--- 166name: zext_i8_to_i16 167alignment: 16 168tracksRegLiveness: true 169registers: 170 - { id: 0, class: _ } 171 - { id: 1, class: _ } 172 - { id: 2, class: _ } 173body: | 174 bb.1 (%ir-block.0): 175 liveins: $edi 176 177 ; CHECK-LABEL: name: zext_i8_to_i16 178 ; CHECK: liveins: $edi 179 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 180 ; CHECK: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 255 181 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 182 ; CHECK: [[AND:%[0-9]+]]:_(s16) = G_AND [[TRUNC]], [[C]] 183 ; CHECK: $ax = COPY [[AND]](s16) 184 ; CHECK: RET 0, implicit $ax 185 %1:_(s32) = COPY $edi 186 %0:_(s8) = G_TRUNC %1(s32) 187 %2:_(s16) = G_ZEXT %0(s8) 188 $ax = COPY %2(s16) 189 RET 0, implicit $ax 190 191... 192--- 193name: zext_i8_to_i32 194alignment: 16 195tracksRegLiveness: true 196registers: 197 - { id: 0, class: _ } 198 - { id: 1, class: _ } 199 - { id: 2, class: _ } 200body: | 201 bb.1 (%ir-block.0): 202 liveins: $edi 203 204 ; CHECK-LABEL: name: zext_i8_to_i32 205 ; CHECK: liveins: $edi 206 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 207 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 208 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 209 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]] 210 ; CHECK: $eax = COPY [[AND]](s32) 211 ; CHECK: RET 0, implicit $eax 212 %1:_(s32) = COPY $edi 213 %0:_(s8) = G_TRUNC %1(s32) 214 %2:_(s32) = G_ZEXT %0(s8) 215 $eax = COPY %2(s32) 216 RET 0, implicit $eax 217 218... 219--- 220name: zext_i8_to_i64 221alignment: 16 222tracksRegLiveness: true 223registers: 224 - { id: 0, class: _ } 225 - { id: 1, class: _ } 226 - { id: 2, class: _ } 227body: | 228 bb.1 (%ir-block.0): 229 liveins: $edi 230 231 ; CHECK-LABEL: name: zext_i8_to_i64 232 ; CHECK: liveins: $edi 233 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 234 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 255 235 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32) 236 ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]] 237 ; CHECK: $rax = COPY [[AND]](s64) 238 ; CHECK: RET 0, implicit $rax 239 %1:_(s32) = COPY $edi 240 %0:_(s8) = G_TRUNC %1(s32) 241 %2:_(s64) = G_ZEXT %0(s8) 242 $rax = COPY %2(s64) 243 RET 0, implicit $rax 244 245... 246--- 247name: zext_i16_to_i32 248alignment: 16 249tracksRegLiveness: true 250registers: 251 - { id: 0, class: _ } 252 - { id: 1, class: _ } 253 - { id: 2, class: _ } 254body: | 255 bb.1 (%ir-block.0): 256 liveins: $edi 257 258 ; CHECK-LABEL: name: zext_i16_to_i32 259 ; CHECK: liveins: $edi 260 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 261 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 262 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 263 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]] 264 ; CHECK: $eax = COPY [[AND]](s32) 265 ; CHECK: RET 0, implicit $eax 266 %1:_(s32) = COPY $edi 267 %0:_(s16) = G_TRUNC %1(s32) 268 %2:_(s32) = G_ZEXT %0(s16) 269 $eax = COPY %2(s32) 270 RET 0, implicit $eax 271 272... 273--- 274name: zext_i16_to_i64 275alignment: 16 276tracksRegLiveness: true 277registers: 278 - { id: 0, class: _ } 279 - { id: 1, class: _ } 280 - { id: 2, class: _ } 281body: | 282 bb.1 (%ir-block.0): 283 liveins: $edi 284 285 ; CHECK-LABEL: name: zext_i16_to_i64 286 ; CHECK: liveins: $edi 287 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 288 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 65535 289 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32) 290 ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]] 291 ; CHECK: $rax = COPY [[AND]](s64) 292 ; CHECK: RET 0, implicit $rax 293 %1:_(s32) = COPY $edi 294 %0:_(s16) = G_TRUNC %1(s32) 295 %2:_(s64) = G_ZEXT %0(s16) 296 $rax = COPY %2(s64) 297 RET 0, implicit $rax 298 299... 300--- 301name: zext_i32_to_i64 302alignment: 16 303tracksRegLiveness: true 304registers: 305 - { id: 0, class: _ } 306 - { id: 1, class: _ } 307body: | 308 bb.1 (%ir-block.0): 309 liveins: $edi 310 311 ; CHECK-LABEL: name: zext_i32_to_i64 312 ; CHECK: liveins: $edi 313 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 314 ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s32) 315 ; CHECK: $rax = COPY [[ZEXT]](s64) 316 ; CHECK: RET 0, implicit $rax 317 %0:_(s32) = COPY $edi 318 %1:_(s64) = G_ZEXT %0(s32) 319 $rax = COPY %1(s64) 320 RET 0, implicit $rax 321 322... 323