3 # Generate helper table for array bounds check removal
6 # Massimiliano Mantione (massi@ximian.com)
8 # (C) 2004 Ximian, Inc. http://www.ximian.com
11 'MONO_NO_RELATION', # 000
12 'MONO_EQ_RELATION', # 001
13 'MONO_LT_RELATION', # 010
14 'MONO_LE_RELATION', # 011 (MONO_LT_RELATION|MONO_EQ_RELATION)
15 'MONO_GT_RELATION', # 100
16 'MONO_GE_RELATION', # 101 (MONO_GT_RELATION|MONO_EQ_RELATION)
17 'MONO_NE_RELATION', # 110 (MONO_LT_RELATION|MONO_GT_RELATION)
18 'MONO_ANY_RELATION', # 111 (MONO_EQ_RELATION|MONO_LT_RELATION|MONO_GT_RELATION)
21 sub build_propagated_relation
23 my ( $main_relation, $related_relation ) = @_;
24 my $result = 'MONO_UNKNOWN_RELATION';
26 if ( ($main_relation eq 'MONO_EQ_RELATION') && ($related_relation ne 'MONO_NO_RELATION') )
28 $result = $related_relation;
30 elsif ( $main_relation eq 'MONO_LT_RELATION' )
32 if ( $related_relation eq 'MONO_EQ_RELATION' )
34 $result = 'MONO_LT_RELATION';
36 elsif ( $related_relation eq 'MONO_LT_RELATION' )
38 $result = 'MONO_LT_RELATION';
40 elsif ( $related_relation eq 'MONO_LE_RELATION' )
42 $result = 'MONO_LT_RELATION';
46 $result = 'MONO_ANY_RELATION';
49 elsif ( $main_relation eq 'MONO_LE_RELATION' )
51 if ( $related_relation eq 'MONO_EQ_RELATION' )
53 $result = 'MONO_LE_RELATION';
55 elsif ( $related_relation eq 'MONO_LT_RELATION' )
57 $result = 'MONO_LT_RELATION';
59 elsif ( $related_relation eq 'MONO_LE_RELATION' )
61 $result = 'MONO_LE_RELATION';
65 $result = 'MONO_ANY_RELATION';
69 elsif ( $main_relation eq 'MONO_GT_RELATION' )
71 if ( $related_relation eq 'MONO_EQ_RELATION' )
73 $result = 'MONO_GT_RELATION';
75 elsif ( $related_relation eq 'MONO_GT_RELATION' )
77 $result = 'MONO_GT_RELATION';
79 elsif ( $related_relation eq 'MONO_GE_RELATION' )
81 $result = 'MONO_GT_RELATION';
85 $result = 'MONO_ANY_RELATION';
88 elsif ( $main_relation eq 'MONO_GE_RELATION' )
90 if ( $related_relation eq 'MONO_EQ_RELATION' )
92 $result = 'MONO_GE_RELATION';
94 elsif ( $related_relation eq 'MONO_GT_RELATION' )
96 $result = 'MONO_GT_RELATION';
98 elsif ( $related_relation eq 'MONO_GE_RELATION' )
100 $result = 'MONO_GE_RELATION';
104 $result = 'MONO_ANY_RELATION';
109 $result = 'MONO_ANY_RELATION';
115 open FILE, ">propagated_relations_table.def";
117 for ( my $mr = 0; $mr < 8; $mr++ )
119 for ( my $pr = 0; $pr < 8; $pr++ )
121 my $propagated_relation = &build_propagated_relation( $relations[$mr], $relations[$pr] );
122 print FILE " $propagated_relation, /* $relations[$mr] - $relations[$pr] */\n";