1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -O0 -mtriple=x86_64-linux-gnu -run-pass=legalizer %s -o - | FileCheck %s 3 4--- | 5 define i64 @test_sext_i1(i8 %a) { 6 %val = trunc i8 %a to i1 7 %r = sext i1 %val to i64 8 ret i64 %r 9 } 10 11 define i64 @test_sext_i8(i8 %val) { 12 %r = sext i8 %val to i64 13 ret i64 %r 14 } 15 16 define i64 @test_sext_i16(i16 %val) { 17 %r = sext i16 %val to i64 18 ret i64 %r 19 } 20 21 define i64 @test_sext_i32(i32 %val) { 22 %r = sext i32 %val to i64 23 ret i64 %r 24 } 25 26 define i64 @test_zext_i1(i8 %a) { 27 %val = trunc i8 %a to i1 28 %r = zext i1 %val to i64 29 ret i64 %r 30 } 31 32 define i64 @test_zext_i8(i8 %val) { 33 %r = zext i8 %val to i64 34 ret i64 %r 35 } 36 37 define i64 @test_zext_i16(i16 %val) { 38 %r = zext i16 %val to i64 39 ret i64 %r 40 } 41 42 define i64 @test_zext_i32(i32 %val) { 43 %r = zext i32 %val to i64 44 ret i64 %r 45 } 46 47 define void @test_anyext_i1(i8 %a) { 48 ret void 49 } 50 51 define void @test_anyext_i8(i8 %val) { 52 ret void 53 } 54 55 define void @test_anyext_i16(i16 %val) { 56 ret void 57 } 58 59 define void @test_anyext_i32(i32 %val) { 60 ret void 61 } 62 63 64... 65--- 66name: test_sext_i1 67alignment: 16 68legalized: false 69regBankSelected: false 70registers: 71 - { id: 0, class: _ } 72 - { id: 1, class: _ } 73 - { id: 2, class: _ } 74body: | 75 bb.1 (%ir-block.0): 76 liveins: $edi 77 78 ; CHECK-LABEL: name: test_sext_i1 79 ; CHECK: liveins: $edi 80 ; CHECK-NEXT: {{ $}} 81 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY $dil 82 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s8) 83 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 63 84 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ANYEXT]], [[C]](s8) 85 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s8) = COPY [[C]](s8) 86 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[SHL]], [[COPY1]](s8) 87 ; CHECK-NEXT: $rax = COPY [[ASHR]](s64) 88 ; CHECK-NEXT: RET 0, implicit $rax 89 %0(s8) = COPY $dil 90 %1(s1) = G_TRUNC %0(s8) 91 %2(s64) = G_SEXT %1(s1) 92 $rax = COPY %2(s64) 93 RET 0, implicit $rax 94 95... 96--- 97name: test_sext_i8 98alignment: 16 99legalized: false 100regBankSelected: false 101registers: 102 - { id: 0, class: _ } 103 - { id: 1, class: _ } 104body: | 105 bb.1 (%ir-block.0): 106 liveins: $edi 107 108 ; CHECK-LABEL: name: test_sext_i8 109 ; CHECK: liveins: $edi 110 ; CHECK-NEXT: {{ $}} 111 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY $dil 112 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY]](s8) 113 ; CHECK-NEXT: $rax = COPY [[SEXT]](s64) 114 ; CHECK-NEXT: RET 0, implicit $rax 115 %0(s8) = COPY $dil 116 %1(s64) = G_SEXT %0(s8) 117 $rax = COPY %1(s64) 118 RET 0, implicit $rax 119 120... 121--- 122name: test_sext_i16 123alignment: 16 124legalized: false 125regBankSelected: false 126registers: 127 - { id: 0, class: _ } 128 - { id: 1, class: _ } 129body: | 130 bb.1 (%ir-block.0): 131 liveins: $edi 132 133 ; CHECK-LABEL: name: test_sext_i16 134 ; CHECK: liveins: $edi 135 ; CHECK-NEXT: {{ $}} 136 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $di 137 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY]](s16) 138 ; CHECK-NEXT: $rax = COPY [[SEXT]](s64) 139 ; CHECK-NEXT: RET 0, implicit $rax 140 %0(s16) = COPY $di 141 %1(s64) = G_SEXT %0(s16) 142 $rax = COPY %1(s64) 143 RET 0, implicit $rax 144 145... 146--- 147name: test_sext_i32 148alignment: 16 149legalized: false 150regBankSelected: false 151registers: 152 - { id: 0, class: _ } 153 - { id: 1, class: _ } 154body: | 155 bb.1 (%ir-block.0): 156 liveins: $edi 157 158 ; CHECK-LABEL: name: test_sext_i32 159 ; CHECK: liveins: $edi 160 ; CHECK-NEXT: {{ $}} 161 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 162 ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[COPY]](s32) 163 ; CHECK-NEXT: $rax = COPY [[SEXT]](s64) 164 ; CHECK-NEXT: RET 0, implicit $rax 165 %0(s32) = COPY $edi 166 %1(s64) = G_SEXT %0(s32) 167 $rax = COPY %1(s64) 168 RET 0, implicit $rax 169 170... 171--- 172name: test_zext_i1 173alignment: 16 174legalized: false 175regBankSelected: false 176registers: 177 - { id: 0, class: _ } 178 - { id: 1, class: _ } 179 - { id: 2, class: _ } 180body: | 181 bb.1 (%ir-block.0): 182 liveins: $edi 183 184 ; CHECK-LABEL: name: test_zext_i1 185 ; CHECK: liveins: $edi 186 ; CHECK-NEXT: {{ $}} 187 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY $dil 188 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s8) 189 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 190 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]] 191 ; CHECK-NEXT: $rax = COPY [[AND]](s64) 192 ; CHECK-NEXT: RET 0, implicit $rax 193 %0(s8) = COPY $dil 194 %1(s1) = G_TRUNC %0(s8) 195 %2(s64) = G_ZEXT %1(s1) 196 $rax = COPY %2(s64) 197 RET 0, implicit $rax 198 199... 200--- 201name: test_zext_i8 202alignment: 16 203legalized: false 204regBankSelected: false 205registers: 206 - { id: 0, class: _ } 207 - { id: 1, class: _ } 208body: | 209 bb.1 (%ir-block.0): 210 liveins: $edi 211 212 ; CHECK-LABEL: name: test_zext_i8 213 ; CHECK: liveins: $edi 214 ; CHECK-NEXT: {{ $}} 215 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY $dil 216 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s8) 217 ; CHECK-NEXT: $rax = COPY [[ZEXT]](s64) 218 ; CHECK-NEXT: RET 0, implicit $rax 219 %0(s8) = COPY $dil 220 %1(s64) = G_ZEXT %0(s8) 221 $rax = COPY %1(s64) 222 RET 0, implicit $rax 223 224... 225--- 226name: test_zext_i16 227alignment: 16 228legalized: false 229regBankSelected: false 230registers: 231 - { id: 0, class: _ } 232 - { id: 1, class: _ } 233body: | 234 bb.1 (%ir-block.0): 235 liveins: $edi 236 237 ; CHECK-LABEL: name: test_zext_i16 238 ; CHECK: liveins: $edi 239 ; CHECK-NEXT: {{ $}} 240 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $di 241 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s16) 242 ; CHECK-NEXT: $rax = COPY [[ZEXT]](s64) 243 ; CHECK-NEXT: RET 0, implicit $rax 244 %0(s16) = COPY $di 245 %1(s64) = G_ZEXT %0(s16) 246 $rax = COPY %1(s64) 247 RET 0, implicit $rax 248 249... 250--- 251name: test_zext_i32 252alignment: 16 253legalized: false 254regBankSelected: false 255registers: 256 - { id: 0, class: _ } 257 - { id: 1, class: _ } 258body: | 259 bb.1 (%ir-block.0): 260 liveins: $edi 261 262 ; CHECK-LABEL: name: test_zext_i32 263 ; CHECK: liveins: $edi 264 ; CHECK-NEXT: {{ $}} 265 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 266 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY]](s32) 267 ; CHECK-NEXT: $rax = COPY [[ZEXT]](s64) 268 ; CHECK-NEXT: RET 0, implicit $rax 269 %0(s32) = COPY $edi 270 %1(s64) = G_ZEXT %0(s32) 271 $rax = COPY %1(s64) 272 RET 0, implicit $rax 273 274... 275--- 276name: test_anyext_i1 277alignment: 16 278legalized: false 279regBankSelected: false 280registers: 281 - { id: 0, class: _ } 282 - { id: 1, class: _ } 283 - { id: 2, class: _ } 284body: | 285 bb.1 (%ir-block.0): 286 liveins: $edi 287 288 ; CHECK-LABEL: name: test_anyext_i1 289 ; CHECK: liveins: $edi 290 ; CHECK-NEXT: {{ $}} 291 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY $dil 292 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s8) 293 ; CHECK-NEXT: $rax = COPY [[ANYEXT]](s64) 294 ; CHECK-NEXT: RET 0, implicit $rax 295 %0(s8) = COPY $dil 296 %1(s1) = G_TRUNC %0(s8) 297 %2(s64) = G_ANYEXT %1(s1) 298 $rax = COPY %2(s64) 299 RET 0, implicit $rax 300 301... 302--- 303name: test_anyext_i8 304alignment: 16 305legalized: false 306regBankSelected: false 307registers: 308 - { id: 0, class: _ } 309 - { id: 1, class: _ } 310body: | 311 bb.1 (%ir-block.0): 312 liveins: $edi 313 314 ; CHECK-LABEL: name: test_anyext_i8 315 ; CHECK: liveins: $edi 316 ; CHECK-NEXT: {{ $}} 317 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY $dil 318 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s8) 319 ; CHECK-NEXT: $rax = COPY [[ANYEXT]](s64) 320 ; CHECK-NEXT: RET 0, implicit $rax 321 %0(s8) = COPY $dil 322 %1(s64) = G_ANYEXT %0(s8) 323 $rax = COPY %1(s64) 324 RET 0, implicit $rax 325 326... 327--- 328name: test_anyext_i16 329alignment: 16 330legalized: false 331regBankSelected: false 332registers: 333 - { id: 0, class: _ } 334 - { id: 1, class: _ } 335body: | 336 bb.1 (%ir-block.0): 337 liveins: $edi 338 339 ; CHECK-LABEL: name: test_anyext_i16 340 ; CHECK: liveins: $edi 341 ; CHECK-NEXT: {{ $}} 342 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY $di 343 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s16) 344 ; CHECK-NEXT: $rax = COPY [[ANYEXT]](s64) 345 ; CHECK-NEXT: RET 0, implicit $rax 346 %0(s16) = COPY $di 347 %1(s64) = G_ANYEXT %0(s16) 348 $rax = COPY %1(s64) 349 RET 0, implicit $rax 350 351... 352--- 353name: test_anyext_i32 354alignment: 16 355legalized: false 356regBankSelected: false 357registers: 358 - { id: 0, class: _ } 359 - { id: 1, class: _ } 360body: | 361 bb.1 (%ir-block.0): 362 liveins: $edi 363 364 ; CHECK-LABEL: name: test_anyext_i32 365 ; CHECK: liveins: $edi 366 ; CHECK-NEXT: {{ $}} 367 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi 368 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[COPY]](s32) 369 ; CHECK-NEXT: $rax = COPY [[ANYEXT]](s64) 370 ; CHECK-NEXT: RET 0, implicit $rax 371 %0(s32) = COPY $edi 372 %1(s64) = G_ANYEXT %0(s32) 373 $rax = COPY %1(s64) 374 RET 0, implicit $rax 375 376... 377 378