[llvm] 52a880d - [Hexagon] Make usesQF helpers robust (#188338)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 27 06:48:15 PDT 2026
Author: Fateme Hosseini
Date: 2026-03-27T08:48:11-05:00
New Revision: 52a880d30ba6cba38579ad7f51289d9ebe0c3719
URL: https://github.com/llvm/llvm-project/commit/52a880d30ba6cba38579ad7f51289d9ebe0c3719
DIFF: https://github.com/llvm/llvm-project/commit/52a880d30ba6cba38579ad7f51289d9ebe0c3719.diff
LOG: [Hexagon] Make usesQF helpers robust (#188338)
Relax usesQF*Operand to return false for indices greater than the first
three inputs instead of asserting.
Added:
llvm/test/CodeGen/Hexagon/qf-helpers-out-of-range.ll
Modified:
llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp b/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
index e688f94e25872..732256f61556f 100644
--- a/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp
@@ -4909,9 +4909,10 @@ bool HexagonInstrInfo::usesQF32Operand(MachineInstr *MI, unsigned Index) const {
return Info.Input1 == HexagonII::RegType::QF32 ||
Info.Input2 == HexagonII::RegType::QF32 ||
Info.Input3 == HexagonII::RegType::QF32;
- default:
- llvm_unreachable("Incorrect input machine operand index encountered!");
+ default: // No instruction with more than 3 operands uses QF32.
+ return false;
}
+ return false;
}
bool HexagonInstrInfo::usesQF16Operand(MachineInstr *MI, unsigned Index) const {
@@ -4927,9 +4928,10 @@ bool HexagonInstrInfo::usesQF16Operand(MachineInstr *MI, unsigned Index) const {
return Info.Input1 == HexagonII::RegType::QF16 ||
Info.Input2 == HexagonII::RegType::QF16 ||
Info.Input3 == HexagonII::RegType::QF16;
- default:
- llvm_unreachable("Incorrect input machine operand index encountered!");
+ default: // No instruction with more than 3 operands uses QF16.
+ return false;
}
+ return false;
}
bool HexagonInstrInfo::usesQFOperand(MachineInstr *MI, unsigned Index) const {
diff --git a/llvm/test/CodeGen/Hexagon/qf-helpers-out-of-range.ll b/llvm/test/CodeGen/Hexagon/qf-helpers-out-of-range.ll
new file mode 100644
index 0000000000000..aa094e91e87d2
--- /dev/null
+++ b/llvm/test/CodeGen/Hexagon/qf-helpers-out-of-range.ll
@@ -0,0 +1,12 @@
+; RUN: llc -O2 -march=hexagon -mcpu=hexagonv79 -o - %s | FileCheck %s
+
+; Crash regression: ensures Hexagon QF helpers (usesQF*Operand) does
+; not crash during codegen.
+
+; CHECK-LABEL: qf_helpers_qf32
+define <32 x float> @qf_helpers_qf32(<32 x float> %a, <32 x float> %b) {
+entry:
+ %mul = fmul <32 x float> %a, %b
+ %add = fadd <32 x float> %mul, %a
+ ret <32 x float> %add
+}
More information about the llvm-commits
mailing list