[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