{'fraction_non_alphanumeric': 0.016850291639662993, 'fraction_numerical': 0.0, 'mean_word_length': 5.251012145748988, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Automatic utilization of constraints for timing analysis

Predicting the worst-case execution time (WCET) and best-case execution time (BCET) of a real-time program is a challenging task. Though much progress has been made in obtaining tighter timing predictions by using techniques that model the architectural features of a machine, significant overestimations of WCET and underestimations of BCET can still occur. It is essential to accurately calculate the number of loop iterations for all loops in order to tightly bound the program's execution time since most of a typical program's execution takes place inside of loops. In addition, dependences on data values can constrain the outcome of conditional branches and the corresponding set of paths that can be taken in a program. This dissertation describes how timing analysis can be improved when these two types of constraints are addressed. First, the minimum and maximum number of iterations are automatically calculated. Loops with multiple exit conditions or a varying number of iterations are also addressed. Second, constraints on branches are automatically detected during compilation. These branch constraints are then used to determine how many times each path in a loop or function can be taken. Finally, this iteration and branch constraint information is automatically utilized to obtain tighter bounds on the execution time. Not only does the timing analysis provide significantly tighter WCET and BCET predictions, the analysis response time is typically faster as well.