Skip to content

Commit 5aeeebc

Browse files
authored
[NFC] add a pre-commit test case for patch 122741 (#135247)
[NFC] add a pre-commit test case for patch [Eliminating li of 0 into arg registers of unused arguments](#122741) The test case tests that extend poison are lower to undef and also test there are redendunt instrution load 0 into argument registers for unused arguments.
1 parent a80a802 commit 5aeeebc

File tree

1 file changed

+225
-0
lines changed

1 file changed

+225
-0
lines changed
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
;; Tests that extending poison results in undef.
2+
;; Also tests that there are redundant instructions loading 0 into argument registers for unused arguments.
3+
4+
; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -debug-only=isel \
5+
; RUN: %s -o - 2>&1 | FileCheck --check-prefix=CHECKISEL32 %s
6+
7+
; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -debug-only=isel \
8+
; RUN: %s -o - 2>&1 | FileCheck --check-prefix=CHECKISEL64 %s
9+
10+
; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -filetype=asm \
11+
; RUN: %s -o - 2>&1 | FileCheck --check-prefix=CHECKASM32 %s
12+
13+
; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -filetype=asm \
14+
; RUN: %s -o - 2>&1 | FileCheck --check-prefix=CHECKASM64 %s
15+
16+
define void @bar32(i32 zeroext %var1, i32 noundef zeroext %var2) local_unnamed_addr {
17+
entry:
18+
tail call void @foo32(i32 noundef zeroext %var2)
19+
ret void
20+
}
21+
22+
declare void @foo32(i32 noundef zeroext) local_unnamed_addr
23+
24+
define void @test32() local_unnamed_addr {
25+
entry:
26+
tail call void @bar32(i32 zeroext poison, i32 noundef zeroext 255)
27+
ret void
28+
}
29+
30+
; CHECKISEL32: Initial selection DAG: %bb.0 'test32:entry'
31+
; CHECKISEL32-NEXT: SelectionDAG has 18 nodes:
32+
; CHECKISEL32-NEXT: t1: i32 = GlobalAddress<ptr @bar32> 0
33+
; CHECKISEL32-NEXT: t7: i32 = Register $r1
34+
; CHECKISEL32-NEXT: t0: ch,glue = EntryToken
35+
; CHECKISEL32-NEXT: t6: ch,glue = callseq_start t0, TargetConstant:i32<56>, TargetConstant:i32<0>
36+
; CHECKISEL32-NEXT: t9: ch,glue = CopyToReg t6, Register:i32 $r3, poison:i32
37+
; CHECKISEL32-NEXT: t11: ch,glue = CopyToReg t9, Register:i32 $r4, Constant:i32<255>, t9:1
38+
; CHECKISEL32-NEXT: t15: ch,glue = PPCISD::CALL_NOP t11, MCSymbol:i32, Register:i32 $r3, Register:i32 $r4, Register:i32 $r2, RegisterMask:Untyped, t11:1
39+
; CHECKISEL32-NEXT: t16: ch,glue = callseq_end t15, TargetConstant:i32<56>, TargetConstant:i32<0>, t15:1
40+
; CHECKISEL32-NEXT: t17: ch = PPCISD::RET_GLUE t16
41+
42+
; CHECKASM32: .test32:
43+
; CHECKASM32-NEXT: # %bb.0: # %entry
44+
; CHECKASM32-NEXT: mflr 0
45+
; CHECKASM32-NEXT: stwu 1, -64(1)
46+
; CHECKASM32-NEXT: li 4, 255
47+
; CHECKASM32-NEXT: stw 0, 72(1)
48+
; CHECKASM32-NEXT: bl .bar32
49+
; CHECKASM32-NEXT: nop
50+
; CHECKASM32-NEXT: addi 1, 1, 64
51+
; CHECKASM32-NEXT: lwz 0, 8(1)
52+
; CHECKASM32-NEXT: mtlr 0
53+
; CHECKASM32-NEXT: blr
54+
55+
; CHECKISEL64: Initial selection DAG: %bb.0 'test32:entry'
56+
; CHECKISEL64-NEXT: SelectionDAG has 20 nodes:
57+
; CHECKISEL64-NEXT: t1: i64 = GlobalAddress<ptr @bar32> 0
58+
; CHECKISEL64-NEXT: t2: i32 = poison
59+
; CHECKISEL64-NEXT: t3: i32 = Constant<255>
60+
; CHECKISEL64-NEXT: t7: i64 = Register $x1
61+
; CHECKISEL64-NEXT: t0: ch,glue = EntryToken
62+
; CHECKISEL64-NEXT: t6: ch,glue = callseq_start t0, TargetConstant:i64<112>, TargetConstant:i64<0>
63+
; CHECKISEL64-NEXT: t11: ch,glue = CopyToReg t6, Register:i64 $x3, Constant:i64<0>
64+
; CHECKISEL64-NEXT: t13: ch,glue = CopyToReg t11, Register:i64 $x4, Constant:i64<255>, t11:1
65+
; CHECKISEL64-NEXT: t17: ch,glue = PPCISD::CALL_NOP t13, MCSymbol:i64, Register:i64 $x3, Register:i64 $x4, Register:i64 $x2, RegisterMask:Untyped, t13:1
66+
; CHECKISEL64-NEXT: t18: ch,glue = callseq_end t17, TargetConstant:i64<112>, TargetConstant:i64<0>, t17:1
67+
; CHECKISEL64-NEXT: t19: ch = PPCISD::RET_GLUE t18
68+
69+
; CHECKASM64: .test32:
70+
; CHECKASM64-NEXT: # %bb.0: # %entry
71+
; CHECKASM64-NEXT: mflr 0
72+
; CHECKASM64-NEXT: stdu 1, -112(1)
73+
; CHECKASM64-NEXT: li 3, 0
74+
; CHECKASM64-NEXT: li 4, 255
75+
; CHECKASM64-NEXT: std 0, 128(1)
76+
; CHECKASM64-NEXT: bl .bar32
77+
; CHECKASM64-NEXT: nop
78+
; CHECKASM64-NEXT: addi 1, 1, 112
79+
; CHECKASM64-NEXT: ld 0, 16(1)
80+
; CHECKASM64-NEXT: mtlr 0
81+
; CHECKASM64-NEXT: blr
82+
83+
define void @bar8(i8 zeroext %var1, i8 noundef zeroext %var2) local_unnamed_addr {
84+
entry:
85+
tail call void @foo8(i8 noundef zeroext %var2)
86+
ret void
87+
}
88+
89+
declare void @foo8(i8 noundef zeroext) local_unnamed_addr
90+
91+
define void @test8() local_unnamed_addr {
92+
entry:
93+
tail call void @bar8(i8 zeroext poison, i8 noundef zeroext 255)
94+
ret void
95+
}
96+
97+
; CHECKISEL32: Initial selection DAG: %bb.0 'test8:entry'
98+
; CHECKISEL32-NEXT: SelectionDAG has 20 nodes:
99+
; CHECKISEL32-NEXT: t1: i32 = GlobalAddress<ptr @bar8> 0
100+
; CHECKISEL32-NEXT: t2: i8 = poison
101+
; CHECKISEL32-NEXT: t3: i8 = Constant<-1>
102+
; CHECKISEL32-NEXT: t9: i32 = Register $r1
103+
; CHECKISEL32-NEXT: t0: ch,glue = EntryToken
104+
; CHECKISEL32-NEXT: t8: ch,glue = callseq_start t0, TargetConstant:i32<56>, TargetConstant:i32<0>
105+
; CHECKISEL32-NEXT: t11: ch,glue = CopyToReg t8, Register:i32 $r3, Constant:i32<0>
106+
; CHECKISEL32-NEXT: t13: ch,glue = CopyToReg t11, Register:i32 $r4, Constant:i32<255>, t11:1
107+
; CHECKISEL32-NEXT: t17: ch,glue = PPCISD::CALL_NOP t13, MCSymbol:i32, Register:i32 $r3, Register:i32 $r4, Register:i32 $r2, RegisterMask:Untyped, t13:1
108+
; CHECKISEL32-NEXT: t18: ch,glue = callseq_end t17, TargetConstant:i32<56>, TargetConstant:i32<0>, t17:1
109+
; CHECKISEL32-NEXT: t19: ch = PPCISD::RET_GLUE t18
110+
111+
; CHECKASM32: .test8:
112+
; CHECKASM32-NEXT: # %bb.0: # %entry
113+
; CHECKASM32-NEXT: mflr 0
114+
; CHECKASM32-NEXT: stwu 1, -64(1)
115+
; CHECKASM32-NEXT: li 3, 0
116+
; CHECKASM32-NEXT: li 4, 255
117+
; CHECKASM32-NEXT: stw 0, 72(1)
118+
; CHECKASM32-NEXT: bl .bar8
119+
; CHECKASM32-NEXT: nop
120+
; CHECKASM32-NEXT: addi 1, 1, 64
121+
; CHECKASM32-NEXT: lwz 0, 8(1)
122+
; CHECKASM32-NEXT: mtlr 0
123+
; CHECKASM32-NEXT: blr
124+
125+
; CHECKASM64: .test8:
126+
; CHECKASM64-NEXT: # %bb.0: # %entry
127+
; CHECKASM64-NEXT: mflr 0
128+
; CHECKASM64-NEXT: stdu 1, -112(1)
129+
; CHECKASM64-NEXT: li 3, 0
130+
; CHECKASM64-NEXT: li 4, 255
131+
; CHECKASM64-NEXT: std 0, 128(1)
132+
; CHECKASM64-NEXT: bl .bar8
133+
; CHECKASM64-NEXT: nop
134+
; CHECKASM64-NEXT: addi 1, 1, 112
135+
; CHECKASM64-NEXT: ld 0, 16(1)
136+
; CHECKASM64-NEXT: mtlr 0
137+
; CHECKASM64-NEXT: blr
138+
139+
; CHECKISEL64: Initial selection DAG: %bb.0 'test8:entry'
140+
; CHECKISEL64-NEXT: SelectionDAG has 22 nodes:
141+
; CHECKISEL64-NEXT: t1: i64 = GlobalAddress<ptr @bar8> 0
142+
; CHECKISEL64-NEXT: t2: i8 = poison
143+
; CHECKISEL64-NEXT: t3: i8 = Constant<-1>
144+
; CHECKISEL64-NEXT: t4: i32 = Constant<0>
145+
; CHECKISEL64-NEXT: t5: i32 = Constant<255>
146+
; CHECKISEL64-NEXT: t9: i64 = Register $x1
147+
; CHECKISEL64-NEXT: t0: ch,glue = EntryToken
148+
; CHECKISEL64-NEXT: t8: ch,glue = callseq_start t0, TargetConstant:i64<112>, TargetConstant:i64<0>
149+
; CHECKISEL64-NEXT: t13: ch,glue = CopyToReg t8, Register:i64 $x3, Constant:i64<0>
150+
; CHECKISEL64-NEXT: t15: ch,glue = CopyToReg t13, Register:i64 $x4, Constant:i64<255>, t13:1
151+
; CHECKISEL64-NEXT: t19: ch,glue = PPCISD::CALL_NOP t15, MCSymbol:i64, Register:i64 $x3, Register:i64 $x4, Register:i64 $x2, RegisterMask:Untyped, t15:1
152+
; CHECKISEL64-NEXT: t20: ch,glue = callseq_end t19, TargetConstant:i64<112>, TargetConstant:i64<0>, t19:1
153+
; CHECKISEL64-NEXT: t21: ch = PPCISD::RET_GLUE t20
154+
155+
156+
define void @bar64(i64 zeroext %var1, i64 noundef zeroext %var2) local_unnamed_addr {
157+
entry:
158+
tail call void @foo64(i64 noundef zeroext %var2)
159+
ret void
160+
}
161+
162+
declare void @foo64(i64 noundef zeroext) local_unnamed_addr
163+
164+
; Function Attrs: noinline nounwind
165+
define void @test64() local_unnamed_addr {
166+
entry:
167+
tail call void @bar64(i64 zeroext poison, i64 noundef zeroext 255)
168+
ret void
169+
}
170+
171+
; CHECKISEL32: Initial selection DAG: %bb.0 'test64:entry'
172+
; CHECKISEL32-NEXT: SelectionDAG has 27 nodes:
173+
; CHECKISEL32-NEXT: t1: i32 = GlobalAddress<ptr @bar64> 0
174+
; CHECKISEL32-NEXT: t3: i64 = Constant<255>
175+
; CHECKISEL32-NEXT: t12: i32 = Register $r1
176+
; CHECKISEL32-NEXT: t0: ch,glue = EntryToken
177+
; CHECKISEL32-NEXT: t11: ch,glue = callseq_start t0, TargetConstant:i32<56>, TargetConstant:i32<0>
178+
; CHECKISEL32-NEXT: t5: i32 = extract_element poison:i64, Constant:i32<1>
179+
; CHECKISEL32-NEXT: t14: ch,glue = CopyToReg t11, Register:i32 $r3, t5
180+
; CHECKISEL32-NEXT: t7: i32 = extract_element poison:i64, Constant:i32<0>
181+
; CHECKISEL32-NEXT: t16: ch,glue = CopyToReg t14, Register:i32 $r4, t7, t14:1
182+
; CHECKISEL32-NEXT: t18: ch,glue = CopyToReg t16, Register:i32 $r5, Constant:i32<0>, t16:1
183+
; CHECKISEL32-NEXT: t20: ch,glue = CopyToReg t18, Register:i32 $r6, Constant:i32<255>, t18:1
184+
; CHECKISEL32-NEXT: t24: ch,glue = PPCISD::CALL_NOP t20, MCSymbol:i32, Register:i32 $r3, Register:i32 $r4, Register:i32 $r5, Register:i32 $r6, Register:i32 $r2, RegisterMask:Untyped, t20:1
185+
; CHECKISEL32-NEXT: t25: ch,glue = callseq_end t24, TargetConstant:i32<56>, TargetConstant:i32<0>, t24:1
186+
; CHECKISEL32-NEXT: t26: ch = PPCISD::RET_GLUE t25
187+
188+
; CHECKASM32: .test64:
189+
; CHECKASM32-NEXT: # %bb.0: # %entry
190+
; CHECKASM32-NEXT: mflr 0
191+
; CHECKASM32-NEXT: stwu 1, -64(1)
192+
; CHECKASM32-NEXT: li 5, 0
193+
; CHECKASM32-NEXT: li 6, 255
194+
; CHECKASM32-NEXT: stw 0, 72(1)
195+
; CHECKASM32-NEXT: bl .bar64
196+
; CHECKASM32-NEXT: nop
197+
; CHECKASM32-NEXT: addi 1, 1, 64
198+
; CHECKASM32-NEXT: lwz 0, 8(1)
199+
; CHECKASM32-NEXT: mtlr 0
200+
; CHECKASM32-NEXT: blr
201+
202+
; CHECKISEL64: Initial selection DAG: %bb.0 'test64:entry'
203+
; CHECKISEL64-NEXT: SelectionDAG has 18 nodes:
204+
; CHECKISEL64-NEXT: t1: i64 = GlobalAddress<ptr @bar64> 0
205+
; CHECKISEL64-NEXT: t7: i64 = Register $x1
206+
; CHECKISEL64-NEXT: t0: ch,glue = EntryToken
207+
; CHECKISEL64-NEXT: t6: ch,glue = callseq_start t0, TargetConstant:i64<112>, TargetConstant:i64<0>
208+
; CHECKISEL64-NEXT: t9: ch,glue = CopyToReg t6, Register:i64 $x3, poison:i64
209+
; CHECKISEL64-NEXT: t11: ch,glue = CopyToReg t9, Register:i64 $x4, Constant:i64<255>, t9:1
210+
; CHECKISEL64-NEXT: t15: ch,glue = PPCISD::CALL_NOP t11, MCSymbol:i64, Register:i64 $x3, Register:i64 $x4, Register:i64 $x2, RegisterMask:Untyped, t11:1
211+
; CHECKISEL64-NEXT: t16: ch,glue = callseq_end t15, TargetConstant:i64<112>, TargetConstant:i64<0>, t15:1
212+
; CHECKISEL64-NEXT: t17: ch = PPCISD::RET_GLUE t16
213+
214+
; CHECKASM64: .test64:
215+
; CHECKASM64-NEXT: # %bb.0: # %entry
216+
; CHECKASM64-NEXT: mflr 0
217+
; CHECKASM64-NEXT: stdu 1, -112(1)
218+
; CHECKASM64-NEXT: li 4, 255
219+
; CHECKASM64-NEXT: std 0, 128(1)
220+
; CHECKASM64-NEXT: bl .bar64
221+
; CHECKASM64-NEXT: nop
222+
; CHECKASM64-NEXT: addi 1, 1, 112
223+
; CHECKASM64-NEXT: ld 0, 16(1)
224+
; CHECKASM64-NEXT: mtlr 0
225+
; CHECKASM64-NEXT: blr

0 commit comments

Comments
 (0)