Skip to content

Commit 8e4b089

Browse files
authored
[LoongArch] Return true from shouldConsiderGEPOffsetSplit (#88371)
If not performing gep splits can prevent important optimizations, such as preventing the element indices / member offsets from being (partially) folded into load/store instruction immediates.
1 parent e8232c3 commit 8e4b089

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

llvm/lib/Target/LoongArch/LoongArchISelLowering.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ class LoongArchTargetLowering : public TargetLowering {
238238
bool isShuffleMaskLegal(ArrayRef<int> Mask, EVT VT) const override {
239239
return false;
240240
}
241+
bool shouldConsiderGEPOffsetSplit() const override { return true; }
241242

242243
private:
243244
/// Target-specific function used to lower LoongArch calling conventions.

llvm/test/Transforms/CodeGenPrepare/LoongArch/splitgep.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
define void @test(ptr %sp, ptr %t, i32 %n) {
55
; CHECK-LABEL: @test(
66
; CHECK-NEXT: entry:
7-
; CHECK-NEXT: %s = load ptr, ptr %sp, align 8
8-
; CHECK-NEXT: br label %while_cond
9-
7+
; CHECK-NEXT: %splitgep1 = getelementptr i8, ptr %t, i64 80000
8+
; CHECK-NEXT: %s = load ptr, ptr %sp
9+
; CHECK-NEXT: %splitgep = getelementptr i8, ptr %s, i64 80000
1010
entry:
1111
%s = load ptr, ptr %sp
1212
br label %while_cond

0 commit comments

Comments
 (0)