Skip to content

Commit b685172

Browse files
committed
[PowerPC] need to set CallFrameSize for the pass PPCReduceCRLogicals when insert a new block
1 parent bdc0119 commit b685172

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

llvm/lib/Target/PowerPC/PPCReduceCRLogicals.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,11 @@ 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+
unsigned CallFrameSize = TII->getCallFrameSizeAt(ThisMBB->back());
254+
NewMBB->setCallFrameSize(CallFrameSize);
255+
251256
LLVM_DEBUG(dbgs() << "After splitting, ThisMBB:\n"; ThisMBB->dump());
252257
LLVM_DEBUG(dbgs() << "NewMBB:\n"; NewMBB->dump());
253258
LLVM_DEBUG(dbgs() << "New branch-to block:\n"; NewBRTarget->dump());
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-gnu-linux < %s | FileCheck %s -check-prefix=CHECK
3+
4+
define ptr @xe_migrate_copy(i1 %tobool, i1 %tobool6) {
5+
; CHECK-LABEL: xe_migrate_copy:
6+
; CHECK: # %bb.0: # %entry
7+
; CHECK-NEXT: mfcr 12
8+
; CHECK-NEXT: stw 12, 8(1)
9+
; CHECK-NEXT: mflr 0
10+
; CHECK-NEXT: stdu 1, -176(1)
11+
; CHECK-NEXT: std 0, 192(1)
12+
; CHECK-NEXT: .cfi_def_cfa_offset 176
13+
; CHECK-NEXT: .cfi_offset lr, 16
14+
; CHECK-NEXT: .cfi_offset r27, -40
15+
; CHECK-NEXT: .cfi_offset r28, -32
16+
; CHECK-NEXT: .cfi_offset r29, -24
17+
; CHECK-NEXT: .cfi_offset r30, -16
18+
; CHECK-NEXT: .cfi_offset cr2, 8
19+
; CHECK-NEXT: std 27, 136(1) # 8-byte Folded Spill
20+
; CHECK-NEXT: andi. 4, 4, 1
21+
; CHECK-NEXT: crmove 8, 1
22+
; CHECK-NEXT: andi. 3, 3, 1
23+
; CHECK-NEXT: std 28, 144(1) # 8-byte Folded Spill
24+
; CHECK-NEXT: crmove 9, 1
25+
; CHECK-NEXT: std 29, 152(1) # 8-byte Folded Spill
26+
; CHECK-NEXT: std 30, 160(1) # 8-byte Folded Spill
27+
; CHECK-NEXT: lwz 30, 132(1)
28+
; CHECK-NEXT: ld 28, 8(0)
29+
; CHECK-NEXT: ld 29, 16(0)
30+
; CHECK-NEXT: ld 27, 0(0)
31+
; CHECK-NEXT: std 2, 40(1)
32+
; CHECK-NEXT: b .LBB0_3
33+
; CHECK-NEXT: .LBB0_1: # %if.then36
34+
; CHECK-NEXT: #
35+
; CHECK-NEXT: li 6, 1
36+
; CHECK-NEXT: .LBB0_2: # %if.then36
37+
; CHECK-NEXT: #
38+
; CHECK-NEXT: mtctr 27
39+
; CHECK-NEXT: li 4, 0
40+
; CHECK-NEXT: li 5, 0
41+
; CHECK-NEXT: li 7, 0
42+
; CHECK-NEXT: li 8, 0
43+
; CHECK-NEXT: mr 9, 30
44+
; CHECK-NEXT: li 10, 0
45+
; CHECK-NEXT: mr 2, 28
46+
; CHECK-NEXT: mr 11, 29
47+
; CHECK-NEXT: bctrl
48+
; CHECK-NEXT: ld 2, 40(1)
49+
; CHECK-NEXT: .LBB0_3: # %if.then36
50+
; CHECK-NEXT: #
51+
; CHECK-NEXT: lwz 3, 0(0)
52+
; CHECK-NEXT: cmplwi 3, 0
53+
; CHECK-NEXT: li 3, 0
54+
; CHECK-NEXT: crandc 20, 8, 2
55+
; CHECK-NEXT: std 3, 112(1)
56+
; CHECK-NEXT: bc 12, 20, .LBB0_1
57+
; CHECK-NEXT: # %bb.4: # %if.then36
58+
; CHECK-NEXT: #
59+
; CHECK-NEXT: crand 20, 2, 9
60+
; CHECK-NEXT: li 6, 0
61+
; CHECK-NEXT: bc 4, 20, .LBB0_2
62+
; CHECK-NEXT: b .LBB0_1
63+
entry:
64+
%src_L0 = alloca i64, align 8
65+
br label %if.then36
66+
67+
if.then36: ; preds = %if.then36, %entry
68+
%0 = load i32, ptr null, align 4
69+
%tobool37.not = icmp eq i32 %0, 0
70+
%tobool.tobool6 = select i1 %tobool37.not, i1 %tobool, i1 %tobool6
71+
%1 = load i64, ptr %src_L0, align 8
72+
%conv55 = trunc i64 %1 to i32
73+
%call57 = call i32 null(ptr null, ptr null, i64 0, i1 %tobool.tobool6, i64 0, i1 false, i32 %conv55, i64 0, i1 false)
74+
br label %if.then36
75+
}

0 commit comments

Comments
 (0)