[llvm] r325580 - [Hexagon] Fix alignment calculation of stack objects in Hexagon bit tracker

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 20 06:29:43 PST 2018


Author: kparzysz
Date: Tue Feb 20 06:29:43 2018
New Revision: 325580

URL: http://llvm.org/viewvc/llvm-project?rev=325580&view=rev
Log:
[Hexagon] Fix alignment calculation of stack objects in Hexagon bit tracker

Added:
    llvm/trunk/test/CodeGen/Hexagon/bit-addr-align.mir
Modified:
    llvm/trunk/lib/Target/Hexagon/HexagonBitSimplify.cpp
    llvm/trunk/lib/Target/Hexagon/HexagonBitTracker.cpp
    llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp

Modified: llvm/trunk/lib/Target/Hexagon/HexagonBitSimplify.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonBitSimplify.cpp?rev=325580&r1=325579&r2=325580&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonBitSimplify.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonBitSimplify.cpp Tue Feb 20 06:29:43 2018
@@ -184,9 +184,7 @@ namespace {
   public:
     static char ID;
 
-    HexagonBitSimplify() : MachineFunctionPass(ID) {
-      initializeHexagonBitSimplifyPass(*PassRegistry::getPassRegistry());
-    }
+    HexagonBitSimplify() : MachineFunctionPass(ID) {}
 
     StringRef getPassName() const override {
       return "Hexagon bit simplification";
@@ -257,10 +255,10 @@ namespace {
 
 char HexagonBitSimplify::ID = 0;
 
-INITIALIZE_PASS_BEGIN(HexagonBitSimplify, "hexbit",
+INITIALIZE_PASS_BEGIN(HexagonBitSimplify, "hexagon-bit-simplify",
       "Hexagon bit simplification", false, false)
 INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
-INITIALIZE_PASS_END(HexagonBitSimplify, "hexbit",
+INITIALIZE_PASS_END(HexagonBitSimplify, "hexagon-bit-simplify",
       "Hexagon bit simplification", false, false)
 
 bool HexagonBitSimplify::visitBlock(MachineBasicBlock &B, Transformation &T,

Modified: llvm/trunk/lib/Target/Hexagon/HexagonBitTracker.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonBitTracker.cpp?rev=325580&r1=325579&r2=325580&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonBitTracker.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonBitTracker.cpp Tue Feb 20 06:29:43 2018
@@ -325,7 +325,7 @@ bool HexagonEvaluator::evaluate(const Ma
       int FI = op(1).getIndex();
       int Off = op(2).getImm();
       unsigned A = MFI.getObjectAlignment(FI) + std::abs(Off);
-      unsigned L = Log2_32(A);
+      unsigned L = countTrailingZeros(A);
       RegisterCell RC = RegisterCell::self(Reg[0].Reg, W0);
       RC.fill(0, L, BT::BitValue::Zero);
       return rr0(RC, Outputs);

Modified: llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp?rev=325580&r1=325579&r2=325580&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp Tue Feb 20 06:29:43 2018
@@ -121,6 +121,7 @@ SchedCustomRegistry("hexagon", "Run Hexa
 
 namespace llvm {
   extern char &HexagonExpandCondsetsID;
+  void initializeHexagonBitSimplifyPass(PassRegistry&);
   void initializeHexagonConstExtendersPass(PassRegistry&);
   void initializeHexagonEarlyIfConversionPass(PassRegistry&);
   void initializeHexagonExpandCondsetsPass(PassRegistry&);
@@ -185,6 +186,7 @@ extern "C" void LLVMInitializeHexagonTar
   RegisterTargetMachine<HexagonTargetMachine> X(getTheHexagonTarget());
 
   PassRegistry &PR = *PassRegistry::getPassRegistry();
+  initializeHexagonBitSimplifyPass(PR);
   initializeHexagonConstExtendersPass(PR);
   initializeHexagonEarlyIfConversionPass(PR);
   initializeHexagonGenMuxPass(PR);

Added: llvm/trunk/test/CodeGen/Hexagon/bit-addr-align.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/bit-addr-align.mir?rev=325580&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Hexagon/bit-addr-align.mir (added)
+++ llvm/trunk/test/CodeGen/Hexagon/bit-addr-align.mir Tue Feb 20 06:29:43 2018
@@ -0,0 +1,18 @@
+# RUN: llc -march=hexagon -run-pass hexagon-bit-simplify %s -o - | FileCheck %s
+
+# Hexagon bit tracker incorrectly calculated address alignment and removed
+# a necessary A2_andir instruction. Make sure it remains.
+# CHECK: A2_andir %0, -8
+
+---
+name: fred
+stack:
+  - { id: 0, type: default, size: 64, alignment: 64 }
+tracksRegLiveness: true
+body: |
+  bb.0:
+    %0:intregs = PS_fi %stack.0, 60
+    %1:intregs = A2_andir %0, -8
+    %2:doubleregs = L2_loadrd_io %1, 8
+...
+




More information about the llvm-commits mailing list