[llvm] e5d9ab0 - [Hexagon] Fix insertion point for pointer difference calculation

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 19 14:25:37 PDT 2022


Author: Krzysztof Parzyszek
Date: 2022-10-19T14:23:39-07:00
New Revision: e5d9ab08c39aa674def376dcffead2242a097536

URL: https://github.com/llvm/llvm-project/commit/e5d9ab08c39aa674def376dcffead2242a097536
DIFF: https://github.com/llvm/llvm-project/commit/e5d9ab08c39aa674def376dcffead2242a097536.diff

LOG: [Hexagon] Fix insertion point for pointer difference calculation

HVC::calculatePointerDifference inserts temporary instructions for
simplification, and calulation of known bits. These instructions were
inserted at the end of a basic block (after the terminator), which
caused BB->getTerminator() to return nullptr. This, in turn, caused
a crash when a PHI instruction was examined in computeKnownBits.

Added: 
    llvm/test/CodeGen/Hexagon/autohvx/vector-align-terminator.ll

Modified: 
    llvm/lib/Target/Hexagon/HexagonVectorCombine.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/Hexagon/HexagonVectorCombine.cpp b/llvm/lib/Target/Hexagon/HexagonVectorCombine.cpp
index dc954be8fd040..5754775c061cb 100644
--- a/llvm/lib/Target/Hexagon/HexagonVectorCombine.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonVectorCombine.cpp
@@ -1930,7 +1930,7 @@ auto HexagonVectorCombine::calculatePointerDifference(Value *Ptr0,
                                                       Value *Ptr1) const
     -> std::optional<int> {
   struct Builder : IRBuilder<> {
-    Builder(BasicBlock *B) : IRBuilder<>(B) {}
+    Builder(BasicBlock *B) : IRBuilder<>(B->getTerminator()) {}
     ~Builder() {
       for (Instruction *I : llvm::reverse(ToErase))
         I->eraseFromParent();

diff  --git a/llvm/test/CodeGen/Hexagon/autohvx/vector-align-terminator.ll b/llvm/test/CodeGen/Hexagon/autohvx/vector-align-terminator.ll
new file mode 100644
index 0000000000000..7679346e3ea5a
--- /dev/null
+++ b/llvm/test/CodeGen/Hexagon/autohvx/vector-align-terminator.ll
@@ -0,0 +1,33 @@
+; RUN: llc -march=hexagon < %s | FileCheck %s
+
+; Check that this doesn't crash.
+; CHECK: jumpr r31
+
+target triple = "hexagon"
+
+define void @f0() #0 {
+b0:
+  br label %b1
+
+b1:                                               ; preds = %b0, %b1
+  %v0 = phi i32 [ %v9, %b1 ], [ 0, %b0 ]
+  %v1 = zext i32 %v0 to i64
+  %v2 = getelementptr inbounds float, ptr null, i64 %v1
+  store float poison, ptr %v2, align 16
+  %v3 = or i32 %v0, 3
+  %v4 = zext i32 %v3 to i64
+  %v5 = getelementptr inbounds float, ptr null, i64 %v4
+  store float poison, ptr %v5, align 4
+  %v6 = add nuw nsw i32 %v0, 4
+  %v7 = icmp ult i32 %v3, 63
+  %v8 = select i1 %v7, i1 true, i1 false
+  %v9 = select i1 %v7, i32 %v6, i32 0
+  br i1 %v8, label %b1, label %b2, !prof !0
+
+b2:
+  ret void
+}
+
+attributes #0 = { "target-features"="+hvxv69,+hvx-length128b,+hvx-qfloat,-hvx-ieee-fp" }
+
+!0 = !{!"branch_weights", i32 -2147481600, i32 2048}


        


More information about the llvm-commits mailing list