Skip to content

Commit 514ac16

Browse files
Ting WangTing Wang
authored andcommitted
[PowerPC][NFC] Add virtual call to show redundant spill of vector registers
Reviewed By: lkail Differential Revision: https://reviews.llvm.org/D133921
1 parent e12f6c2 commit 514ac16

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -O0 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr10 < %s | \
3+
; RUN: FileCheck --check-prefix=CHECK %s
4+
; RUN: llc -O0 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr10 -vec-extabi < %s | \
5+
; RUN: FileCheck --check-prefix=CHECK-VEXT %s
6+
7+
define dso_local noundef signext i32 @virtualCall(ptr noundef %b) #0 {
8+
; CHECK-LABEL: virtualCall:
9+
; CHECK: # %bb.0: # %entry
10+
; CHECK-NEXT: mflr 0
11+
; CHECK-NEXT: std 0, 16(1)
12+
; CHECK-NEXT: stdu 1, -320(1)
13+
; CHECK-NEXT: stxv 52, 128(1) # 16-byte Folded Spill
14+
; CHECK-NEXT: stxv 53, 144(1) # 16-byte Folded Spill
15+
; CHECK-NEXT: stxv 54, 160(1) # 16-byte Folded Spill
16+
; CHECK-NEXT: stxv 55, 176(1) # 16-byte Folded Spill
17+
; CHECK-NEXT: stxv 56, 192(1) # 16-byte Folded Spill
18+
; CHECK-NEXT: stxv 57, 208(1) # 16-byte Folded Spill
19+
; CHECK-NEXT: stxv 58, 224(1) # 16-byte Folded Spill
20+
; CHECK-NEXT: stxv 59, 240(1) # 16-byte Folded Spill
21+
; CHECK-NEXT: stxv 60, 256(1) # 16-byte Folded Spill
22+
; CHECK-NEXT: stxv 61, 272(1) # 16-byte Folded Spill
23+
; CHECK-NEXT: stxv 62, 288(1) # 16-byte Folded Spill
24+
; CHECK-NEXT: stxv 63, 304(1) # 16-byte Folded Spill
25+
; CHECK-NEXT: std 3, 120(1)
26+
; CHECK-NEXT: ld 3, 120(1)
27+
; CHECK-NEXT: ld 4, 0(3)
28+
; CHECK-NEXT: ld 4, 0(4)
29+
; CHECK-NEXT: mr 5, 2
30+
; CHECK-NEXT: std 5, 40(1)
31+
; CHECK-NEXT: ld 5, 8(4)
32+
; CHECK-NEXT: ld 11, 16(4)
33+
; CHECK-NEXT: ld 4, 0(4)
34+
; CHECK-NEXT: mr 2, 5
35+
; CHECK-NEXT: mtctr 4
36+
; CHECK-NEXT: bctrl
37+
; CHECK-NEXT: ld 2, 40(1)
38+
; CHECK-NEXT: # kill: def $r3 killed $r3 killed $x3
39+
; CHECK-NEXT: extsw 3, 3
40+
; CHECK-NEXT: lxv 63, 304(1) # 16-byte Folded Reload
41+
; CHECK-NEXT: lxv 62, 288(1) # 16-byte Folded Reload
42+
; CHECK-NEXT: lxv 61, 272(1) # 16-byte Folded Reload
43+
; CHECK-NEXT: lxv 60, 256(1) # 16-byte Folded Reload
44+
; CHECK-NEXT: lxv 59, 240(1) # 16-byte Folded Reload
45+
; CHECK-NEXT: lxv 58, 224(1) # 16-byte Folded Reload
46+
; CHECK-NEXT: lxv 57, 208(1) # 16-byte Folded Reload
47+
; CHECK-NEXT: lxv 56, 192(1) # 16-byte Folded Reload
48+
; CHECK-NEXT: lxv 55, 176(1) # 16-byte Folded Reload
49+
; CHECK-NEXT: lxv 54, 160(1) # 16-byte Folded Reload
50+
; CHECK-NEXT: lxv 53, 144(1) # 16-byte Folded Reload
51+
; CHECK-NEXT: lxv 52, 128(1) # 16-byte Folded Reload
52+
; CHECK-NEXT: addi 1, 1, 320
53+
; CHECK-NEXT: ld 0, 16(1)
54+
; CHECK-NEXT: mtlr 0
55+
; CHECK-NEXT: blr
56+
;
57+
; CHECK-VEXT-LABEL: virtualCall:
58+
; CHECK-VEXT: # %bb.0: # %entry
59+
; CHECK-VEXT-NEXT: mflr 0
60+
; CHECK-VEXT-NEXT: std 0, 16(1)
61+
; CHECK-VEXT-NEXT: stdu 1, -128(1)
62+
; CHECK-VEXT-NEXT: std 3, 120(1)
63+
; CHECK-VEXT-NEXT: ld 3, 120(1)
64+
; CHECK-VEXT-NEXT: ld 4, 0(3)
65+
; CHECK-VEXT-NEXT: ld 4, 0(4)
66+
; CHECK-VEXT-NEXT: mr 5, 2
67+
; CHECK-VEXT-NEXT: std 5, 40(1)
68+
; CHECK-VEXT-NEXT: ld 5, 8(4)
69+
; CHECK-VEXT-NEXT: ld 11, 16(4)
70+
; CHECK-VEXT-NEXT: ld 4, 0(4)
71+
; CHECK-VEXT-NEXT: mr 2, 5
72+
; CHECK-VEXT-NEXT: mtctr 4
73+
; CHECK-VEXT-NEXT: bctrl
74+
; CHECK-VEXT-NEXT: ld 2, 40(1)
75+
; CHECK-VEXT-NEXT: # kill: def $r3 killed $r3 killed $x3
76+
; CHECK-VEXT-NEXT: extsw 3, 3
77+
; CHECK-VEXT-NEXT: addi 1, 1, 128
78+
; CHECK-VEXT-NEXT: ld 0, 16(1)
79+
; CHECK-VEXT-NEXT: mtlr 0
80+
; CHECK-VEXT-NEXT: blr
81+
entry:
82+
%b.addr = alloca ptr, align 8
83+
store ptr %b, ptr %b.addr, align 8
84+
%0 = load ptr, ptr %b.addr, align 8
85+
%vtable = load ptr, ptr %0, align 8
86+
%vfn = getelementptr inbounds ptr, ptr %vtable, i64 0
87+
%1 = load ptr, ptr %vfn, align 8
88+
%call = call noundef signext i32 %1(ptr noundef nonnull align 8 dereferenceable(8) %0)
89+
ret i32 %call
90+
}

0 commit comments

Comments
 (0)