[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