diff --git a/llvm/lib/Target/LoongArch/LoongArchISelLowering.h b/llvm/lib/Target/LoongArch/LoongArchISelLowering.h index 9e9ac0b826929..4bb6c049f8d75 100644 --- a/llvm/lib/Target/LoongArch/LoongArchISelLowering.h +++ b/llvm/lib/Target/LoongArch/LoongArchISelLowering.h @@ -238,6 +238,7 @@ class LoongArchTargetLowering : public TargetLowering { bool isShuffleMaskLegal(ArrayRef Mask, EVT VT) const override { return false; } + bool shouldConsiderGEPOffsetSplit() const override { return true; } private: /// Target-specific function used to lower LoongArch calling conventions. diff --git a/llvm/test/Transforms/CodeGenPrepare/LoongArch/splitgep.ll b/llvm/test/Transforms/CodeGenPrepare/LoongArch/splitgep.ll index ca2a16a0ca7ec..20cc25e95adf9 100644 --- a/llvm/test/Transforms/CodeGenPrepare/LoongArch/splitgep.ll +++ b/llvm/test/Transforms/CodeGenPrepare/LoongArch/splitgep.ll @@ -4,9 +4,9 @@ define void @test(ptr %sp, ptr %t, i32 %n) { ; CHECK-LABEL: @test( ; CHECK-NEXT: entry: -; CHECK-NEXT: %s = load ptr, ptr %sp, align 8 -; CHECK-NEXT: br label %while_cond - +; CHECK-NEXT: %splitgep1 = getelementptr i8, ptr %t, i64 80000 +; CHECK-NEXT: %s = load ptr, ptr %sp +; CHECK-NEXT: %splitgep = getelementptr i8, ptr %s, i64 80000 entry: %s = load ptr, ptr %sp br label %while_cond