[llvm] 4851dbb - [Hexagon] Use getSignedConstant for RoundTo8 XForm
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 2 00:58:00 PST 2024
Author: Nikita Popov
Date: 2024-12-02T09:57:51+01:00
New Revision: 4851dbb8d6f1c00ad382ff4780293ca9a743c609
URL: https://github.com/llvm/llvm-project/commit/4851dbb8d6f1c00ad382ff4780293ca9a743c609
DIFF: https://github.com/llvm/llvm-project/commit/4851dbb8d6f1c00ad382ff4780293ca9a743c609.diff
LOG: [Hexagon] Use getSignedConstant for RoundTo8 XForm
To handle negative offset addrmodes correctly.
Fixes https://github.com/llvm/llvm-project/pull/117558#issuecomment-2510208764.
Added:
llvm/test/CodeGen/Hexagon/addrmode-neg-offset.ll
Modified:
llvm/lib/Target/Hexagon/HexagonPatterns.td
Removed:
################################################################################
diff --git a/llvm/lib/Target/Hexagon/HexagonPatterns.td b/llvm/lib/Target/Hexagon/HexagonPatterns.td
index 52fa73f3798c37..3f468c01d19f9e 100644
--- a/llvm/lib/Target/Hexagon/HexagonPatterns.td
+++ b/llvm/lib/Target/Hexagon/HexagonPatterns.td
@@ -2675,7 +2675,7 @@ def s30_2ProperPred : PatLeaf<(i32 imm), [{
}]>;
def RoundTo8 : SDNodeXForm<imm, [{
int32_t Imm = N->getSExtValue();
- return CurDAG->getTargetConstant(Imm & -8, SDLoc(N), MVT::i32);
+ return CurDAG->getSignedTargetConstant(Imm & -8, SDLoc(N), MVT::i32);
}]>;
let AddedComplexity = 150 in
diff --git a/llvm/test/CodeGen/Hexagon/addrmode-neg-offset.ll b/llvm/test/CodeGen/Hexagon/addrmode-neg-offset.ll
new file mode 100644
index 00000000000000..3c3c7c05e7710a
--- /dev/null
+++ b/llvm/test/CodeGen/Hexagon/addrmode-neg-offset.ll
@@ -0,0 +1,9 @@
+; RUN: llc -mtriple=hexagon < %s | FileCheck %s
+
+; CHECK: r0 = add(r0,#4)
+; CHECK: memd(r0+#-16) =
+define void @neg_gep_store(ptr %ptr) {
+ %gep = getelementptr i8, ptr %ptr, i32 -12
+ store i64 0, ptr %gep, align 8
+ ret void
+}
More information about the llvm-commits
mailing list