[llvm] [HashRecognize] Fix compiler hang on dense use-def chain (PR #211711)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 24 03:08:12 PDT 2026
================
@@ -0,0 +1,171 @@
+; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -passes='print<hash-recognize>' -disable-output %s 2>&1 | FileCheck %s
+
+; This loop hangs if digRecurrence doesn't keep track of previously visited
+; instructions since most instructions have multiple uses.
+define void @dense_use_def_chain() {
+; CHECK-LABEL: 'dense_use_def_chain'
+; CHECK-NEXT: Did not find a hash algorithm
+; CHECK-NEXT: Reason: Unable to find conditional recurrence
+;
+bbl:
+ %load = load i32, ptr null, align 4
+ %sitofp = sitofp i32 %load to float
+ br label %bbl1
+
+bbl1: ; preds = %bbl1, %bbl
+ %phi = phi i32 [ 0, %bbl ], [ %add, %bbl1 ]
+ %phi2 = phi float [ poison, %bbl ], [ %select144, %bbl1 ]
+ %fcmp = fcmp une float %phi2, 0.000000e+00
+ %select = select i1 %fcmp, float %sitofp, float %phi2
+ %fcmp3 = fcmp une float %select, 0.000000e+00
+ %select4 = select i1 %fcmp3, float %sitofp, float %select
+ %fcmp5 = fcmp une float %select4, 0.000000e+00
+ %select6 = select i1 %fcmp5, float %sitofp, float %select4
+ %fcmp7 = fcmp une float %select6, 0.000000e+00
+ %select8 = select i1 %fcmp7, float %sitofp, float %select6
+ %fcmp9 = fcmp une float %select8, 0.000000e+00
+ %select10 = select i1 %fcmp9, float %sitofp, float %select8
+ %fcmp11 = fcmp une float %select10, 0.000000e+00
+ %select12 = select i1 %fcmp11, float %sitofp, float %select10
+ %fcmp13 = fcmp une float %select12, 0.000000e+00
+ %select14 = select i1 %fcmp13, float %sitofp, float %select12
+ %fcmp15 = fcmp une float %select14, 0.000000e+00
+ %select16 = select i1 %fcmp15, float %sitofp, float %select14
+ %fcmp17 = fcmp une float %select16, 0.000000e+00
+ %select18 = select i1 %fcmp17, float %sitofp, float %select16
+ %fcmp19 = fcmp une float %select18, 0.000000e+00
+ %select20 = select i1 %fcmp19, float %sitofp, float %select18
+ %fcmp21 = fcmp une float %select20, 0.000000e+00
+ %select22 = select i1 %fcmp21, float %sitofp, float %select20
+ %fcmp23 = fcmp une float %select22, 0.000000e+00
+ %select24 = select i1 %fcmp23, float %sitofp, float %select22
+ %fcmp25 = fcmp une float %select24, 0.000000e+00
+ %select26 = select i1 %fcmp25, float %sitofp, float %select24
+ %fcmp27 = fcmp une float %select26, 0.000000e+00
+ %select28 = select i1 %fcmp27, float %sitofp, float %select26
+ %fcmp29 = fcmp une float %select28, 0.000000e+00
+ %select30 = select i1 %fcmp29, float %sitofp, float %select28
+ %fcmp31 = fcmp une float %select30, 0.000000e+00
+ %select32 = select i1 %fcmp31, float %sitofp, float %select30
+ %fcmp33 = fcmp une float %select32, 0.000000e+00
+ %select34 = select i1 %fcmp33, float %sitofp, float %select32
+ %fcmp35 = fcmp une float %select34, 0.000000e+00
+ %select36 = select i1 %fcmp35, float %sitofp, float %select34
+ %fcmp37 = fcmp une float %select36, 0.000000e+00
+ %select38 = select i1 %fcmp37, float %sitofp, float %select36
+ %fcmp39 = fcmp une float %select38, 0.000000e+00
+ %select40 = select i1 %fcmp39, float %sitofp, float %select38
+ %fcmp41 = fcmp une float %select40, 0.000000e+00
+ %select42 = select i1 %fcmp41, float %sitofp, float %select40
+ %fcmp43 = fcmp une float %select42, 0.000000e+00
+ %select44 = select i1 %fcmp43, float %sitofp, float %select42
+ %fcmp45 = fcmp une float %select44, 0.000000e+00
+ %select46 = select i1 %fcmp45, float %sitofp, float %select44
+ %fcmp47 = fcmp une float %select46, 0.000000e+00
+ %select48 = select i1 %fcmp47, float %sitofp, float %select46
+ %fcmp49 = fcmp une float %select48, 0.000000e+00
+ %select50 = select i1 %fcmp49, float %sitofp, float %select48
+ %fcmp51 = fcmp une float %select50, 0.000000e+00
+ %select52 = select i1 %fcmp51, float %sitofp, float %select50
+ %fcmp53 = fcmp une float %select52, 0.000000e+00
+ %select54 = select i1 %fcmp53, float %sitofp, float %select52
+ %fcmp55 = fcmp une float %select54, 0.000000e+00
+ %select56 = select i1 %fcmp55, float %sitofp, float %select54
+ %fcmp57 = fcmp une float %select56, 0.000000e+00
+ %select58 = select i1 %fcmp57, float %sitofp, float %select56
+ %fcmp59 = fcmp une float %select58, 0.000000e+00
+ %select60 = select i1 %fcmp59, float %sitofp, float %select58
+ %fcmp61 = fcmp une float %select60, 0.000000e+00
+ %select62 = select i1 %fcmp61, float %sitofp, float %select60
+ %fcmp63 = fcmp une float %select62, 0.000000e+00
+ %select64 = select i1 %fcmp63, float %sitofp, float %select62
+ %fcmp65 = fcmp une float %select64, 0.000000e+00
+ %select66 = select i1 %fcmp65, float %sitofp, float %select64
+ %fcmp67 = fcmp une float %select66, 0.000000e+00
+ %select68 = select i1 %fcmp67, float %sitofp, float %select66
+ %fcmp69 = fcmp une float %select68, 0.000000e+00
+ %select70 = select i1 %fcmp69, float %sitofp, float %select68
+ %fcmp71 = fcmp une float %select70, 0.000000e+00
+ %select72 = select i1 %fcmp71, float %sitofp, float %select70
+ %fcmp73 = fcmp une float %select72, 0.000000e+00
+ %select74 = select i1 %fcmp73, float %sitofp, float %select72
+ %fcmp75 = fcmp une float %select74, 0.000000e+00
+ %select76 = select i1 %fcmp75, float %sitofp, float %select74
+ %fcmp77 = fcmp une float %select76, 0.000000e+00
+ %select78 = select i1 %fcmp77, float %sitofp, float %select76
+ %fcmp79 = fcmp une float %select78, 0.000000e+00
+ %select80 = select i1 %fcmp79, float %sitofp, float %select78
+ %fcmp81 = fcmp une float %select80, 0.000000e+00
+ %select82 = select i1 %fcmp81, float %sitofp, float %select80
+ %fcmp83 = fcmp une float %select82, 0.000000e+00
+ %select84 = select i1 %fcmp83, float %sitofp, float %select82
+ %fcmp85 = fcmp une float %select84, 0.000000e+00
+ %select86 = select i1 %fcmp85, float %sitofp, float %select84
+ %fcmp87 = fcmp une float %select86, 0.000000e+00
+ %select88 = select i1 %fcmp87, float %sitofp, float %select86
+ %fcmp89 = fcmp une float %select88, 0.000000e+00
+ %select90 = select i1 %fcmp89, float %sitofp, float %select88
+ %fcmp91 = fcmp une float %select90, 0.000000e+00
+ %select92 = select i1 %fcmp91, float %sitofp, float %select90
+ %fcmp93 = fcmp une float %select92, 0.000000e+00
+ %select94 = select i1 %fcmp93, float %sitofp, float %select92
+ %fcmp95 = fcmp une float %select94, 0.000000e+00
+ %select96 = select i1 %fcmp95, float %sitofp, float %select94
+ %fcmp97 = fcmp une float %select96, 0.000000e+00
+ %select98 = select i1 %fcmp97, float %sitofp, float %select96
+ %fcmp99 = fcmp une float %select98, 0.000000e+00
+ %select100 = select i1 %fcmp99, float %sitofp, float %select98
+ %fcmp101 = fcmp une float %select100, 0.000000e+00
+ %select102 = select i1 %fcmp101, float %sitofp, float %select100
+ %fcmp103 = fcmp une float %select102, 0.000000e+00
+ %select104 = select i1 %fcmp103, float %sitofp, float %select102
+ %fcmp105 = fcmp une float %select104, 0.000000e+00
+ %select106 = select i1 %fcmp105, float %sitofp, float %select104
+ %fcmp107 = fcmp une float %select106, 0.000000e+00
+ %select108 = select i1 %fcmp107, float %sitofp, float %select106
+ %fcmp109 = fcmp une float %select108, 0.000000e+00
+ %select110 = select i1 %fcmp109, float %sitofp, float %select108
+ %fcmp111 = fcmp une float %select110, 0.000000e+00
+ %select112 = select i1 %fcmp111, float %sitofp, float %select110
+ %fcmp113 = fcmp une float %select112, 0.000000e+00
+ %select114 = select i1 %fcmp113, float %sitofp, float %select112
+ %fcmp115 = fcmp une float %select114, 0.000000e+00
+ %select116 = select i1 %fcmp115, float %sitofp, float %select114
+ %fcmp117 = fcmp une float %select116, 0.000000e+00
+ %select118 = select i1 %fcmp117, float %sitofp, float %select116
+ %fcmp119 = fcmp une float %select118, 0.000000e+00
+ %select120 = select i1 %fcmp119, float %sitofp, float %select118
+ %fcmp121 = fcmp une float %select120, 0.000000e+00
+ %select122 = select i1 %fcmp121, float %sitofp, float %select120
+ %fcmp123 = fcmp une float %select122, 0.000000e+00
+ %select124 = select i1 %fcmp123, float %sitofp, float %select122
+ %fcmp125 = fcmp une float %select124, 0.000000e+00
+ %select126 = select i1 %fcmp125, float %sitofp, float %select124
+ %fcmp127 = fcmp une float %select126, 0.000000e+00
+ %select128 = select i1 %fcmp127, float %sitofp, float %select126
+ %fcmp129 = fcmp une float %select128, 0.000000e+00
+ %select130 = select i1 %fcmp129, float %sitofp, float %select128
+ %fcmp131 = fcmp une float %select130, 0.000000e+00
+ %select132 = select i1 %fcmp131, float %sitofp, float %select130
+ %fcmp133 = fcmp une float %select132, 0.000000e+00
+ %select134 = select i1 %fcmp133, float %sitofp, float %select132
+ %fcmp135 = fcmp une float %select134, 0.000000e+00
+ %select136 = select i1 %fcmp135, float %sitofp, float %select134
+ %fcmp137 = fcmp une float %select136, 0.000000e+00
+ %select138 = select i1 %fcmp137, float %sitofp, float %select136
+ %fcmp139 = fcmp une float %select138, 0.000000e+00
+ %select140 = select i1 %fcmp139, float %sitofp, float %select138
+ %fcmp141 = fcmp une float %select140, 0.000000e+00
+ %select142 = select i1 %fcmp141, float %sitofp, float %select140
+ %fcmp143 = fcmp une float %select142, 0.000000e+00
+ %select144 = select i1 %fcmp143, float %sitofp, float %select142
+ %add = add nuw nsw i32 %phi, 1
+ %icmp = icmp eq i32 %add, 3
+ br i1 %icmp, label %bbl145, label %bbl1
+
+bbl145: ; preds = %bbl1
----------------
artagnon wrote:
```suggestion
exit:
```
https://github.com/llvm/llvm-project/pull/211711
More information about the llvm-commits
mailing list