[PATCH] D69018: [AArch64] Fix offset calculation

Shoaib Meenai via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 16 11:42:56 PDT 2019


smeenai updated this revision to Diff 225280.
smeenai marked 2 inline comments as done.
smeenai added a comment.

Update test


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69018/new/

https://reviews.llvm.org/D69018

Files:
  llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
  llvm/lib/Target/AArch64/AArch64InstrInfo.h
  llvm/test/CodeGen/AArch64/framelayout-large-offset.mir


Index: llvm/test/CodeGen/AArch64/framelayout-large-offset.mir
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/AArch64/framelayout-large-offset.mir
@@ -0,0 +1,18 @@
+# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass=prologepilog %s -o - | FileCheck %s
+---
+name: framelayout_large_offset
+tracksRegLiveness: true
+fixedStack:
+  - { id: 0, offset: 0, size: 1}
+body: |
+  bb.0:
+    $x0 = LDURXi %fixed-stack.0, -264
+    RET_ReallyLR
+...
+# CHECK:      name:            framelayout_large_offset
+# CHECK:      body:             |
+# CHECK-NEXT:   bb.0:
+# CHECK-NEXT:     $x8 = SUBXri $sp, 8, 0
+# CHECK-NEXT:     $x0 = LDURXi killed $x8, -256
+# CHECK-NEXT:     RET_ReallyLR
+
Index: llvm/lib/Target/AArch64/AArch64InstrInfo.h
===================================================================
--- llvm/lib/Target/AArch64/AArch64InstrInfo.h
+++ llvm/lib/Target/AArch64/AArch64InstrInfo.h
@@ -335,7 +335,7 @@
 int isAArch64FrameOffsetLegal(const MachineInstr &MI, StackOffset &Offset,
                               bool *OutUseUnscaledOp = nullptr,
                               unsigned *OutUnscaledOp = nullptr,
-                              int *EmittableOffset = nullptr);
+                              int64_t *EmittableOffset = nullptr);
 
 static inline bool isUncondBranchOpcode(int Opc) { return Opc == AArch64::B; }
 
Index: llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
===================================================================
--- llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
+++ llvm/lib/Target/AArch64/AArch64InstrInfo.cpp
@@ -3368,7 +3368,7 @@
                                     StackOffset &SOffset,
                                     bool *OutUseUnscaledOp,
                                     unsigned *OutUnscaledOp,
-                                    int *EmittableOffset) {
+                                    int64_t *EmittableOffset) {
   // Set output values in case of early exit.
   if (EmittableOffset)
     *EmittableOffset = 0;
@@ -3430,7 +3430,7 @@
          "Cannot have remainder when using unscaled op");
 
   assert(MinOff < MaxOff && "Unexpected Min/Max offsets");
-  int NewOffset = Offset / Scale;
+  int64_t NewOffset = Offset / Scale;
   if (MinOff <= NewOffset && NewOffset <= MaxOff)
     Offset = Remainder;
   else {
@@ -3471,7 +3471,7 @@
     return true;
   }
 
-  int NewOffset;
+  int64_t NewOffset;
   unsigned UnscaledOp;
   bool UseUnscaledOp;
   int Status = isAArch64FrameOffsetLegal(MI, Offset, &UseUnscaledOp,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D69018.225280.patch
Type: text/x-patch
Size: 2547 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191016/48d7f7e6/attachment.bin>


More information about the llvm-commits mailing list