1# RUN: llc -march=x86-64 -run-pass none -o - %s | FileCheck %s 2# This test ensures that the MIR parser parses the machine memory operands 3# correctly. 4 5--- | 6 7 define i32 @test(i32* %a) { 8 entry: 9 %b = load i32, i32* %a 10 store i32 42, i32* %a 11 ret i32 %b 12 } 13 14 define void @test2(i32* %"a value") { 15 entry2: 16 %b = load i32, i32* %"a value" 17 %c = add i32 %b, 1 18 store i32 %c, i32* %"a value" 19 ret void 20 } 21 22 define void @test3(i32*) { 23 entry3: 24 %1 = alloca i32 25 %b = load i32, i32* %0 26 %c = add i32 %b, 1 27 store i32 %c, i32* %1 28 ret void 29 } 30 31 define i32 @volatile_inc(i32* %x) { 32 entry: 33 %0 = load volatile i32, i32* %x 34 %1 = add i32 %0, 1 35 store volatile i32 %1, i32* %x 36 ret i32 %1 37 } 38 39 define void @non_temporal_store(i32* %a, i32 %b) { 40 entry: 41 store i32 %b, i32* %a, align 16, !nontemporal !0 42 ret void 43 } 44 45 !0 = !{i32 1} 46 47 define i32 @invariant_load(i32* %x) { 48 entry: 49 %v = load i32, i32* %x, !invariant.load !1 50 ret i32 %v 51 } 52 53 !1 = !{} 54 55 define void @memory_offset(<8 x float>* %vec) { 56 entry: 57 %v = load <8 x float>, <8 x float>* %vec 58 %v2 = insertelement <8 x float> %v, float 0.0, i32 4 59 store <8 x float> %v2, <8 x float>* %vec 60 ret void 61 } 62 63 define void @memory_alignment(<16 x float>* %vec) { 64 entry: 65 %v = load <16 x float>, <16 x float>* %vec 66 %v2 = insertelement <16 x float> %v, float 0.0, i32 4 67 store <16 x float> %v2, <16 x float>* %vec 68 ret void 69 } 70 71 define double @constant_pool_psv(double %a) { 72 entry: 73 %b = fadd double %a, 3.250000e+00 74 ret double %b 75 } 76 77 declare x86_fp80 @cosl(x86_fp80) #0 78 79 define x86_fp80 @stack_psv(x86_fp80 %x) { 80 entry: 81 %y = call x86_fp80 @cosl(x86_fp80 %x) #0 82 ret x86_fp80 %y 83 } 84 85 attributes #0 = { readonly } 86 87 @G = external global i32 88 89 define i32 @got_psv() { 90 entry: 91 %a = load i32, i32* @G 92 %b = add i32 %a, 1 93 ret i32 %b 94 } 95 96 @0 = external global i32 97 98 define i32 @global_value() { 99 entry: 100 %a = load i32, i32* @G 101 %b = add i32 %a, 1 102 %c = load i32, i32* @0 103 %d = add i32 %b, %c 104 ret i32 %d 105 } 106 107 define i32 @jumptable_psv(i32 %in) { 108 entry: 109 switch i32 %in, label %def [ 110 i32 0, label %lbl1 111 i32 1, label %lbl2 112 i32 2, label %lbl3 113 i32 3, label %lbl4 114 ] 115 def: 116 ret i32 0 117 lbl1: 118 ret i32 1 119 lbl2: 120 ret i32 2 121 lbl3: 122 ret i32 4 123 lbl4: 124 ret i32 8 125 } 126 127 %struct.XXH_state64_t = type { i32, i32, i64, i64, i64 } 128 129 @a = common global i32 0, align 4 130 131 define i32 @tbaa_metadata() { 132 entry: 133 %0 = load i32, i32* @a, align 4, !tbaa !2 134 %1 = inttoptr i32 %0 to %struct.XXH_state64_t* 135 %total_len2 = bitcast %struct.XXH_state64_t* %1 to i32* 136 %2 = load i32, i32* %total_len2, align 4, !tbaa !6 137 ret i32 %2 138 } 139 140 !2 = !{!3, !3, i64 0} 141 !3 = !{!"int", !4, i64 0} 142 !4 = !{!"omnipotent char", !5, i64 0} 143 !5 = !{!"Simple C/C++ TBAA"} 144 !6 = !{!7, !3, i64 0} 145 !7 = !{!"XXH_state64_t", !3, i64 0, !3, i64 4, !8, i64 8, !8, i64 16, !8, i64 24} 146 !8 = !{!"long long", !4, i64 0} 147 148 define void @aa_scope(float* nocapture %a, float* nocapture readonly %c) #1 { 149 entry: 150 %0 = load float, float* %c, align 4, !alias.scope !9 151 %arrayidx.i = getelementptr inbounds float, float* %a, i64 5 152 store float %0, float* %arrayidx.i, align 4, !noalias !9 153 %1 = load float, float* %c, align 4 154 %arrayidx = getelementptr inbounds float, float* %a, i64 7 155 store float %1, float* %arrayidx, align 4 156 ret void 157 } 158 159 attributes #1 = { nounwind uwtable } 160 161 !9 = distinct !{!9, !10, !"some scope"} 162 !10 = distinct !{!10, !"some domain"} 163 164 define zeroext i1 @range_metadata(i8* %x) { 165 entry: 166 %0 = load i8, i8* %x, align 1, !range !11 167 %tobool = trunc i8 %0 to i1 168 ret i1 %tobool 169 } 170 171 !11 = !{i8 0, i8 2} 172 173 %st = type { i32, i32 } 174 175 @values = common global [50 x %st] zeroinitializer, align 16 176 177 define void @gep_value(i64 %d) { 178 entry: 179 %conv = trunc i64 %d to i32 180 store i32 %conv, i32* getelementptr inbounds ([50 x %st], [50 x %st]* @values, i64 0, i64 0, i32 0), align 16 181 ret void 182 } 183 184 define i8* @undef_value() { 185 entry: 186 %0 = load i8*, i8** undef, align 8 187 ret i8* %0 188 } 189 190 define void @dummy0() { ret void } 191 define void @dummy1() { ret void } 192 define void @dummy2() { ret void } 193 define void @dummy3() { ret void } 194... 195--- 196name: test 197tracksRegLiveness: true 198liveins: 199 - { reg: '$rdi' } 200body: | 201 bb.0.entry: 202 liveins: $rdi 203 ; CHECK: $eax = MOV32rm $rdi, 1, $noreg, 0, $noreg :: (load (s32) from %ir.a) 204 ; CHECK-NEXT: MOV32mi killed $rdi, 1, $noreg, 0, $noreg, 42 :: (store (s32) into %ir.a) 205 $eax = MOV32rm $rdi, 1, _, 0, _ :: (load (s32) from %ir.a) 206 MOV32mi killed $rdi, 1, _, 0, _, 42 :: (store (s32) into %ir.a) 207 RETQ $eax 208... 209--- 210name: test2 211tracksRegLiveness: true 212liveins: 213 - { reg: '$rdi' } 214body: | 215 bb.0.entry2: 216 liveins: $rdi 217 ; CHECK: INC32m killed $rdi, 1, $noreg, 0, $noreg, implicit-def dead $eflags :: (store (s32) into %ir."a value"), (load (s32) from %ir."a value") 218 INC32m killed $rdi, 1, _, 0, _, implicit-def dead $eflags :: (store (s32) into %ir."a value"), (load (s32) from %ir."a value") 219 RETQ 220... 221--- 222name: test3 223tracksRegLiveness: true 224liveins: 225 - { reg: '$rdi' } 226frameInfo: 227 maxAlignment: 4 228stack: 229 - { id: 0, offset: -12, size: 4, alignment: 4 } 230body: | 231 bb.0.entry3: 232 liveins: $rdi 233 ; Verify that the unnamed local values can be serialized. 234 ; CHECK-LABEL: name: test3 235 ; CHECK: $eax = MOV32rm killed $rdi, 1, $noreg, 0, $noreg :: (load (s32) from %ir.0) 236 ; CHECK: MOV32mr $rsp, 1, $noreg, -4, $noreg, killed $eax :: (store (s32) into %ir.1) 237 $eax = MOV32rm killed $rdi, 1, _, 0, _ :: (load (s32) from %ir.0) 238 $eax = INC32r killed $eax, implicit-def dead $eflags 239 MOV32mr $rsp, 1, _, -4, _, killed $eax :: (store (s32) into %ir.1) 240 RETQ 241... 242--- 243name: volatile_inc 244tracksRegLiveness: true 245liveins: 246 - { reg: '$rdi' } 247body: | 248 bb.0.entry: 249 liveins: $rdi 250 ; CHECK: name: volatile_inc 251 ; CHECK: $eax = MOV32rm $rdi, 1, $noreg, 0, $noreg :: (volatile load (s32) from %ir.x) 252 ; CHECK: MOV32mr killed $rdi, 1, $noreg, 0, $noreg, $eax :: (volatile store (s32) into %ir.x) 253 $eax = MOV32rm $rdi, 1, _, 0, _ :: (volatile load (s32) from %ir.x) 254 $eax = INC32r killed $eax, implicit-def dead $eflags 255 MOV32mr killed $rdi, 1, _, 0, _, $eax :: (volatile store (s32) into %ir.x) 256 RETQ $eax 257... 258--- 259name: non_temporal_store 260tracksRegLiveness: true 261liveins: 262 - { reg: '$rdi' } 263 - { reg: '$esi' } 264body: | 265 bb.0.entry: 266 liveins: $esi, $rdi 267 ; CHECK: name: non_temporal_store 268 ; CHECK: MOVNTImr killed $rdi, 1, $noreg, 0, $noreg, killed $esi :: (non-temporal store (s32) into %ir.a) 269 MOVNTImr killed $rdi, 1, _, 0, _, killed $esi :: (non-temporal store (s32) into %ir.a) 270 RETQ 271... 272--- 273name: invariant_load 274tracksRegLiveness: true 275liveins: 276 - { reg: '$rdi' } 277body: | 278 bb.0.entry: 279 liveins: $rdi 280 ; CHECK: name: invariant_load 281 ; CHECK: $eax = MOV32rm killed $rdi, 1, $noreg, 0, $noreg :: (invariant load (s32) from %ir.x) 282 $eax = MOV32rm killed $rdi, 1, _, 0, _ :: (invariant load (s32) from %ir.x) 283 RETQ $eax 284... 285--- 286name: memory_offset 287tracksRegLiveness: true 288liveins: 289 - { reg: '$rdi' } 290body: | 291 bb.0.entry: 292 liveins: $rdi 293 ; CHECK: name: memory_offset 294 ; CHECK: $xmm0 = MOVAPSrm $rdi, 1, $noreg, 0, $noreg :: (load (s128) from %ir.vec) 295 ; CHECK-NEXT: $xmm1 = MOVAPSrm $rdi, 1, $noreg, 16, $noreg :: (load (s128) from %ir.vec + 16) 296 ; CHECK: MOVAPSmr $rdi, 1, $noreg, 0, $noreg, killed $xmm0 :: (store (s128) into %ir.vec) 297 ; CHECK-NEXT: MOVAPSmr killed $rdi, 1, $noreg, 16, $noreg, killed $xmm1 :: (store (s128) into %ir.vec + 16) 298 $xmm0 = MOVAPSrm $rdi, 1, _, 0, _ :: (load (s128) from %ir.vec) 299 $xmm1 = MOVAPSrm $rdi, 1, _, 16, _ :: (load (s128) from %ir.vec + 16) 300 $xmm2 = FsFLD0SS 301 $xmm1 = MOVSSrr killed $xmm1, killed $xmm2 302 MOVAPSmr $rdi, 1, _, 0, _, killed $xmm0 :: (store (s128) into %ir.vec) 303 MOVAPSmr killed $rdi, 1, _, 16, _, killed $xmm1 :: (store (s128) into %ir.vec + 16) 304 RETQ 305... 306--- 307name: memory_alignment 308tracksRegLiveness: true 309liveins: 310 - { reg: '$rdi' } 311body: | 312 bb.0.entry: 313 liveins: $rdi 314 ; CHECK: name: memory_alignment 315 ; CHECK: $xmm0 = MOVAPSrm $rdi, 1, $noreg, 0, $noreg :: (load (s128) from %ir.vec, align 64) 316 ; CHECK-NEXT: $xmm1 = MOVAPSrm $rdi, 1, $noreg, 16, $noreg :: (load (s128) from %ir.vec + 16, basealign 64) 317 ; CHECK-NEXT: $xmm2 = MOVAPSrm $rdi, 1, $noreg, 32, $noreg :: (load (s128) from %ir.vec + 32, align 32, basealign 64) 318 ; CHECK-NEXT: $xmm3 = MOVAPSrm $rdi, 1, $noreg, 48, $noreg :: (load (s128) from %ir.vec + 48, basealign 64) 319 ; CHECK: MOVAPSmr $rdi, 1, $noreg, 0, $noreg, killed $xmm0 :: (store (s128) into %ir.vec, align 64) 320 ; CHECK-NEXT: MOVAPSmr $rdi, 1, $noreg, 16, $noreg, killed $xmm1 :: (store (s128) into %ir.vec + 16, basealign 64) 321 ; CHECK-NEXT: MOVAPSmr $rdi, 1, $noreg, 32, $noreg, killed $xmm2 :: (store (s128) into %ir.vec + 32, align 32, basealign 64) 322 ; CHECK-NEXT: MOVAPSmr killed $rdi, 1, $noreg, 48, $noreg, killed $xmm3 :: (store (s128) into %ir.vec + 48, basealign 64) 323 $xmm0 = MOVAPSrm $rdi, 1, _, 0, _ :: (load (s128) from %ir.vec, align 64) 324 $xmm1 = MOVAPSrm $rdi, 1, _, 16, _ :: (load (s128) from %ir.vec + 16, basealign 64) 325 $xmm2 = MOVAPSrm $rdi, 1, _, 32, _ :: (load (s128) from %ir.vec + 32, align 32, basealign 64) 326 $xmm3 = MOVAPSrm $rdi, 1, _, 48, _ :: (load (s128) from %ir.vec + 48, basealign 64) 327 $xmm4 = FsFLD0SS 328 $xmm1 = MOVSSrr killed $xmm1, killed $xmm4 329 MOVAPSmr $rdi, 1, _, 0, _, killed $xmm0 :: (store (s128) into %ir.vec, align 64) 330 MOVAPSmr $rdi, 1, _, 16, _, killed $xmm1 :: (store (s128) into %ir.vec + 16, basealign 64) 331 MOVAPSmr $rdi, 1, _, 32, _, killed $xmm2 :: (store (s128) into %ir.vec + 32, align 32, basealign 64) 332 MOVAPSmr killed $rdi, 1, _, 48, _, killed $xmm3 :: (store (s128) into %ir.vec + 48, basealign 64) 333 RETQ 334... 335--- 336name: constant_pool_psv 337tracksRegLiveness: true 338liveins: 339 - { reg: '$xmm0' } 340constants: 341 - id: 0 342 value: 'double 3.250000e+00' 343body: | 344 bb.0.entry: 345 liveins: $xmm0 346 ; CHECK: name: constant_pool_psv 347 ; CHECK: $xmm0 = ADDSDrm killed $xmm0, $rip, 1, $noreg, %const.0, $noreg, implicit $mxcsr :: (load (s64) from constant-pool) 348 ; CHECK-NEXT: $xmm0 = ADDSDrm killed $xmm0, $rip, 1, $noreg, %const.0, $noreg, implicit $mxcsr :: (load (s64) from constant-pool + 8) 349 $xmm0 = ADDSDrm killed $xmm0, $rip, 1, _, %const.0, _, implicit $mxcsr :: (load (s64) from constant-pool) 350 $xmm0 = ADDSDrm killed $xmm0, $rip, 1, _, %const.0, _, implicit $mxcsr :: (load (s64) from constant-pool + 8) 351 RETQ $xmm0 352... 353--- 354name: stack_psv 355tracksRegLiveness: true 356frameInfo: 357 stackSize: 24 358 maxAlignment: 16 359 adjustsStack: true 360 hasCalls: true 361 maxCallFrameSize: 16 362fixedStack: 363 - { id: 0, offset: 0, size: 10, alignment: 16, isImmutable: true, isAliased: false } 364body: | 365 bb.0.entry: 366 $rsp = frame-setup SUB64ri8 $rsp, 24, implicit-def dead $eflags 367 CFI_INSTRUCTION def_cfa_offset 32 368 LD_F80m $rsp, 1, $noreg, 32, $noreg, implicit-def dead $fpsw, implicit $fpcw 369 ; CHECK: name: stack_psv 370 ; CHECK: ST_FP80m $rsp, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (store (s80) into stack, align 16) 371 ST_FP80m $rsp, 1, _, 0, _, implicit-def dead $fpsw, implicit $fpcw :: (store (s80) into stack, align 16) 372 CALL64pcrel32 &cosl, csr_64, implicit $rsp, implicit-def $rsp, implicit-def $fp0 373 $rsp = ADD64ri8 $rsp, 24, implicit-def dead $eflags 374 RETQ 375... 376--- 377name: got_psv 378tracksRegLiveness: true 379body: | 380 bb.0.entry: 381 ; CHECK: name: got_psv 382 ; CHECK: $rax = MOV64rm $rip, 1, $noreg, @G, $noreg :: (load (s64) from got) 383 $rax = MOV64rm $rip, 1, _, @G, _ :: (load (s64) from got) 384 $eax = MOV32rm killed $rax, 1, _, 0, _ 385 $eax = INC32r killed $eax, implicit-def dead $eflags 386 RETQ $eax 387... 388--- 389name: global_value 390tracksRegLiveness: true 391body: | 392 bb.0.entry: 393 $rax = MOV64rm $rip, 1, _, @G, _ 394 ; CHECK-LABEL: name: global_value 395 ; CHECK: $eax = MOV32rm killed $rax, 1, $noreg, 0, $noreg, implicit-def $rax :: (load (s32) from @G) 396 ; CHECK: $ecx = MOV32rm killed $rcx, 1, $noreg, 0, $noreg, implicit-def $rcx :: (load (s32) from @0) 397 $eax = MOV32rm killed $rax, 1, _, 0, _, implicit-def $rax :: (load (s32) from @G) 398 $rcx = MOV64rm $rip, 1, _, @0, _ 399 $ecx = MOV32rm killed $rcx, 1, _, 0, _, implicit-def $rcx :: (load (s32) from @0) 400 $eax = LEA64_32r killed $rax, 1, killed $rcx, 1, _ 401 RETQ $eax 402... 403--- 404name: jumptable_psv 405tracksRegLiveness: true 406liveins: 407 - { reg: '$edi' } 408jumpTable: 409 kind: label-difference32 410 entries: 411 - id: 0 412 blocks: [ '%bb.3.lbl1', '%bb.4.lbl2', '%bb.5.lbl3', '%bb.6.lbl4' ] 413body: | 414 bb.0.entry: 415 successors: %bb.2.def, %bb.1.entry 416 liveins: $edi 417 418 $eax = MOV32rr $edi, implicit-def $rax 419 CMP32ri8 killed $edi, 3, implicit-def $eflags 420 JCC_1 %bb.2.def, 7, implicit killed $eflags 421 422 bb.1.entry: 423 successors: %bb.3.lbl1, %bb.4.lbl2, %bb.5.lbl3, %bb.6.lbl4 424 liveins: $rax 425 426 $rcx = LEA64r $rip, 1, _, %jump-table.0, _ 427 ; CHECK: name: jumptable_psv 428 ; CHECK: $rax = MOVSX64rm32 $rcx, 4, killed $rax, 0, $noreg :: (load (s32) from jump-table, align 8) 429 $rax = MOVSX64rm32 $rcx, 4, killed $rax, 0, _ :: (load (s32) from jump-table, align 8) 430 $rax = ADD64rr killed $rax, killed $rcx, implicit-def dead $eflags 431 JMP64r killed $rax 432 433 bb.2.def: 434 $eax = MOV32r0 implicit-def dead $eflags 435 RETQ $eax 436 437 bb.3.lbl1: 438 $eax = MOV32ri 1 439 RETQ $eax 440 441 bb.4.lbl2: 442 $eax = MOV32ri 2 443 RETQ $eax 444 445 bb.5.lbl3: 446 $eax = MOV32ri 4 447 RETQ $eax 448 449 bb.6.lbl4: 450 $eax = MOV32ri 8 451 RETQ $eax 452... 453--- 454name: tbaa_metadata 455tracksRegLiveness: true 456body: | 457 bb.0.entry: 458 $rax = MOV64rm $rip, 1, _, @a, _ :: (load (s64) from got) 459 ; CHECK-LABEL: name: tbaa_metadata 460 ; CHECK: $eax = MOV32rm killed $rax, 1, $noreg, 0, $noreg, implicit-def $rax :: (load (s32) from @a, !tbaa !2) 461 ; CHECK-NEXT: $eax = MOV32rm killed $rax, 1, $noreg, 0, $noreg :: (load (s32) from %ir.total_len2, !tbaa !6) 462 $eax = MOV32rm killed $rax, 1, _, 0, _, implicit-def $rax :: (load (s32) from @a, !tbaa !2) 463 $eax = MOV32rm killed $rax, 1, _, 0, _ :: (load (s32) from %ir.total_len2, !tbaa !6) 464 RETQ $eax 465... 466--- 467name: aa_scope 468tracksRegLiveness: true 469liveins: 470 - { reg: '$rdi' } 471 - { reg: '$rsi' } 472body: | 473 bb.0.entry: 474 liveins: $rdi, $rsi 475 ; CHECK-LABEL: name: aa_scope 476 ; CHECK: $xmm0 = MOVSSrm_alt $rsi, 1, $noreg, 0, $noreg :: (load (s32) from %ir.c, !alias.scope !9) 477 $xmm0 = MOVSSrm_alt $rsi, 1, _, 0, _ :: (load (s32) from %ir.c, !alias.scope !9) 478 ; CHECK-NEXT: MOVSSmr $rdi, 1, $noreg, 20, $noreg, killed $xmm0 :: (store (s32) into %ir.arrayidx.i, !noalias !9) 479 MOVSSmr $rdi, 1, _, 20, _, killed $xmm0 :: (store (s32) into %ir.arrayidx.i, !noalias !9) 480 $xmm0 = MOVSSrm_alt killed $rsi, 1, _, 0, _ :: (load (s32) from %ir.c) 481 MOVSSmr killed $rdi, 1, _, 28, _, killed $xmm0 :: (store (s32) into %ir.arrayidx) 482 RETQ 483... 484--- 485name: range_metadata 486tracksRegLiveness: true 487liveins: 488 - { reg: '$rdi' } 489body: | 490 bb.0.entry: 491 liveins: $rdi 492 ; CHECK-LABEL: name: range_metadata 493 ; CHECK: $al = MOV8rm killed $rdi, 1, $noreg, 0, $noreg :: (load (s8) from %ir.x, !range !11) 494 $al = MOV8rm killed $rdi, 1, _, 0, _ :: (load (s8) from %ir.x, !range !11) 495 RETQ $al 496... 497--- 498name: gep_value 499tracksRegLiveness: true 500liveins: 501 - { reg: '$rdi' } 502body: | 503 bb.0.entry: 504 liveins: $rdi 505 506 $rax = MOV64rm $rip, 1, _, @values, _ :: (load (s64) from got) 507 ; CHECK-LABEL: gep_value 508 ; CHECK: MOV32mr killed $rax, 1, $noreg, 0, $noreg, $edi, implicit killed $rdi :: (store (s32) into `i32* getelementptr inbounds ([50 x %st], [50 x %st]* @values, i64 0, i64 0, i32 0)`, align 16) 509 MOV32mr killed $rax, 1, _, 0, _, $edi, implicit killed $rdi :: (store (s32) into `i32* getelementptr inbounds ([50 x %st], [50 x %st]* @values, i64 0, i64 0, i32 0)`, align 16) 510 RETQ 511... 512--- 513name: undef_value 514tracksRegLiveness: true 515body: | 516 bb.0.entry: 517 ; CHECK-LABEL: name: undef_value 518 ; CHECK: $rax = MOV64rm undef $rax, 1, $noreg, 0, $noreg :: (load (s64) from `i8** undef`) 519 $rax = MOV64rm undef $rax, 1, _, 0, _ :: (load (s64) from `i8** undef`) 520 RETQ $rax 521... 522--- 523# Test memory operand without associated value. 524# CHECK-LABEL: name: dummy0 525# CHECK: $rax = MOV64rm undef $rax, 1, $noreg, 0, $noreg :: (load (s64)) 526name: dummy0 527tracksRegLiveness: true 528body: | 529 bb.0: 530 $rax = MOV64rm undef $rax, 1, _, 0, _ :: (load (s64)) 531 RETQ $rax 532... 533--- 534# Test parsing of stack references in machine memory operands. 535# CHECK-LABEL: name: dummy1 536# CHECK: $rax = MOV64rm $rsp, 1, $noreg, 0, $noreg :: (load (s64) from %stack.0) 537name: dummy1 538tracksRegLiveness: true 539stack: 540 - { id: 0, size: 4, alignment: 4 } 541body: | 542 bb.0: 543 $rax = MOV64rm $rsp, 1, _, 0, _ :: (load (s64) from %stack.0) 544 RETQ $rax 545... 546--- 547# Test parsing of unknown size in machine memory operands without alignment. 548# CHECK-LABEL: name: dummy2 549# CHECK: $rax = MOV64rm $rsp, 1, $noreg, 0, $noreg :: (load unknown-size from %stack.0, align 1) 550name: dummy2 551tracksRegLiveness: true 552stack: 553 - { id: 0, size: 4, alignment: 4 } 554body: | 555 bb.0: 556 $rax = MOV64rm $rsp, 1, _, 0, _ :: (load unknown-size from %stack.0) 557 RETQ $rax 558... 559--- 560# Test parsing of unknown size in machine memory operands with alignment. 561# CHECK-LABEL: name: dummy3 562# CHECK: $rax = MOV64rm $rsp, 1, $noreg, 0, $noreg :: (load unknown-size from %stack.0, align 4) 563name: dummy3 564tracksRegLiveness: true 565stack: 566 - { id: 0, size: 4, alignment: 4 } 567body: | 568 bb.0: 569 $rax = MOV64rm $rsp, 1, _, 0, _ :: (load unknown-size from %stack.0, align 4) 570 RETQ $rax 571... 572