File: huge-trip-multiple.ll

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (152 lines) | stat: -rw-r--r-- 7,731 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 2
; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s

; Tests loops with huge trip counts. Trip count of >=2^32 are huge. Huge trip counts have a trip multiple
; of the greatest power of 2 less than 2^32.

declare void @foo(...)

define void @trip_count_4294967295() {
; CHECK-LABEL: 'trip_count_4294967295'
; CHECK-NEXT:  Classifying expressions for: @trip_count_4294967295
; CHECK-NEXT:    %i.02 = phi i64 [ 0, %entry ], [ %add, %for.body ]
; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%for.body> U: [0,4294967295) S: [0,4294967295) Exits: 4294967294 LoopDispositions: { %for.body: Computable }
; CHECK-NEXT:    %add = add nuw nsw i64 %i.02, 1
; CHECK-NEXT:    --> {1,+,1}<nuw><nsw><%for.body> U: [1,4294967296) S: [1,4294967296) Exits: 4294967295 LoopDispositions: { %for.body: Computable }
; CHECK-NEXT:  Determining loop execution counts for: @trip_count_4294967295
; CHECK-NEXT:  Loop %for.body: backedge-taken count is 4294967294
; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is 4294967294
; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is 4294967294
; CHECK-NEXT:  Loop %for.body: Predicated backedge-taken count is 4294967294
; CHECK-NEXT:   Predicates:
; CHECK:       Loop %for.body: Trip multiple is 4294967295
;
entry:
  br label %for.body

for.cond.cleanup:                                 ; preds = %for.body
  ret void

for.body:                                         ; preds = %entry, %for.body
  %i.02 = phi i64 [ 0, %entry ], [ %add, %for.body ]
  tail call void (...) @foo() #2
  %add = add nuw nsw i64 %i.02, 1
  %exitcond.not = icmp eq i64 %add, 4294967295
  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
}

define void @trip_count_4294967296() {
; CHECK-LABEL: 'trip_count_4294967296'
; CHECK-NEXT:  Classifying expressions for: @trip_count_4294967296
; CHECK-NEXT:    %i.02 = phi i64 [ 0, %entry ], [ %add, %for.body ]
; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%for.body> U: [0,4294967296) S: [0,4294967296) Exits: 4294967295 LoopDispositions: { %for.body: Computable }
; CHECK-NEXT:    %add = add nuw nsw i64 %i.02, 1
; CHECK-NEXT:    --> {1,+,1}<nuw><nsw><%for.body> U: [1,4294967297) S: [1,4294967297) Exits: 4294967296 LoopDispositions: { %for.body: Computable }
; CHECK-NEXT:  Determining loop execution counts for: @trip_count_4294967296
; CHECK-NEXT:  Loop %for.body: backedge-taken count is 4294967295
; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is 4294967295
; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is 4294967295
; CHECK-NEXT:  Loop %for.body: Predicated backedge-taken count is 4294967295
; CHECK-NEXT:   Predicates:
; CHECK:       Loop %for.body: Trip multiple is 2147483648
;
entry:
  br label %for.body

for.cond.cleanup:                                 ; preds = %for.body
  ret void

for.body:                                         ; preds = %entry, %for.body
  %i.02 = phi i64 [ 0, %entry ], [ %add, %for.body ]
  tail call void (...) @foo() #2
  %add = add nuw nsw i64 %i.02, 1
  %exitcond.not = icmp eq i64 %add, 4294967296
  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
}

define void @trip_count_8589935692() {
; CHECK-LABEL: 'trip_count_8589935692'
; CHECK-NEXT:  Classifying expressions for: @trip_count_8589935692
; CHECK-NEXT:    %i.02 = phi i64 [ 0, %entry ], [ %add, %for.body ]
; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%for.body> U: [0,8589934592) S: [0,8589934592) Exits: 8589934591 LoopDispositions: { %for.body: Computable }
; CHECK-NEXT:    %add = add nuw nsw i64 %i.02, 1
; CHECK-NEXT:    --> {1,+,1}<nuw><nsw><%for.body> U: [1,8589934593) S: [1,8589934593) Exits: 8589934592 LoopDispositions: { %for.body: Computable }
; CHECK-NEXT:  Determining loop execution counts for: @trip_count_8589935692
; CHECK-NEXT:  Loop %for.body: backedge-taken count is 8589934591
; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is 8589934591
; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is 8589934591
; CHECK-NEXT:  Loop %for.body: Predicated backedge-taken count is 8589934591
; CHECK-NEXT:   Predicates:
; CHECK:       Loop %for.body: Trip multiple is 2147483648
;
entry:
  br label %for.body

for.cond.cleanup:                                 ; preds = %for.body
  ret void

for.body:                                         ; preds = %entry, %for.body
  %i.02 = phi i64 [ 0, %entry ], [ %add, %for.body ]
  tail call void (...) @foo() #2
  %add = add nuw nsw i64 %i.02, 1
  %exitcond.not = icmp eq i64 %add, 8589934592
  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
}

define void @trip_count_9223372036854775808() {
; CHECK-LABEL: 'trip_count_9223372036854775808'
; CHECK-NEXT:  Classifying expressions for: @trip_count_9223372036854775808
; CHECK-NEXT:    %i.02 = phi i64 [ 0, %entry ], [ %add, %for.body ]
; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%for.body> U: [0,-9223372036854775808) S: [0,-9223372036854775808) Exits: 9223372036854775807 LoopDispositions: { %for.body: Computable }
; CHECK-NEXT:    %add = add nuw nsw i64 %i.02, 1
; CHECK-NEXT:    --> {1,+,1}<nuw><%for.body> U: [1,-9223372036854775807) S: [1,-9223372036854775807) Exits: -9223372036854775808 LoopDispositions: { %for.body: Computable }
; CHECK-NEXT:  Determining loop execution counts for: @trip_count_9223372036854775808
; CHECK-NEXT:  Loop %for.body: backedge-taken count is 9223372036854775807
; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is 9223372036854775807
; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is 9223372036854775807
; CHECK-NEXT:  Loop %for.body: Predicated backedge-taken count is 9223372036854775807
; CHECK-NEXT:   Predicates:
; CHECK:       Loop %for.body: Trip multiple is 2147483648
;
entry:
  br label %for.body

for.cond.cleanup:                                 ; preds = %for.body
  ret void

for.body:                                         ; preds = %entry, %for.body
  %i.02 = phi i64 [ 0, %entry ], [ %add, %for.body ]
  tail call void (...) @foo() #2
  %add = add nuw nsw i64 %i.02, 1
  %exitcond.not = icmp eq i64 %add, 9223372036854775808
  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
}

define void @trip_count_18446744073709551615() {
; CHECK-LABEL: 'trip_count_18446744073709551615'
; CHECK-NEXT:  Classifying expressions for: @trip_count_18446744073709551615
; CHECK-NEXT:    %i.02 = phi i64 [ 0, %entry ], [ %add, %for.body ]
; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%for.body> U: [0,-9223372036854775808) S: [0,-9223372036854775808) Exits: -2 LoopDispositions: { %for.body: Computable }
; CHECK-NEXT:    %add = add nuw nsw i64 %i.02, 1
; CHECK-NEXT:    --> {1,+,1}<nuw><%for.body> U: [1,0) S: [1,0) Exits: -1 LoopDispositions: { %for.body: Computable }
; CHECK-NEXT:  Determining loop execution counts for: @trip_count_18446744073709551615
; CHECK-NEXT:  Loop %for.body: backedge-taken count is -2
; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is -2
; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is -2
; CHECK-NEXT:  Loop %for.body: Predicated backedge-taken count is -2
; CHECK-NEXT:   Predicates:
; CHECK:       Loop %for.body: Trip multiple is 1
;
entry:
  br label %for.body

for.cond.cleanup:                                 ; preds = %for.body
  ret void

for.body:                                         ; preds = %entry, %for.body
  %i.02 = phi i64 [ 0, %entry ], [ %add, %for.body ]
  tail call void (...) @foo() #2
  %add = add nuw nsw i64 %i.02, 1
  %exitcond.not = icmp eq i64 %add, 18446744073709551615
  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
}