xref: /llvm-project/llvm/test/Analysis/IVUsers/deep_recursion_in_scev.ll (revision 1aee1e1f4c4b504becc06521546de992a662694b)
1f3a928e2SArthur Eubanks; RUN: opt < %s -passes='print<iv-users>'
232754aa3SSerguei Katkov; This is a regression test against very slow execution...
332754aa3SSerguei Katkov; In bad case it should fail by timeout.
432754aa3SSerguei Katkovtarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1"
532754aa3SSerguei Katkovtarget triple = "x86_64-unknown-linux-gnu"
632754aa3SSerguei Katkov
7*1aee1e1fSNikita Popovdefine void @quux(ptr addrspace(1) %arg, ptr addrspace(1) %arg1) {
832754aa3SSerguei Katkovbb:
9*1aee1e1fSNikita Popov  %tmp2 = getelementptr inbounds i8, ptr addrspace(1) %arg, i64 80
10*1aee1e1fSNikita Popov  %tmp3 = bitcast ptr addrspace(1) %tmp2 to ptr addrspace(1)
11*1aee1e1fSNikita Popov  %tmp4 = load ptr addrspace(1), ptr addrspace(1) %tmp3, align 8
12*1aee1e1fSNikita Popov  %tmp5 = getelementptr inbounds i8, ptr addrspace(1) %tmp4, i64 8
13*1aee1e1fSNikita Popov  %tmp6 = bitcast ptr addrspace(1) %tmp5 to ptr addrspace(1)
14*1aee1e1fSNikita Popov  %tmp7 = load ptr addrspace(1), ptr addrspace(1) %tmp6, align 8
15*1aee1e1fSNikita Popov  %tmp8 = getelementptr inbounds i8, ptr addrspace(1) %tmp7, i64 8
16*1aee1e1fSNikita Popov  %tmp9 = bitcast ptr addrspace(1) %tmp8 to ptr addrspace(1)
17*1aee1e1fSNikita Popov  %tmp10 = load i32, ptr addrspace(1) %tmp9, align 8
1832754aa3SSerguei Katkov  %tmp11 = udiv i32 65, %tmp10
19*1aee1e1fSNikita Popov  %tmp12 = getelementptr inbounds i8, ptr addrspace(1) %arg, i64 80
20*1aee1e1fSNikita Popov  %tmp13 = bitcast ptr addrspace(1) %tmp12 to ptr addrspace(1)
21*1aee1e1fSNikita Popov  %tmp14 = load ptr addrspace(1), ptr addrspace(1) %tmp13, align 8
22*1aee1e1fSNikita Popov  %tmp15 = getelementptr inbounds i8, ptr addrspace(1) %tmp14, i64 8
23*1aee1e1fSNikita Popov  %tmp16 = bitcast ptr addrspace(1) %tmp15 to ptr addrspace(1)
24*1aee1e1fSNikita Popov  %tmp17 = load ptr addrspace(1), ptr addrspace(1) %tmp16, align 8
25*1aee1e1fSNikita Popov  %tmp18 = getelementptr inbounds i8, ptr addrspace(1) %arg1, i64 8
26*1aee1e1fSNikita Popov  %tmp19 = bitcast ptr addrspace(1) %tmp18 to ptr addrspace(1)
27*1aee1e1fSNikita Popov  %tmp20 = load i32, ptr addrspace(1) %tmp19, align 8, !range !0
28*1aee1e1fSNikita Popov  %tmp21 = getelementptr inbounds i8, ptr addrspace(1) %tmp17, i64 8
29*1aee1e1fSNikita Popov  %tmp22 = bitcast ptr addrspace(1) %tmp21 to ptr addrspace(1)
30*1aee1e1fSNikita Popov  %tmp23 = load i32, ptr addrspace(1) %tmp22, align 8, !range !0
3132754aa3SSerguei Katkov  %tmp24 = zext i32 %tmp23 to i64
3232754aa3SSerguei Katkov  %tmp25 = and i32 %tmp11, 7
3332754aa3SSerguei Katkov  %tmp26 = icmp ugt i32 %tmp10, 9
3432754aa3SSerguei Katkov  br i1 %tmp26, label %bb27, label %bb46
3532754aa3SSerguei Katkov
3632754aa3SSerguei Katkovbb27:                                             ; preds = %bb117, %bb
3732754aa3SSerguei Katkov  %tmp28 = phi i32 [ 8, %bb ], [ %tmp112, %bb117 ]
3832754aa3SSerguei Katkov  br label %bb29
3932754aa3SSerguei Katkov
4032754aa3SSerguei Katkovbb29:                                             ; preds = %bb40, %bb27
4132754aa3SSerguei Katkov  %tmp30 = phi i32 [ %tmp43, %bb40 ], [ %tmp28, %bb27 ]
4232754aa3SSerguei Katkov  %tmp31 = phi i32 [ %tmp41, %bb40 ], [ %tmp25, %bb27 ]
4332754aa3SSerguei Katkov  br label %bb32
4432754aa3SSerguei Katkov
4532754aa3SSerguei Katkovbb32:                                             ; preds = %bb37, %bb29
4632754aa3SSerguei Katkov  %tmp33 = phi i64 [ 0, %bb29 ], [ %tmp38, %bb37 ]
4732754aa3SSerguei Katkov  %tmp34 = trunc i64 %tmp33 to i32
4832754aa3SSerguei Katkov  %tmp35 = add i32 %tmp30, %tmp34
4932754aa3SSerguei Katkov  %tmp36 = icmp ult i32 %tmp35, %tmp20
5032754aa3SSerguei Katkov  br i1 %tmp36, label %bb37, label %bb56
5132754aa3SSerguei Katkov
5232754aa3SSerguei Katkovbb37:                                             ; preds = %bb32
5332754aa3SSerguei Katkov  %tmp38 = add nuw nsw i64 %tmp33, 1
5432754aa3SSerguei Katkov  %tmp39 = icmp ult i64 %tmp38, %tmp24
5532754aa3SSerguei Katkov  br i1 %tmp39, label %bb32, label %bb40
5632754aa3SSerguei Katkov
5732754aa3SSerguei Katkovbb40:                                             ; preds = %bb37
5832754aa3SSerguei Katkov  %tmp41 = add i32 %tmp31, -1
5932754aa3SSerguei Katkov  %tmp42 = trunc i64 %tmp38 to i32
6032754aa3SSerguei Katkov  %tmp43 = add i32 %tmp30, %tmp42
6132754aa3SSerguei Katkov  %tmp44 = icmp eq i32 %tmp41, 0
6232754aa3SSerguei Katkov  br i1 %tmp44, label %bb45, label %bb29
6332754aa3SSerguei Katkov
6432754aa3SSerguei Katkovbb45:                                             ; preds = %bb40
6532754aa3SSerguei Katkov  ret void
6632754aa3SSerguei Katkov
6732754aa3SSerguei Katkovbb46:                                             ; preds = %bb
6832754aa3SSerguei Katkov  %tmp47 = sub nsw i32 %tmp11, %tmp25
6932754aa3SSerguei Katkov  br label %bb48
7032754aa3SSerguei Katkov
7132754aa3SSerguei Katkovbb48:                                             ; preds = %bb117, %bb46
7232754aa3SSerguei Katkov  %tmp49 = phi i32 [ 8, %bb46 ], [ %tmp112, %bb117 ]
7332754aa3SSerguei Katkov  %tmp50 = phi i32 [ %tmp47, %bb46 ], [ %tmp118, %bb117 ]
7432754aa3SSerguei Katkov  br label %bb51
7532754aa3SSerguei Katkov
7632754aa3SSerguei Katkovbb51:                                             ; preds = %bb58, %bb48
7732754aa3SSerguei Katkov  %tmp52 = phi i64 [ 0, %bb48 ], [ %tmp59, %bb58 ]
7832754aa3SSerguei Katkov  %tmp53 = phi i32 [ %tmp49, %bb48 ], [ %tmp54, %bb58 ]
7932754aa3SSerguei Katkov  %tmp54 = add i32 %tmp53, 1
8032754aa3SSerguei Katkov  %tmp55 = icmp ult i32 %tmp53, %tmp20
8132754aa3SSerguei Katkov  br i1 %tmp55, label %bb58, label %bb56
8232754aa3SSerguei Katkov
8332754aa3SSerguei Katkovbb56:                                             ; preds = %bb109, %bb101, %bb93, %bb85, %bb77, %bb69, %bb61, %bb51, %bb32
8432754aa3SSerguei Katkov  unreachable
8532754aa3SSerguei Katkov
8632754aa3SSerguei Katkovbb58:                                             ; preds = %bb51
8732754aa3SSerguei Katkov  %tmp59 = add nuw nsw i64 %tmp52, 1
8832754aa3SSerguei Katkov  %tmp60 = icmp ult i64 %tmp59, %tmp24
8932754aa3SSerguei Katkov  br i1 %tmp60, label %bb51, label %bb61
9032754aa3SSerguei Katkov
9132754aa3SSerguei Katkovbb61:                                             ; preds = %bb66, %bb58
9232754aa3SSerguei Katkov  %tmp62 = phi i64 [ %tmp67, %bb66 ], [ 0, %bb58 ]
9332754aa3SSerguei Katkov  %tmp63 = phi i32 [ %tmp64, %bb66 ], [ %tmp54, %bb58 ]
9432754aa3SSerguei Katkov  %tmp64 = add i32 %tmp63, 1
9532754aa3SSerguei Katkov  %tmp65 = icmp ult i32 %tmp63, %tmp20
9632754aa3SSerguei Katkov  br i1 %tmp65, label %bb66, label %bb56
9732754aa3SSerguei Katkov
9832754aa3SSerguei Katkovbb66:                                             ; preds = %bb61
9932754aa3SSerguei Katkov  %tmp67 = add nuw nsw i64 %tmp62, 1
10032754aa3SSerguei Katkov  %tmp68 = icmp ult i64 %tmp67, %tmp24
10132754aa3SSerguei Katkov  br i1 %tmp68, label %bb61, label %bb69
10232754aa3SSerguei Katkov
10332754aa3SSerguei Katkovbb69:                                             ; preds = %bb74, %bb66
10432754aa3SSerguei Katkov  %tmp70 = phi i64 [ %tmp75, %bb74 ], [ 0, %bb66 ]
10532754aa3SSerguei Katkov  %tmp71 = phi i32 [ %tmp72, %bb74 ], [ %tmp64, %bb66 ]
10632754aa3SSerguei Katkov  %tmp72 = add i32 %tmp71, 1
10732754aa3SSerguei Katkov  %tmp73 = icmp ult i32 %tmp71, %tmp20
10832754aa3SSerguei Katkov  br i1 %tmp73, label %bb74, label %bb56
10932754aa3SSerguei Katkov
11032754aa3SSerguei Katkovbb74:                                             ; preds = %bb69
11132754aa3SSerguei Katkov  %tmp75 = add nuw nsw i64 %tmp70, 1
11232754aa3SSerguei Katkov  %tmp76 = icmp ult i64 %tmp75, %tmp24
11332754aa3SSerguei Katkov  br i1 %tmp76, label %bb69, label %bb77
11432754aa3SSerguei Katkov
11532754aa3SSerguei Katkovbb77:                                             ; preds = %bb82, %bb74
11632754aa3SSerguei Katkov  %tmp78 = phi i64 [ %tmp83, %bb82 ], [ 0, %bb74 ]
11732754aa3SSerguei Katkov  %tmp79 = phi i32 [ %tmp80, %bb82 ], [ %tmp72, %bb74 ]
11832754aa3SSerguei Katkov  %tmp80 = add i32 %tmp79, 1
11932754aa3SSerguei Katkov  %tmp81 = icmp ult i32 %tmp79, %tmp20
12032754aa3SSerguei Katkov  br i1 %tmp81, label %bb82, label %bb56
12132754aa3SSerguei Katkov
12232754aa3SSerguei Katkovbb82:                                             ; preds = %bb77
12332754aa3SSerguei Katkov  %tmp83 = add nuw nsw i64 %tmp78, 1
12432754aa3SSerguei Katkov  %tmp84 = icmp ult i64 %tmp83, %tmp24
12532754aa3SSerguei Katkov  br i1 %tmp84, label %bb77, label %bb85
12632754aa3SSerguei Katkov
12732754aa3SSerguei Katkovbb85:                                             ; preds = %bb90, %bb82
12832754aa3SSerguei Katkov  %tmp86 = phi i64 [ %tmp91, %bb90 ], [ 0, %bb82 ]
12932754aa3SSerguei Katkov  %tmp87 = phi i32 [ %tmp88, %bb90 ], [ %tmp80, %bb82 ]
13032754aa3SSerguei Katkov  %tmp88 = add i32 %tmp87, 1
13132754aa3SSerguei Katkov  %tmp89 = icmp ult i32 %tmp87, %tmp20
13232754aa3SSerguei Katkov  br i1 %tmp89, label %bb90, label %bb56
13332754aa3SSerguei Katkov
13432754aa3SSerguei Katkovbb90:                                             ; preds = %bb85
13532754aa3SSerguei Katkov  %tmp91 = add nuw nsw i64 %tmp86, 1
13632754aa3SSerguei Katkov  %tmp92 = icmp ult i64 %tmp91, %tmp24
13732754aa3SSerguei Katkov  br i1 %tmp92, label %bb85, label %bb93
13832754aa3SSerguei Katkov
13932754aa3SSerguei Katkovbb93:                                             ; preds = %bb98, %bb90
14032754aa3SSerguei Katkov  %tmp94 = phi i64 [ %tmp99, %bb98 ], [ 0, %bb90 ]
14132754aa3SSerguei Katkov  %tmp95 = phi i32 [ %tmp96, %bb98 ], [ %tmp88, %bb90 ]
14232754aa3SSerguei Katkov  %tmp96 = add i32 %tmp95, 1
14332754aa3SSerguei Katkov  %tmp97 = icmp ult i32 %tmp95, %tmp20
14432754aa3SSerguei Katkov  br i1 %tmp97, label %bb98, label %bb56
14532754aa3SSerguei Katkov
14632754aa3SSerguei Katkovbb98:                                             ; preds = %bb93
14732754aa3SSerguei Katkov  %tmp99 = add nuw nsw i64 %tmp94, 1
14832754aa3SSerguei Katkov  %tmp100 = icmp ult i64 %tmp99, %tmp24
14932754aa3SSerguei Katkov  br i1 %tmp100, label %bb93, label %bb101
15032754aa3SSerguei Katkov
15132754aa3SSerguei Katkovbb101:                                            ; preds = %bb106, %bb98
15232754aa3SSerguei Katkov  %tmp102 = phi i64 [ %tmp107, %bb106 ], [ 0, %bb98 ]
15332754aa3SSerguei Katkov  %tmp103 = phi i32 [ %tmp104, %bb106 ], [ %tmp96, %bb98 ]
15432754aa3SSerguei Katkov  %tmp104 = add i32 %tmp103, 1
15532754aa3SSerguei Katkov  %tmp105 = icmp ult i32 %tmp103, %tmp20
15632754aa3SSerguei Katkov  br i1 %tmp105, label %bb106, label %bb56
15732754aa3SSerguei Katkov
15832754aa3SSerguei Katkovbb106:                                            ; preds = %bb101
15932754aa3SSerguei Katkov  %tmp107 = add nuw nsw i64 %tmp102, 1
16032754aa3SSerguei Katkov  %tmp108 = icmp ult i64 %tmp107, %tmp24
16132754aa3SSerguei Katkov  br i1 %tmp108, label %bb101, label %bb109
16232754aa3SSerguei Katkov
16332754aa3SSerguei Katkovbb109:                                            ; preds = %bb114, %bb106
16432754aa3SSerguei Katkov  %tmp110 = phi i64 [ %tmp115, %bb114 ], [ 0, %bb106 ]
16532754aa3SSerguei Katkov  %tmp111 = phi i32 [ %tmp112, %bb114 ], [ %tmp104, %bb106 ]
16632754aa3SSerguei Katkov  %tmp112 = add i32 %tmp111, 1
16732754aa3SSerguei Katkov  %tmp113 = icmp ult i32 %tmp111, %tmp20
16832754aa3SSerguei Katkov  br i1 %tmp113, label %bb114, label %bb56
16932754aa3SSerguei Katkov
17032754aa3SSerguei Katkovbb114:                                            ; preds = %bb109
17132754aa3SSerguei Katkov  %tmp115 = add nuw nsw i64 %tmp110, 1
17232754aa3SSerguei Katkov  %tmp116 = icmp ult i64 %tmp115, %tmp24
17332754aa3SSerguei Katkov  br i1 %tmp116, label %bb109, label %bb117
17432754aa3SSerguei Katkov
17532754aa3SSerguei Katkovbb117:                                            ; preds = %bb114
17632754aa3SSerguei Katkov  %tmp118 = add i32 %tmp50, -8
17732754aa3SSerguei Katkov  %tmp119 = icmp eq i32 %tmp118, 0
17832754aa3SSerguei Katkov  br i1 %tmp119, label %bb27, label %bb48
17932754aa3SSerguei Katkov}
18032754aa3SSerguei Katkov
18132754aa3SSerguei Katkov!0 = !{i32 0, i32 2147483647}
182