[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