Skip to content

Commit 598f21e

Browse files
authored
[PowerPC] need to set CallFrameSize for the pass PPCReduceCRLogicals when insert a new block (#151017)
In the [ [CodeGen] Store call frame size in MachineBasicBlock](https://reviews.llvm.org/D156113), it mentions When a basic block has been split in the middle of a call sequence. the call frame size may not be zero, it need to set the setCallFrameSize for the new MachineBasicBlock. but in the function `splitMBB(BlockSplitInfo &BSI)` in the llvm/lib/Target/PowerPC/PPCReduceCRLogicals.cpp , it do not setCallFrameSzie for the new MachineBasicBlock `NewMBB`, we will setCallFrameSzie in the patch. the patch fix the crash mention in #144594 (comment)
1 parent e617dc8 commit 598f21e

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed

llvm/lib/Target/PowerPC/PPCReduceCRLogicals.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,10 @@ static bool splitMBB(BlockSplitInfo &BSI) {
248248
}
249249
addIncomingValuesToPHIs(NewBRTarget, ThisMBB, NewMBB, MRI);
250250

251+
// Set the call frame size on ThisMBB to the new basic blocks.
252+
// See https://reviews.llvm.org/D156113.
253+
NewMBB->setCallFrameSize(TII->getCallFrameSizeAt(ThisMBB->back()));
254+
251255
LLVM_DEBUG(dbgs() << "After splitting, ThisMBB:\n"; ThisMBB->dump());
252256
LLVM_DEBUG(dbgs() << "NewMBB:\n"; NewMBB->dump());
253257
LLVM_DEBUG(dbgs() << "New branch-to block:\n"; NewBRTarget->dump());
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -mtriple=powerpc64-unknown-gnu-linux < %s | FileCheck %s -check-prefix=CHECK
3+
; RUN: llc -mtriple=powerpc-unknown-gnu-linux < %s | FileCheck %s -check-prefix=CHECKBE
4+
5+
define i32 @xe_migrate_copy(ptr %m, ptr %dst, ptr %tile, ptr %0, ptr %primary_gt, i1 %tobool4, i1 %tobool9, i64 %1, i32 %conv55, i1 %tobool37.not) nounwind {
6+
; CHECK-LABEL: xe_migrate_copy:
7+
; CHECK: # %bb.0: # %entry
8+
; CHECK-NEXT: mflr 0
9+
; CHECK-NEXT: stdu 1, -128(1)
10+
; CHECK-NEXT: lbz 4, 255(1)
11+
; CHECK-NEXT: andi. 4, 4, 1
12+
; CHECK-NEXT: std 0, 144(1)
13+
; CHECK-NEXT: crmove 20, 1
14+
; CHECK-NEXT: andi. 4, 9, 1
15+
; CHECK-NEXT: lwz 9, 244(1)
16+
; CHECK-NEXT: crmove 21, 1
17+
; CHECK-NEXT: andi. 4, 8, 1
18+
; CHECK-NEXT: li 4, 0
19+
; CHECK-NEXT: std 4, 112(1)
20+
; CHECK-NEXT: crandc 21, 21, 20
21+
; CHECK-NEXT: bc 12, 21, .LBB0_2
22+
; CHECK-NEXT: # %bb.1: # %while.body
23+
; CHECK-NEXT: crand 20, 20, 1
24+
; CHECK-NEXT: li 8, 0
25+
; CHECK-NEXT: bc 4, 20, .LBB0_3
26+
; CHECK-NEXT: .LBB0_2: # %while.body
27+
; CHECK-NEXT: li 8, 1
28+
; CHECK-NEXT: .LBB0_3: # %while.body
29+
; CHECK-NEXT: li 5, 0
30+
; CHECK-NEXT: li 6, 0
31+
; CHECK-NEXT: mr 4, 3
32+
; CHECK-NEXT: li 7, 0
33+
; CHECK-NEXT: li 10, 0
34+
; CHECK-NEXT: bl xe_migrate_ccs_copy
35+
; CHECK-NEXT: nop
36+
; CHECK-NEXT: addi 1, 1, 128
37+
; CHECK-NEXT: ld 0, 16(1)
38+
; CHECK-NEXT: mtlr 0
39+
; CHECK-NEXT: blr
40+
;
41+
; CHECKBE-LABEL: xe_migrate_copy:
42+
; CHECKBE: # %bb.0: # %entry
43+
; CHECKBE-NEXT: mflr 0
44+
; CHECKBE-NEXT: stwu 1, -32(1)
45+
; CHECKBE-NEXT: lbz 4, 55(1)
46+
; CHECKBE-NEXT: li 5, 0
47+
; CHECKBE-NEXT: stw 0, 36(1)
48+
; CHECKBE-NEXT: andi. 4, 4, 1
49+
; CHECKBE-NEXT: crmove 20, 1
50+
; CHECKBE-NEXT: andi. 4, 9, 1
51+
; CHECKBE-NEXT: crmove 21, 1
52+
; CHECKBE-NEXT: andi. 4, 8, 1
53+
; CHECKBE-NEXT: lwz 4, 48(1)
54+
; CHECKBE-NEXT: crandc 21, 21, 20
55+
; CHECKBE-NEXT: stw 5, 24(1)
56+
; CHECKBE-NEXT: stw 5, 20(1)
57+
; CHECKBE-NEXT: stw 5, 16(1)
58+
; CHECKBE-NEXT: stw 4, 12(1)
59+
; CHECKBE-NEXT: bc 12, 21, .LBB0_2
60+
; CHECKBE-NEXT: # %bb.1: # %while.body
61+
; CHECKBE-NEXT: crand 20, 20, 1
62+
; CHECKBE-NEXT: li 8, 0
63+
; CHECKBE-NEXT: bc 4, 20, .LBB0_3
64+
; CHECKBE-NEXT: .LBB0_2: # %while.body
65+
; CHECKBE-NEXT: li 8, 1
66+
; CHECKBE-NEXT: .LBB0_3: # %while.body
67+
; CHECKBE-NEXT: mr 4, 3
68+
; CHECKBE-NEXT: li 6, 0
69+
; CHECKBE-NEXT: li 7, 0
70+
; CHECKBE-NEXT: li 9, 0
71+
; CHECKBE-NEXT: li 10, 0
72+
; CHECKBE-NEXT: stw 8, 8(1)
73+
; CHECKBE-NEXT: bl xe_migrate_ccs_copy
74+
; CHECKBE-NEXT: lwz 0, 36(1)
75+
; CHECKBE-NEXT: addi 1, 1, 32
76+
; CHECKBE-NEXT: mtlr 0
77+
; CHECKBE-NEXT: blr
78+
79+
entry:
80+
br label %while.body
81+
82+
while.body:
83+
%cond53.in = select i1 %tobool37.not, i1 %tobool4, i1 %tobool9
84+
%call57 = call zeroext i32 @xe_migrate_ccs_copy(ptr noundef %m, ptr noundef %m, i64 0, i1 false, i64 0, i1 %cond53.in, i32 %conv55, i64 0, i1 false)
85+
ret i32 %call57
86+
}
87+
88+
declare i32 @xe_migrate_ccs_copy(ptr, ptr, i64, i1, i64, i1, i32, i64, i1)

0 commit comments

Comments
 (0)