[sanitizer] Improve FreeBSD ASLR detection
[llvm-project.git] / llvm / test / Analysis / ScalarEvolution / ptrtoint-constantexpr-loop.ll
blob63ea49bdf538358be8a97b650c3cebc727b9f7fd
1 ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2 ; RUN: opt < %s --data-layout="p:64:64:64:64" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=PTR64_IDX64 %s
3 ; RUN: opt < %s --data-layout="p:64:64:64:32" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=PTR64_IDX32 %s
4 ; RUN: opt < %s --data-layout="p:16:16:16:16" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=PTR16_IDX16 %s
5 ; RUN: opt < %s --data-layout="p:16:16:16:32" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=PTR16_IDX32 %s
7 @global = external hidden global [0 x i8]
9 declare void @use16(i16)
11 define hidden i32* @trunc_ptr_to_i64(i8* %arg, i32* %arg10) {
12 ; PTR64_IDX64-LABEL: 'trunc_ptr_to_i64'
13 ; PTR64_IDX64-NEXT:  Classifying expressions for: @trunc_ptr_to_i64
14 ; PTR64_IDX64-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
15 ; PTR64_IDX64-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
16 ; PTR64_IDX64-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i64 ptrtoint ([0 x i8]* @global to i64)
17 ; PTR64_IDX64-NEXT:    --> ((ptrtoint [0 x i8]* @global to i64) + %arg) U: full-set S: full-set Exits: ((ptrtoint [0 x i8]* @global to i64) + %arg) LoopDispositions: { %bb11: Invariant }
18 ; PTR64_IDX64-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
19 ; PTR64_IDX64-NEXT:    --> ((ptrtoint [0 x i8]* @global to i64) + %arg) U: full-set S: full-set Exits: ((ptrtoint [0 x i8]* @global to i64) + %arg) LoopDispositions: { %bb11: Invariant }
20 ; PTR64_IDX64-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
21 ; PTR64_IDX64-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
22 ; PTR64_IDX64-NEXT:    %tmp18 = add i32 %tmp, 2
23 ; PTR64_IDX64-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
24 ; PTR64_IDX64-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i64
25 ; PTR64_IDX64-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
26 ; PTR64_IDX64-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
27 ; PTR64_IDX64-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
29 ; PTR64_IDX32-LABEL: 'trunc_ptr_to_i64'
30 ; PTR64_IDX32-NEXT:  Classifying expressions for: @trunc_ptr_to_i64
31 ; PTR64_IDX32-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
32 ; PTR64_IDX32-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
33 ; PTR64_IDX32-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i64 ptrtoint ([0 x i8]* @global to i64)
34 ; PTR64_IDX32-NEXT:    --> ((trunc i64 ptrtoint ([0 x i8]* @global to i64) to i32) + %arg) U: full-set S: full-set Exits: ((trunc i64 ptrtoint ([0 x i8]* @global to i64) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
35 ; PTR64_IDX32-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
36 ; PTR64_IDX32-NEXT:    --> ((trunc i64 ptrtoint ([0 x i8]* @global to i64) to i32) + %arg) U: full-set S: full-set Exits: ((trunc i64 ptrtoint ([0 x i8]* @global to i64) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
37 ; PTR64_IDX32-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
38 ; PTR64_IDX32-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
39 ; PTR64_IDX32-NEXT:    %tmp18 = add i32 %tmp, 2
40 ; PTR64_IDX32-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
41 ; PTR64_IDX32-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i64
42 ; PTR64_IDX32-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
43 ; PTR64_IDX32-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
44 ; PTR64_IDX32-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
46 ; PTR16_IDX16-LABEL: 'trunc_ptr_to_i64'
47 ; PTR16_IDX16-NEXT:  Classifying expressions for: @trunc_ptr_to_i64
48 ; PTR16_IDX16-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
49 ; PTR16_IDX16-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
50 ; PTR16_IDX16-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i64 ptrtoint ([0 x i8]* @global to i64)
51 ; PTR16_IDX16-NEXT:    --> ((ptrtoint [0 x i8]* @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint [0 x i8]* @global to i16) + %arg) LoopDispositions: { %bb11: Invariant }
52 ; PTR16_IDX16-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
53 ; PTR16_IDX16-NEXT:    --> ((ptrtoint [0 x i8]* @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint [0 x i8]* @global to i16) + %arg) LoopDispositions: { %bb11: Invariant }
54 ; PTR16_IDX16-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
55 ; PTR16_IDX16-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
56 ; PTR16_IDX16-NEXT:    %tmp18 = add i32 %tmp, 2
57 ; PTR16_IDX16-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
58 ; PTR16_IDX16-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i64
59 ; PTR16_IDX16-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
60 ; PTR16_IDX16-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
61 ; PTR16_IDX16-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
63 ; PTR16_IDX32-LABEL: 'trunc_ptr_to_i64'
64 ; PTR16_IDX32-NEXT:  Classifying expressions for: @trunc_ptr_to_i64
65 ; PTR16_IDX32-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
66 ; PTR16_IDX32-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
67 ; PTR16_IDX32-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i64 ptrtoint ([0 x i8]* @global to i64)
68 ; PTR16_IDX32-NEXT:    --> ((trunc i64 ptrtoint ([0 x i8]* @global to i64) to i32) + %arg) U: [0,131071) S: [0,131071) Exits: ((trunc i64 ptrtoint ([0 x i8]* @global to i64) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
69 ; PTR16_IDX32-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
70 ; PTR16_IDX32-NEXT:    --> ((trunc i64 ptrtoint ([0 x i8]* @global to i64) to i32) + %arg) U: [0,131071) S: [0,131071) Exits: ((trunc i64 ptrtoint ([0 x i8]* @global to i64) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
71 ; PTR16_IDX32-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
72 ; PTR16_IDX32-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
73 ; PTR16_IDX32-NEXT:    %tmp18 = add i32 %tmp, 2
74 ; PTR16_IDX32-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
75 ; PTR16_IDX32-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i64
76 ; PTR16_IDX32-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
77 ; PTR16_IDX32-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
78 ; PTR16_IDX32-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
80 bb:
81   br label %bb11
83 bb11:                                             ; preds = %bb17, %bb
84   %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
85   %tmp12 = getelementptr i8, i8* %arg, i64 ptrtoint ([0 x i8]* @global to i64)
86   %tmp13 = bitcast i8* %tmp12 to i32*
87   %tmp14 = load i32, i32* %tmp13, align 4
88   %tmp15 = icmp eq i32 %tmp14, 6
89   br i1 %tmp15, label %bb16, label %bb17
91 bb16:                                             ; preds = %bb11
92   ret i32* %arg10
94 bb17:                                             ; preds = %bb11
95   %tmp18 = add i32 %tmp, 2
96   br label %bb11
98 define hidden i32* @trunc_ptr_to_i32(i8* %arg, i32* %arg10) {
99 ; PTR64_IDX64-LABEL: 'trunc_ptr_to_i32'
100 ; PTR64_IDX64-NEXT:  Classifying expressions for: @trunc_ptr_to_i32
101 ; PTR64_IDX64-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
102 ; PTR64_IDX64-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
103 ; PTR64_IDX64-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i32 ptrtoint ([0 x i8]* @global to i32)
104 ; PTR64_IDX64-NEXT:    --> ((sext i32 (trunc i64 (ptrtoint [0 x i8]* @global to i64) to i32) to i64) + %arg) U: full-set S: full-set Exits: ((sext i32 (trunc i64 (ptrtoint [0 x i8]* @global to i64) to i32) to i64) + %arg) LoopDispositions: { %bb11: Invariant }
105 ; PTR64_IDX64-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
106 ; PTR64_IDX64-NEXT:    --> ((sext i32 (trunc i64 (ptrtoint [0 x i8]* @global to i64) to i32) to i64) + %arg) U: full-set S: full-set Exits: ((sext i32 (trunc i64 (ptrtoint [0 x i8]* @global to i64) to i32) to i64) + %arg) LoopDispositions: { %bb11: Invariant }
107 ; PTR64_IDX64-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
108 ; PTR64_IDX64-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
109 ; PTR64_IDX64-NEXT:    %tmp18 = add i32 %tmp, 2
110 ; PTR64_IDX64-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
111 ; PTR64_IDX64-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i32
112 ; PTR64_IDX64-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
113 ; PTR64_IDX64-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
114 ; PTR64_IDX64-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
116 ; PTR64_IDX32-LABEL: 'trunc_ptr_to_i32'
117 ; PTR64_IDX32-NEXT:  Classifying expressions for: @trunc_ptr_to_i32
118 ; PTR64_IDX32-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
119 ; PTR64_IDX32-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
120 ; PTR64_IDX32-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i32 ptrtoint ([0 x i8]* @global to i32)
121 ; PTR64_IDX32-NEXT:    --> (ptrtoint ([0 x i8]* @global to i32) + %arg) U: full-set S: full-set Exits: (ptrtoint ([0 x i8]* @global to i32) + %arg) LoopDispositions: { %bb11: Invariant }
122 ; PTR64_IDX32-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
123 ; PTR64_IDX32-NEXT:    --> (ptrtoint ([0 x i8]* @global to i32) + %arg) U: full-set S: full-set Exits: (ptrtoint ([0 x i8]* @global to i32) + %arg) LoopDispositions: { %bb11: Invariant }
124 ; PTR64_IDX32-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
125 ; PTR64_IDX32-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
126 ; PTR64_IDX32-NEXT:    %tmp18 = add i32 %tmp, 2
127 ; PTR64_IDX32-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
128 ; PTR64_IDX32-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i32
129 ; PTR64_IDX32-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
130 ; PTR64_IDX32-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
131 ; PTR64_IDX32-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
133 ; PTR16_IDX16-LABEL: 'trunc_ptr_to_i32'
134 ; PTR16_IDX16-NEXT:  Classifying expressions for: @trunc_ptr_to_i32
135 ; PTR16_IDX16-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
136 ; PTR16_IDX16-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
137 ; PTR16_IDX16-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i32 ptrtoint ([0 x i8]* @global to i32)
138 ; PTR16_IDX16-NEXT:    --> ((ptrtoint [0 x i8]* @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint [0 x i8]* @global to i16) + %arg) LoopDispositions: { %bb11: Invariant }
139 ; PTR16_IDX16-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
140 ; PTR16_IDX16-NEXT:    --> ((ptrtoint [0 x i8]* @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint [0 x i8]* @global to i16) + %arg) LoopDispositions: { %bb11: Invariant }
141 ; PTR16_IDX16-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
142 ; PTR16_IDX16-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
143 ; PTR16_IDX16-NEXT:    %tmp18 = add i32 %tmp, 2
144 ; PTR16_IDX16-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
145 ; PTR16_IDX16-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i32
146 ; PTR16_IDX16-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
147 ; PTR16_IDX16-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
148 ; PTR16_IDX16-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
150 ; PTR16_IDX32-LABEL: 'trunc_ptr_to_i32'
151 ; PTR16_IDX32-NEXT:  Classifying expressions for: @trunc_ptr_to_i32
152 ; PTR16_IDX32-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
153 ; PTR16_IDX32-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
154 ; PTR16_IDX32-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i32 ptrtoint ([0 x i8]* @global to i32)
155 ; PTR16_IDX32-NEXT:    --> (ptrtoint ([0 x i8]* @global to i32) + %arg) U: [0,131071) S: [0,131071) Exits: (ptrtoint ([0 x i8]* @global to i32) + %arg) LoopDispositions: { %bb11: Invariant }
156 ; PTR16_IDX32-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
157 ; PTR16_IDX32-NEXT:    --> (ptrtoint ([0 x i8]* @global to i32) + %arg) U: [0,131071) S: [0,131071) Exits: (ptrtoint ([0 x i8]* @global to i32) + %arg) LoopDispositions: { %bb11: Invariant }
158 ; PTR16_IDX32-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
159 ; PTR16_IDX32-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
160 ; PTR16_IDX32-NEXT:    %tmp18 = add i32 %tmp, 2
161 ; PTR16_IDX32-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
162 ; PTR16_IDX32-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i32
163 ; PTR16_IDX32-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
164 ; PTR16_IDX32-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
165 ; PTR16_IDX32-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
168   br label %bb11
170 bb11:                                             ; preds = %bb17, %bb
171   %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
172   %tmp12 = getelementptr i8, i8* %arg, i32 ptrtoint ([0 x i8]* @global to i32)
173   %tmp13 = bitcast i8* %tmp12 to i32*
174   %tmp14 = load i32, i32* %tmp13, align 4
175   %tmp15 = icmp eq i32 %tmp14, 6
176   br i1 %tmp15, label %bb16, label %bb17
178 bb16:                                             ; preds = %bb11
179   ret i32* %arg10
181 bb17:                                             ; preds = %bb11
182   %tmp18 = add i32 %tmp, 2
183   br label %bb11
185 define hidden i32* @trunc_ptr_to_i128(i8* %arg, i32* %arg10) {
186 ; PTR64_IDX64-LABEL: 'trunc_ptr_to_i128'
187 ; PTR64_IDX64-NEXT:  Classifying expressions for: @trunc_ptr_to_i128
188 ; PTR64_IDX64-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
189 ; PTR64_IDX64-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
190 ; PTR64_IDX64-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i128 ptrtoint ([0 x i8]* @global to i128)
191 ; PTR64_IDX64-NEXT:    --> ((ptrtoint [0 x i8]* @global to i64) + %arg) U: full-set S: full-set Exits: ((ptrtoint [0 x i8]* @global to i64) + %arg) LoopDispositions: { %bb11: Invariant }
192 ; PTR64_IDX64-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
193 ; PTR64_IDX64-NEXT:    --> ((ptrtoint [0 x i8]* @global to i64) + %arg) U: full-set S: full-set Exits: ((ptrtoint [0 x i8]* @global to i64) + %arg) LoopDispositions: { %bb11: Invariant }
194 ; PTR64_IDX64-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
195 ; PTR64_IDX64-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
196 ; PTR64_IDX64-NEXT:    %tmp18 = add i32 %tmp, 2
197 ; PTR64_IDX64-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
198 ; PTR64_IDX64-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i128
199 ; PTR64_IDX64-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
200 ; PTR64_IDX64-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
201 ; PTR64_IDX64-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
203 ; PTR64_IDX32-LABEL: 'trunc_ptr_to_i128'
204 ; PTR64_IDX32-NEXT:  Classifying expressions for: @trunc_ptr_to_i128
205 ; PTR64_IDX32-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
206 ; PTR64_IDX32-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
207 ; PTR64_IDX32-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i128 ptrtoint ([0 x i8]* @global to i128)
208 ; PTR64_IDX32-NEXT:    --> ((trunc i128 ptrtoint ([0 x i8]* @global to i128) to i32) + %arg) U: full-set S: full-set Exits: ((trunc i128 ptrtoint ([0 x i8]* @global to i128) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
209 ; PTR64_IDX32-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
210 ; PTR64_IDX32-NEXT:    --> ((trunc i128 ptrtoint ([0 x i8]* @global to i128) to i32) + %arg) U: full-set S: full-set Exits: ((trunc i128 ptrtoint ([0 x i8]* @global to i128) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
211 ; PTR64_IDX32-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
212 ; PTR64_IDX32-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
213 ; PTR64_IDX32-NEXT:    %tmp18 = add i32 %tmp, 2
214 ; PTR64_IDX32-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
215 ; PTR64_IDX32-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i128
216 ; PTR64_IDX32-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
217 ; PTR64_IDX32-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
218 ; PTR64_IDX32-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
220 ; PTR16_IDX16-LABEL: 'trunc_ptr_to_i128'
221 ; PTR16_IDX16-NEXT:  Classifying expressions for: @trunc_ptr_to_i128
222 ; PTR16_IDX16-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
223 ; PTR16_IDX16-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
224 ; PTR16_IDX16-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i128 ptrtoint ([0 x i8]* @global to i128)
225 ; PTR16_IDX16-NEXT:    --> ((ptrtoint [0 x i8]* @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint [0 x i8]* @global to i16) + %arg) LoopDispositions: { %bb11: Invariant }
226 ; PTR16_IDX16-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
227 ; PTR16_IDX16-NEXT:    --> ((ptrtoint [0 x i8]* @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint [0 x i8]* @global to i16) + %arg) LoopDispositions: { %bb11: Invariant }
228 ; PTR16_IDX16-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
229 ; PTR16_IDX16-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
230 ; PTR16_IDX16-NEXT:    %tmp18 = add i32 %tmp, 2
231 ; PTR16_IDX16-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
232 ; PTR16_IDX16-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i128
233 ; PTR16_IDX16-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
234 ; PTR16_IDX16-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
235 ; PTR16_IDX16-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
237 ; PTR16_IDX32-LABEL: 'trunc_ptr_to_i128'
238 ; PTR16_IDX32-NEXT:  Classifying expressions for: @trunc_ptr_to_i128
239 ; PTR16_IDX32-NEXT:    %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
240 ; PTR16_IDX32-NEXT:    --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
241 ; PTR16_IDX32-NEXT:    %tmp12 = getelementptr i8, i8* %arg, i128 ptrtoint ([0 x i8]* @global to i128)
242 ; PTR16_IDX32-NEXT:    --> ((trunc i128 ptrtoint ([0 x i8]* @global to i128) to i32) + %arg) U: [0,131071) S: [0,131071) Exits: ((trunc i128 ptrtoint ([0 x i8]* @global to i128) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
243 ; PTR16_IDX32-NEXT:    %tmp13 = bitcast i8* %tmp12 to i32*
244 ; PTR16_IDX32-NEXT:    --> ((trunc i128 ptrtoint ([0 x i8]* @global to i128) to i32) + %arg) U: [0,131071) S: [0,131071) Exits: ((trunc i128 ptrtoint ([0 x i8]* @global to i128) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
245 ; PTR16_IDX32-NEXT:    %tmp14 = load i32, i32* %tmp13, align 4
246 ; PTR16_IDX32-NEXT:    --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
247 ; PTR16_IDX32-NEXT:    %tmp18 = add i32 %tmp, 2
248 ; PTR16_IDX32-NEXT:    --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
249 ; PTR16_IDX32-NEXT:  Determining loop execution counts for: @trunc_ptr_to_i128
250 ; PTR16_IDX32-NEXT:  Loop %bb11: Unpredictable backedge-taken count.
251 ; PTR16_IDX32-NEXT:  Loop %bb11: Unpredictable max backedge-taken count.
252 ; PTR16_IDX32-NEXT:  Loop %bb11: Unpredictable predicated backedge-taken count.
255   br label %bb11
257 bb11:                                             ; preds = %bb17, %bb
258   %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
259   %tmp12 = getelementptr i8, i8* %arg, i128 ptrtoint ([0 x i8]* @global to i128)
260   %tmp13 = bitcast i8* %tmp12 to i32*
261   %tmp14 = load i32, i32* %tmp13, align 4
262   %tmp15 = icmp eq i32 %tmp14, 6
263   br i1 %tmp15, label %bb16, label %bb17
265 bb16:                                             ; preds = %bb11
266   ret i32* %arg10
268 bb17:                                             ; preds = %bb11
269   %tmp18 = add i32 %tmp, 2
270   br label %bb11
273 define void @zext_ptr_to_i32(i32 %arg, i32 %arg6) {
274 ; PTR64_IDX64-LABEL: 'zext_ptr_to_i32'
275 ; PTR64_IDX64-NEXT:  Classifying expressions for: @zext_ptr_to_i32
276 ; PTR64_IDX64-NEXT:    %tmp = sub i32 %arg, ptrtoint ([0 x i8]* @global to i32)
277 ; PTR64_IDX64-NEXT:    --> ((-1 * (trunc i64 (ptrtoint [0 x i8]* @global to i64) to i32)) + %arg) U: full-set S: full-set Exits: ((-1 * (trunc i64 (ptrtoint [0 x i8]* @global to i64) to i32)) + %arg) LoopDispositions: { %bb7: Invariant }
278 ; PTR64_IDX64-NEXT:    %tmp9 = select i1 %tmp8, i16 0, i16 1
279 ; PTR64_IDX64-NEXT:    --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant }
280 ; PTR64_IDX64-NEXT:  Determining loop execution counts for: @zext_ptr_to_i32
281 ; PTR64_IDX64-NEXT:  Loop %bb7: Unpredictable backedge-taken count.
282 ; PTR64_IDX64-NEXT:  Loop %bb7: Unpredictable max backedge-taken count.
283 ; PTR64_IDX64-NEXT:  Loop %bb7: Unpredictable predicated backedge-taken count.
285 ; PTR64_IDX32-LABEL: 'zext_ptr_to_i32'
286 ; PTR64_IDX32-NEXT:  Classifying expressions for: @zext_ptr_to_i32
287 ; PTR64_IDX32-NEXT:    %tmp = sub i32 %arg, ptrtoint ([0 x i8]* @global to i32)
288 ; PTR64_IDX32-NEXT:    --> ((-1 * ptrtoint ([0 x i8]* @global to i32)) + %arg) U: full-set S: full-set Exits: ((-1 * ptrtoint ([0 x i8]* @global to i32)) + %arg) LoopDispositions: { %bb7: Invariant }
289 ; PTR64_IDX32-NEXT:    %tmp9 = select i1 %tmp8, i16 0, i16 1
290 ; PTR64_IDX32-NEXT:    --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant }
291 ; PTR64_IDX32-NEXT:  Determining loop execution counts for: @zext_ptr_to_i32
292 ; PTR64_IDX32-NEXT:  Loop %bb7: Unpredictable backedge-taken count.
293 ; PTR64_IDX32-NEXT:  Loop %bb7: Unpredictable max backedge-taken count.
294 ; PTR64_IDX32-NEXT:  Loop %bb7: Unpredictable predicated backedge-taken count.
296 ; PTR16_IDX16-LABEL: 'zext_ptr_to_i32'
297 ; PTR16_IDX16-NEXT:  Classifying expressions for: @zext_ptr_to_i32
298 ; PTR16_IDX16-NEXT:    %tmp = sub i32 %arg, ptrtoint ([0 x i8]* @global to i32)
299 ; PTR16_IDX16-NEXT:    --> ((-1 * (zext i16 (ptrtoint [0 x i8]* @global to i16) to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * (zext i16 (ptrtoint [0 x i8]* @global to i16) to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant }
300 ; PTR16_IDX16-NEXT:    %tmp9 = select i1 %tmp8, i16 0, i16 1
301 ; PTR16_IDX16-NEXT:    --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant }
302 ; PTR16_IDX16-NEXT:  Determining loop execution counts for: @zext_ptr_to_i32
303 ; PTR16_IDX16-NEXT:  Loop %bb7: Unpredictable backedge-taken count.
304 ; PTR16_IDX16-NEXT:  Loop %bb7: Unpredictable max backedge-taken count.
305 ; PTR16_IDX16-NEXT:  Loop %bb7: Unpredictable predicated backedge-taken count.
307 ; PTR16_IDX32-LABEL: 'zext_ptr_to_i32'
308 ; PTR16_IDX32-NEXT:  Classifying expressions for: @zext_ptr_to_i32
309 ; PTR16_IDX32-NEXT:    %tmp = sub i32 %arg, ptrtoint ([0 x i8]* @global to i32)
310 ; PTR16_IDX32-NEXT:    --> ((-1 * ptrtoint ([0 x i8]* @global to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * ptrtoint ([0 x i8]* @global to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant }
311 ; PTR16_IDX32-NEXT:    %tmp9 = select i1 %tmp8, i16 0, i16 1
312 ; PTR16_IDX32-NEXT:    --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant }
313 ; PTR16_IDX32-NEXT:  Determining loop execution counts for: @zext_ptr_to_i32
314 ; PTR16_IDX32-NEXT:  Loop %bb7: Unpredictable backedge-taken count.
315 ; PTR16_IDX32-NEXT:  Loop %bb7: Unpredictable max backedge-taken count.
316 ; PTR16_IDX32-NEXT:  Loop %bb7: Unpredictable predicated backedge-taken count.
319   br label %bb7
321 bb7:                                              ; preds = %bb7, %bb
322   %tmp = sub i32 %arg, ptrtoint ([0 x i8]* @global to i32)
323   %tmp8 = icmp eq i32 %tmp, %arg6
324   %tmp9 = select i1 %tmp8, i16 0, i16 1
325   call void @use16(i16 %tmp9)
326   br i1 %tmp8, label %bb7, label %bb10
328 bb10:                                             ; preds = %bb7
329   ret void
332 define void @sext_to_i32(i32 %arg, i32 %arg6) {
333 ; PTR64_IDX64-LABEL: 'sext_to_i32'
334 ; PTR64_IDX64-NEXT:  Classifying expressions for: @sext_to_i32
335 ; PTR64_IDX64-NEXT:    %tmp = sub i32 %arg, sext (i16 ptrtoint ([0 x i8]* @global to i16) to i32)
336 ; PTR64_IDX64-NEXT:    --> ((-1 * (sext i16 (trunc i64 (ptrtoint [0 x i8]* @global to i64) to i16) to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * (sext i16 (trunc i64 (ptrtoint [0 x i8]* @global to i64) to i16) to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant }
337 ; PTR64_IDX64-NEXT:    %tmp9 = select i1 %tmp8, i16 0, i16 1
338 ; PTR64_IDX64-NEXT:    --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant }
339 ; PTR64_IDX64-NEXT:  Determining loop execution counts for: @sext_to_i32
340 ; PTR64_IDX64-NEXT:  Loop %bb7: Unpredictable backedge-taken count.
341 ; PTR64_IDX64-NEXT:  Loop %bb7: Unpredictable max backedge-taken count.
342 ; PTR64_IDX64-NEXT:  Loop %bb7: Unpredictable predicated backedge-taken count.
344 ; PTR64_IDX32-LABEL: 'sext_to_i32'
345 ; PTR64_IDX32-NEXT:  Classifying expressions for: @sext_to_i32
346 ; PTR64_IDX32-NEXT:    %tmp = sub i32 %arg, sext (i16 ptrtoint ([0 x i8]* @global to i16) to i32)
347 ; PTR64_IDX32-NEXT:    --> ((-1 * (sext i16 ptrtoint ([0 x i8]* @global to i16) to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * (sext i16 ptrtoint ([0 x i8]* @global to i16) to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant }
348 ; PTR64_IDX32-NEXT:    %tmp9 = select i1 %tmp8, i16 0, i16 1
349 ; PTR64_IDX32-NEXT:    --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant }
350 ; PTR64_IDX32-NEXT:  Determining loop execution counts for: @sext_to_i32
351 ; PTR64_IDX32-NEXT:  Loop %bb7: Unpredictable backedge-taken count.
352 ; PTR64_IDX32-NEXT:  Loop %bb7: Unpredictable max backedge-taken count.
353 ; PTR64_IDX32-NEXT:  Loop %bb7: Unpredictable predicated backedge-taken count.
355 ; PTR16_IDX16-LABEL: 'sext_to_i32'
356 ; PTR16_IDX16-NEXT:  Classifying expressions for: @sext_to_i32
357 ; PTR16_IDX16-NEXT:    %tmp = sub i32 %arg, sext (i16 ptrtoint ([0 x i8]* @global to i16) to i32)
358 ; PTR16_IDX16-NEXT:    --> ((-1 * (sext i16 (ptrtoint [0 x i8]* @global to i16) to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * (sext i16 (ptrtoint [0 x i8]* @global to i16) to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant }
359 ; PTR16_IDX16-NEXT:    %tmp9 = select i1 %tmp8, i16 0, i16 1
360 ; PTR16_IDX16-NEXT:    --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant }
361 ; PTR16_IDX16-NEXT:  Determining loop execution counts for: @sext_to_i32
362 ; PTR16_IDX16-NEXT:  Loop %bb7: Unpredictable backedge-taken count.
363 ; PTR16_IDX16-NEXT:  Loop %bb7: Unpredictable max backedge-taken count.
364 ; PTR16_IDX16-NEXT:  Loop %bb7: Unpredictable predicated backedge-taken count.
366 ; PTR16_IDX32-LABEL: 'sext_to_i32'
367 ; PTR16_IDX32-NEXT:  Classifying expressions for: @sext_to_i32
368 ; PTR16_IDX32-NEXT:    %tmp = sub i32 %arg, sext (i16 ptrtoint ([0 x i8]* @global to i16) to i32)
369 ; PTR16_IDX32-NEXT:    --> ((-1 * (sext i16 ptrtoint ([0 x i8]* @global to i16) to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * (sext i16 ptrtoint ([0 x i8]* @global to i16) to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant }
370 ; PTR16_IDX32-NEXT:    %tmp9 = select i1 %tmp8, i16 0, i16 1
371 ; PTR16_IDX32-NEXT:    --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant }
372 ; PTR16_IDX32-NEXT:  Determining loop execution counts for: @sext_to_i32
373 ; PTR16_IDX32-NEXT:  Loop %bb7: Unpredictable backedge-taken count.
374 ; PTR16_IDX32-NEXT:  Loop %bb7: Unpredictable max backedge-taken count.
375 ; PTR16_IDX32-NEXT:  Loop %bb7: Unpredictable predicated backedge-taken count.
378   br label %bb7
380 bb7:                                              ; preds = %bb7, %bb
381   %tmp = sub i32 %arg, sext (i16 ptrtoint ([0 x i8]* @global to i16) to i32)
382   %tmp8 = icmp eq i32 %tmp, %arg6
383   %tmp9 = select i1 %tmp8, i16 0, i16 1
384   call void @use16(i16 %tmp9)
385   br i1 %tmp8, label %bb7, label %bb10
387 bb10:                                             ; preds = %bb7
388   ret void
391 define i64 @sext_like_noop(i32 %n) {
392 ; PTR64_IDX64-LABEL: 'sext_like_noop'
393 ; PTR64_IDX64-NEXT:  Classifying expressions for: @sext_like_noop
394 ; PTR64_IDX64-NEXT:    %ii = sext i32 %i to i64
395 ; PTR64_IDX64-NEXT:    --> (sext i32 {1,+,1}<nuw><%for.body> to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) --> (sext i32 (-1 + (trunc i64 (ptrtoint i64 (i32)* @sext_like_noop to i64) to i32)) to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)
396 ; PTR64_IDX64-NEXT:    %div = sdiv i64 55555, %ii
397 ; PTR64_IDX64-NEXT:    --> %div U: full-set S: full-set --> sdiv (i64 55555, i64 sext (i32 add (i32 ptrtoint (i64 (i32)* @sext_like_noop to i32), i32 -1) to i64)) U: full-set S: full-set
398 ; PTR64_IDX64-NEXT:    %i = phi i32 [ %inc, %for.body ], [ 1, %entry ]
399 ; PTR64_IDX64-NEXT:    --> {1,+,1}<nuw><%for.body> U: [1,0) S: [1,0) Exits: (-1 + (trunc i64 (ptrtoint i64 (i32)* @sext_like_noop to i64) to i32)) LoopDispositions: { %for.body: Computable }
400 ; PTR64_IDX64-NEXT:    %inc = add nuw i32 %i, 1
401 ; PTR64_IDX64-NEXT:    --> {2,+,1}<nuw><%for.body> U: [2,0) S: [2,0) Exits: (trunc i64 (ptrtoint i64 (i32)* @sext_like_noop to i64) to i32) LoopDispositions: { %for.body: Computable }
402 ; PTR64_IDX64-NEXT:  Determining loop execution counts for: @sext_like_noop
403 ; PTR64_IDX64-NEXT:  Loop %for.body: backedge-taken count is (-2 + (trunc i64 (ptrtoint i64 (i32)* @sext_like_noop to i64) to i32))
404 ; PTR64_IDX64-NEXT:  Loop %for.body: max backedge-taken count is -1
405 ; PTR64_IDX64-NEXT:  Loop %for.body: Predicated backedge-taken count is (-2 + (trunc i64 (ptrtoint i64 (i32)* @sext_like_noop to i64) to i32))
406 ; PTR64_IDX64-NEXT:   Predicates:
407 ; PTR64_IDX64:       Loop %for.body: Trip multiple is 1
409 ; PTR64_IDX32-LABEL: 'sext_like_noop'
410 ; PTR64_IDX32-NEXT:  Classifying expressions for: @sext_like_noop
411 ; PTR64_IDX32-NEXT:    %ii = sext i32 %i to i64
412 ; PTR64_IDX32-NEXT:    --> (sext i32 {1,+,1}<nuw><%for.body> to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) --> (sext i32 (-1 + ptrtoint (i64 (i32)* @sext_like_noop to i32)) to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)
413 ; PTR64_IDX32-NEXT:    %div = sdiv i64 55555, %ii
414 ; PTR64_IDX32-NEXT:    --> %div U: full-set S: full-set --> sdiv (i64 55555, i64 sext (i32 add (i32 ptrtoint (i64 (i32)* @sext_like_noop to i32), i32 -1) to i64)) U: full-set S: full-set
415 ; PTR64_IDX32-NEXT:    %i = phi i32 [ %inc, %for.body ], [ 1, %entry ]
416 ; PTR64_IDX32-NEXT:    --> {1,+,1}<nuw><%for.body> U: [1,0) S: [1,0) Exits: (-1 + ptrtoint (i64 (i32)* @sext_like_noop to i32)) LoopDispositions: { %for.body: Computable }
417 ; PTR64_IDX32-NEXT:    %inc = add nuw i32 %i, 1
418 ; PTR64_IDX32-NEXT:    --> {2,+,1}<nuw><%for.body> U: [2,0) S: [2,0) Exits: ptrtoint (i64 (i32)* @sext_like_noop to i32) LoopDispositions: { %for.body: Computable }
419 ; PTR64_IDX32-NEXT:  Determining loop execution counts for: @sext_like_noop
420 ; PTR64_IDX32-NEXT:  Loop %for.body: backedge-taken count is (-2 + ptrtoint (i64 (i32)* @sext_like_noop to i32))
421 ; PTR64_IDX32-NEXT:  Loop %for.body: max backedge-taken count is -1
422 ; PTR64_IDX32-NEXT:  Loop %for.body: Predicated backedge-taken count is (-2 + ptrtoint (i64 (i32)* @sext_like_noop to i32))
423 ; PTR64_IDX32-NEXT:   Predicates:
424 ; PTR64_IDX32:       Loop %for.body: Trip multiple is 1
426 ; PTR16_IDX16-LABEL: 'sext_like_noop'
427 ; PTR16_IDX16-NEXT:  Classifying expressions for: @sext_like_noop
428 ; PTR16_IDX16-NEXT:    %ii = sext i32 %i to i64
429 ; PTR16_IDX16-NEXT:    --> (sext i32 {1,+,1}<nuw><%for.body> to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) --> (-1 + (zext i16 (ptrtoint i64 (i32)* @sext_like_noop to i16) to i64))<nsw> U: [-1,65535) S: [-1,65535)
430 ; PTR16_IDX16-NEXT:    %div = sdiv i64 55555, %ii
431 ; PTR16_IDX16-NEXT:    --> %div U: full-set S: full-set --> sdiv (i64 55555, i64 add (i64 zext (i16 ptrtoint (i64 (i32)* @sext_like_noop to i16) to i64), i64 -1)) U: full-set S: full-set
432 ; PTR16_IDX16-NEXT:    %i = phi i32 [ %inc, %for.body ], [ 1, %entry ]
433 ; PTR16_IDX16-NEXT:    --> {1,+,1}<nuw><%for.body> U: [1,0) S: [1,0) Exits: (-1 + (zext i16 (ptrtoint i64 (i32)* @sext_like_noop to i16) to i32))<nsw> LoopDispositions: { %for.body: Computable }
434 ; PTR16_IDX16-NEXT:    %inc = add nuw i32 %i, 1
435 ; PTR16_IDX16-NEXT:    --> {2,+,1}<nuw><%for.body> U: [2,0) S: [2,0) Exits: (zext i16 (ptrtoint i64 (i32)* @sext_like_noop to i16) to i32) LoopDispositions: { %for.body: Computable }
436 ; PTR16_IDX16-NEXT:  Determining loop execution counts for: @sext_like_noop
437 ; PTR16_IDX16-NEXT:  Loop %for.body: backedge-taken count is (-2 + (zext i16 (ptrtoint i64 (i32)* @sext_like_noop to i16) to i32))<nsw>
438 ; PTR16_IDX16-NEXT:  Loop %for.body: max backedge-taken count is -1
439 ; PTR16_IDX16-NEXT:  Loop %for.body: Predicated backedge-taken count is (-2 + (zext i16 (ptrtoint i64 (i32)* @sext_like_noop to i16) to i32))<nsw>
440 ; PTR16_IDX16-NEXT:   Predicates:
441 ; PTR16_IDX16:       Loop %for.body: Trip multiple is 1
443 ; PTR16_IDX32-LABEL: 'sext_like_noop'
444 ; PTR16_IDX32-NEXT:  Classifying expressions for: @sext_like_noop
445 ; PTR16_IDX32-NEXT:    %ii = sext i32 %i to i64
446 ; PTR16_IDX32-NEXT:    --> (sext i32 {1,+,1}<nuw><%for.body> to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) --> (-1 + (zext i32 ptrtoint (i64 (i32)* @sext_like_noop to i32) to i64))<nsw> U: [-1,65535) S: [-1,65535)
447 ; PTR16_IDX32-NEXT:    %div = sdiv i64 55555, %ii
448 ; PTR16_IDX32-NEXT:    --> %div U: full-set S: full-set --> sdiv (i64 55555, i64 add (i64 zext (i32 ptrtoint (i64 (i32)* @sext_like_noop to i32) to i64), i64 -1)) U: full-set S: full-set
449 ; PTR16_IDX32-NEXT:    %i = phi i32 [ %inc, %for.body ], [ 1, %entry ]
450 ; PTR16_IDX32-NEXT:    --> {1,+,1}<nuw><%for.body> U: [1,0) S: [1,0) Exits: (-1 + ptrtoint (i64 (i32)* @sext_like_noop to i32))<nsw> LoopDispositions: { %for.body: Computable }
451 ; PTR16_IDX32-NEXT:    %inc = add nuw i32 %i, 1
452 ; PTR16_IDX32-NEXT:    --> {2,+,1}<nuw><%for.body> U: [2,0) S: [2,0) Exits: ptrtoint (i64 (i32)* @sext_like_noop to i32) LoopDispositions: { %for.body: Computable }
453 ; PTR16_IDX32-NEXT:  Determining loop execution counts for: @sext_like_noop
454 ; PTR16_IDX32-NEXT:  Loop %for.body: backedge-taken count is (-2 + ptrtoint (i64 (i32)* @sext_like_noop to i32))<nsw>
455 ; PTR16_IDX32-NEXT:  Loop %for.body: max backedge-taken count is -1
456 ; PTR16_IDX32-NEXT:  Loop %for.body: Predicated backedge-taken count is (-2 + ptrtoint (i64 (i32)* @sext_like_noop to i32))<nsw>
457 ; PTR16_IDX32-NEXT:   Predicates:
458 ; PTR16_IDX32:       Loop %for.body: Trip multiple is 1
460 entry:
461   %cmp6 = icmp sgt i32 %n, 1
462   br label %for.body
464 for.cond.cleanup:
465   %ii = sext i32 %i to i64
466   %div = sdiv i64 55555, %ii
467   ret i64 %div
469 for.body:
470   %i = phi i32 [ %inc, %for.body ], [ 1, %entry ]
471   %inc = add nuw i32 %i, 1
472   %exitcond = icmp eq i32 %inc, ptrtoint (i64 (i32)* @sext_like_noop to i32)
473   br i1 %exitcond, label %for.cond.cleanup, label %for.body
475 declare void @f(i64)