Skip to content

Commit 549413f

Browse files
committed
[AArch64][GlobalISel] Protect against folding loads across basic blocks.
isObviouslySafeToFold can look between a load and an instruction it can be folded into, to check that no other memory operations prevents the fold. It doesn't handle multiple basic blocks which we needs to guard against.
1 parent 797330e commit 549413f

File tree

2 files changed

+10
-19
lines changed

2 files changed

+10
-19
lines changed

llvm/lib/CodeGen/GlobalISel/GIMatchTableExecutor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,5 +98,5 @@ bool GIMatchTableExecutor::isObviouslySafeToFold(MachineInstr &MI,
9898
return true;
9999
}
100100

101-
return true;
101+
return !MI.mayLoad();
102102
}

llvm/test/CodeGen/AArch64/neon-vector-splat.ll

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -126,24 +126,15 @@ define <2 x ptr> @shuffle8(ptr %P) {
126126
}
127127

128128
define <4 x i32> @multiblock_aliasing(ptr %P, i1 %c) {
129-
; CHECK-SD-LABEL: multiblock_aliasing:
130-
; CHECK-SD: // %bb.0: // %entry
131-
; CHECK-SD-NEXT: ldr q0, [x0]
132-
; CHECK-SD-NEXT: tbz w1, #0, .LBB9_2
133-
; CHECK-SD-NEXT: // %bb.1: // %then
134-
; CHECK-SD-NEXT: stp xzr, xzr, [x0]
135-
; CHECK-SD-NEXT: .LBB9_2: // %else
136-
; CHECK-SD-NEXT: dup v0.4s, v0.s[0]
137-
; CHECK-SD-NEXT: ret
138-
;
139-
; CHECK-GI-LABEL: multiblock_aliasing:
140-
; CHECK-GI: // %bb.0: // %entry
141-
; CHECK-GI-NEXT: tbz w1, #0, .LBB9_2
142-
; CHECK-GI-NEXT: // %bb.1: // %then
143-
; CHECK-GI-NEXT: stp xzr, xzr, [x0]
144-
; CHECK-GI-NEXT: .LBB9_2: // %else
145-
; CHECK-GI-NEXT: ld1r { v0.4s }, [x0]
146-
; CHECK-GI-NEXT: ret
129+
; CHECK-LABEL: multiblock_aliasing:
130+
; CHECK: // %bb.0: // %entry
131+
; CHECK-NEXT: ldr q0, [x0]
132+
; CHECK-NEXT: tbz w1, #0, .LBB9_2
133+
; CHECK-NEXT: // %bb.1: // %then
134+
; CHECK-NEXT: stp xzr, xzr, [x0]
135+
; CHECK-NEXT: .LBB9_2: // %else
136+
; CHECK-NEXT: dup v0.4s, v0.s[0]
137+
; CHECK-NEXT: ret
147138
entry:
148139
%lv2ptr = load <4 x i32>, ptr %P
149140
br i1 %c, label %then, label %else

0 commit comments

Comments
 (0)