44# Test register live range that is split from rematerializing. The live range should
55# start with Slot_EarlyClobber instead of Slot_Register. Machineverifer can check it.
66
7- --- |
8- @g = external constant [2 x i32], align 4
9-
10- ; Function Attrs : nounwind
11- define i32 @test(i32 noundef %a) # 0 {
12- entry :
13- %0 = xor i32 %a, %a
14- tail call void asm sideeffect "", "~{ebp},~{eax},~{ebx},~{ecx},~{edx},~{esi},~{edi},~{dirflag},~{fpsr},~{flags}"()
15- br i1 undef, label %if, label %else
16-
17- if : ; preds = %entry
18- %add = add i32 %0, 1
19- br label %exit
20-
21- else : ; preds = %entry
22- %shl = shl i32 %0, 1
23- br label %exit
24-
25- exit : ; preds = %else, %if
26- %phi = phi i32 [ %add, %if ], [ %shl, %else ]
27- ret i32 %phi
28- }
29-
30- attributes # 0 = { nounwind }
31-
327...
338---
349name : test
3510alignment : 16
3611tracksRegLiveness : true
37- registers :
38- - { id: 0, class: gr32_abcd }
39- - { id: 1, class: gr32 }
40- - { id: 2, class: gr32 }
41- - { id: 3, class: gr32 }
42- - { id: 4, class: gr8 }
43- - { id: 5, class: gr32 }
4412frameInfo :
4513 maxAlignment : 4
4614fixedStack :
@@ -53,28 +21,42 @@ body: |
5321 ; CHECK-NEXT: liveins: $ebp, $ebx, $edi, $esi
5422 ; CHECK-NEXT: {{ $}}
5523 ; CHECK-NEXT: frame-setup PUSH32r killed $ebp, implicit-def $esp, implicit $esp
24+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 8
5625 ; CHECK-NEXT: frame-setup PUSH32r killed $ebx, implicit-def $esp, implicit $esp
26+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 12
5727 ; CHECK-NEXT: frame-setup PUSH32r killed $edi, implicit-def $esp, implicit $esp
28+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
5829 ; CHECK-NEXT: frame-setup PUSH32r killed $esi, implicit-def $esp, implicit $esp
30+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 20
5931 ; CHECK-NEXT: $esp = frame-setup SUB32ri $esp, 12, implicit-def dead $eflags
32+ ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 32
33+ ; CHECK-NEXT: CFI_INSTRUCTION offset $esi, -20
34+ ; CHECK-NEXT: CFI_INSTRUCTION offset $edi, -16
35+ ; CHECK-NEXT: CFI_INSTRUCTION offset $ebx, -12
36+ ; CHECK-NEXT: CFI_INSTRUCTION offset $ebp, -8
6037 ; CHECK-NEXT: INLINEASM &"", 1 /* sideeffect attdialect */, 12 /* clobber */, implicit-def dead early-clobber $ebp, 12 /* clobber */, implicit-def dead early-clobber $eax, 12 /* clobber */, implicit-def dead early-clobber $ebx, 12 /* clobber */, implicit-def dead early-clobber $ecx, 12 /* clobber */, implicit-def dead early-clobber $edx, 12 /* clobber */, implicit-def dead early-clobber $esi, 12 /* clobber */, implicit-def dead early-clobber $edi, 12 /* clobber */, implicit-def dead early-clobber $df, 12 /* clobber */, implicit-def early-clobber $fpsw, 12 /* clobber */, implicit-def dead early-clobber $eflags
6138 ; CHECK-NEXT: early-clobber renamable $eax = XOR32rr undef $eax, undef $eax, implicit-def dead $eflags
6239 ; CHECK-NEXT: TEST8rr renamable $al, renamable $al, implicit-def $eflags
6340 ; CHECK-NEXT: JCC_1 %bb.2, 5, implicit $eflags
6441 ; CHECK-NEXT: {{ $}}
65- ; CHECK-NEXT: bb.1.if :
42+ ; CHECK-NEXT: bb.1:
6643 ; CHECK-NEXT: successors: %bb.2(0x80000000)
6744 ; CHECK-NEXT: {{ $}}
6845 ; CHECK-NEXT: renamable $eax = MOV32ri 1
6946 ; CHECK-NEXT: {{ $}}
70- ; CHECK-NEXT: bb.2.exit :
47+ ; CHECK-NEXT: bb.2:
7148 ; CHECK-NEXT: liveins: $eax
7249 ; CHECK-NEXT: {{ $}}
7350 ; CHECK-NEXT: $esp = frame-destroy ADD32ri $esp, 12, implicit-def dead $eflags
51+ ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 20
7452 ; CHECK-NEXT: $esi = frame-destroy POP32r implicit-def $esp, implicit $esp
53+ ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16
7554 ; CHECK-NEXT: $edi = frame-destroy POP32r implicit-def $esp, implicit $esp
55+ ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 12
7656 ; CHECK-NEXT: $ebx = frame-destroy POP32r implicit-def $esp, implicit $esp
57+ ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 8
7758 ; CHECK-NEXT: $ebp = frame-destroy POP32r implicit-def $esp, implicit $esp
59+ ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 4
7860 ; CHECK-NEXT: RET 0, $eax
7961 bb.0.entry:
8062 successors: %bb.1, %bb.2
@@ -86,15 +68,15 @@ body: |
8668 JCC_1 %bb.2, 5, implicit killed $eflags
8769 JMP_1 %bb.1
8870
89- bb.1.if :
71+ bb.1:
9072 %1:gr32 = MOV32ri 1
9173 %5:gr32 = COPY killed %1
9274 JMP_1 %bb.3
9375
94- bb.2.else :
76+ bb.2:
9577 %5:gr32 = COPY killed %0
9678
97- bb.3.exit :
79+ bb.3:
9880 %3:gr32 = COPY killed %5
9981 $eax = COPY killed %3
10082 RET 0, killed $eax
0 commit comments