32:
that tracks the range (interval) of values that a numeric variable can take on at each point of a program's execution. The resulting information can be used in optimizations such as redundancy elimination,
174:
321:
142:
355:
167:
527:
553:
404:
305:
558:
446:
160:
37:, instruction selection, etc., but can also be used to improve the safety of programs, e.g. in the detection of
341:
425:
476:
441:
365:
240:
220:
225:
53:
373:
350:
326:
255:
502:
497:
451:
378:
202:
197:
34:
456:
300:
49:
42:
8:
512:
383:
275:
183:
507:
471:
290:
280:
230:
90:
29:
388:
212:
94:
73:
Harrison, William H. (1977). "Compiler
Analysis of the Value Ranges for Variables".
522:
461:
331:
310:
270:
250:
82:
517:
38:
492:
466:
265:
260:
245:
124:
547:
86:
110:
A First Step
Towards Automated Detection of Buffer Overrun Vulnerabilities
235:
152:
315:
125:"Value Range Analysis of Conditionally Updated Variables and Pointers"
409:
17:
21:
108:
Wagner, D.; Foster, J. S.; Brewer, E. A.; Aiken, A. (2000).
107:
123:
Birch, Johnnie; van
Engelen, Robert; Gallivan, Kyle.
143:"Value range propagation in GCC with Project Ranger"
122:
41:. Techniques for value range analysis typically use
48:Value range analysis is often implemented in the
545:
322:Induction variable recognition and elimination
168:
182:
175:
161:
75:IEEE Transactions on Software Engineering
72:
356:Sparse conditional constant propagation
546:
156:
140:
13:
14:
570:
306:Common subexpression elimination
447:Compile-time function execution
134:
116:
101:
66:
1:
59:
426:Interprocedural optimization
7:
477:Profile-guided optimization
442:Bounds-checking elimination
10:
575:
241:Loop-invariant code motion
485:
434:
418:
397:
364:
340:
289:
221:Automatic parallelization
211:
190:
554:Static program analysis
226:Automatic vectorization
87:10.1109/TSE.1977.231133
559:Compiler optimizations
374:Instruction scheduling
351:Global value numbering
327:Live-variable analysis
256:Loop nest optimization
184:Compiler optimizations
52:and is implemented in
503:Control-flow analysis
498:Array-access analysis
452:Dead-code elimination
410:Tail-call elimination
379:Instruction selection
203:Local value numbering
198:Peephole optimization
35:dead code elimination
533:Value range analysis
457:Expression templates
301:Available expression
26:value range analysis
513:Dependence analysis
384:Register allocation
276:Software pipelining
508:Data-flow analysis
472:Partial evaluation
281:Strength reduction
231:Induction variable
50:Intel C++ Compiler
30:data flow analysis
541:
540:
389:Rematerialization
141:MacLeod, Andrew.
43:symbolic analysis
566:
523:Pointer analysis
462:Inline expansion
332:Use-define chain
311:Constant folding
271:Loop unswitching
251:Loop interchange
177:
170:
163:
154:
153:
147:
146:
138:
132:
131:
129:
120:
114:
113:
105:
99:
98:
70:
20:, in particular
574:
573:
569:
568:
567:
565:
564:
563:
544:
543:
542:
537:
518:Escape analysis
486:Static analysis
481:
430:
414:
393:
366:Code generation
360:
336:
292:
285:
207:
186:
181:
151:
150:
139:
135:
127:
121:
117:
106:
102:
71:
67:
62:
39:buffer overruns
12:
11:
5:
572:
562:
561:
556:
539:
538:
536:
535:
530:
528:Shape analysis
525:
520:
515:
510:
505:
500:
495:
493:Alias analysis
489:
487:
483:
482:
480:
479:
474:
469:
467:Jump threading
464:
459:
454:
449:
444:
438:
436:
432:
431:
429:
428:
422:
420:
416:
415:
413:
412:
407:
401:
399:
395:
394:
392:
391:
386:
381:
376:
370:
368:
362:
361:
359:
358:
353:
347:
345:
338:
337:
335:
334:
329:
324:
319:
313:
308:
303:
297:
295:
287:
286:
284:
283:
278:
273:
268:
266:Loop unrolling
263:
261:Loop splitting
258:
253:
248:
246:Loop inversion
243:
238:
233:
228:
223:
217:
215:
209:
208:
206:
205:
200:
194:
192:
188:
187:
180:
179:
172:
165:
157:
149:
148:
133:
115:
100:
81:(3): 243–250.
64:
63:
61:
58:
24:construction,
9:
6:
4:
3:
2:
571:
560:
557:
555:
552:
551:
549:
534:
531:
529:
526:
524:
521:
519:
516:
514:
511:
509:
506:
504:
501:
499:
496:
494:
491:
490:
488:
484:
478:
475:
473:
470:
468:
465:
463:
460:
458:
455:
453:
450:
448:
445:
443:
440:
439:
437:
433:
427:
424:
423:
421:
417:
411:
408:
406:
405:Deforestation
403:
402:
400:
396:
390:
387:
385:
382:
380:
377:
375:
372:
371:
369:
367:
363:
357:
354:
352:
349:
348:
346:
343:
339:
333:
330:
328:
325:
323:
320:
317:
314:
312:
309:
307:
304:
302:
299:
298:
296:
294:
288:
282:
279:
277:
274:
272:
269:
267:
264:
262:
259:
257:
254:
252:
249:
247:
244:
242:
239:
237:
234:
232:
229:
227:
224:
222:
219:
218:
216:
214:
210:
204:
201:
199:
196:
195:
193:
189:
185:
178:
173:
171:
166:
164:
159:
158:
155:
144:
137:
126:
119:
111:
104:
96:
92:
88:
84:
80:
76:
69:
65:
57:
55:
51:
46:
45:extensively.
44:
40:
36:
31:
28:is a type of
27:
23:
19:
532:
136:
118:
109:
103:
78:
74:
68:
47:
25:
15:
318:elimination
236:Loop fusion
191:Basic block
548:Categories
398:Functional
316:Dead store
60:References
291:Data-flow
18:computing
293:analysis
95:17018610
22:compiler
112:. NDSS.
419:Global
344:-based
93:
435:Other
128:(PDF)
91:S2CID
213:Loop
342:SSA
83:doi
54:GCC
16:In
550::
89:.
77:.
56:.
176:e
169:t
162:v
145:.
130:.
97:.
85::
79:3
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.