@@ -76,20 +76,22 @@ int getEffectiveMulOperands(MulExpr me) {
76
76
* using SimpleRangeAnalysis.
77
77
*/
78
78
class AnalyzableExpr extends Expr {
79
- float maxValue ( ) { result = upperBound ( this .getFullyConverted ( ) ) }
79
+ QlBuiltins :: BigInt maxValue ( ) { result = upperBound ( this .getFullyConverted ( ) ) }
80
80
81
- float minValue ( ) { result = lowerBound ( this .getFullyConverted ( ) ) }
81
+ QlBuiltins :: BigInt minValue ( ) { result = lowerBound ( this .getFullyConverted ( ) ) }
82
82
}
83
83
84
84
class ParenAnalyzableExpr extends AnalyzableExpr , ParenthesisExpr {
85
- override float maxValue ( ) { result = this .getExpr ( ) .( AnalyzableExpr ) .maxValue ( ) }
85
+ override QlBuiltins :: BigInt maxValue ( ) { result = this .getExpr ( ) .( AnalyzableExpr ) .maxValue ( ) }
86
86
87
- override float minValue ( ) { result = this .getExpr ( ) .( AnalyzableExpr ) .minValue ( ) }
87
+ override QlBuiltins :: BigInt minValue ( ) { result = this .getExpr ( ) .( AnalyzableExpr ) .minValue ( ) }
88
88
}
89
89
90
90
class MulAnalyzableExpr extends AnalyzableExpr , MulExpr {
91
- override float maxValue ( ) {
92
- exists ( float x1 , float y1 , float x2 , float y2 |
91
+ override QlBuiltins:: BigInt maxValue ( ) {
92
+ exists (
93
+ QlBuiltins:: BigInt x1 , QlBuiltins:: BigInt y1 , QlBuiltins:: BigInt x2 , QlBuiltins:: BigInt y2
94
+ |
93
95
x1 = this .getLeftOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .minValue ( ) and
94
96
x2 = this .getLeftOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .maxValue ( ) and
95
97
y1 = this .getRightOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .minValue ( ) and
@@ -98,8 +100,10 @@ class MulAnalyzableExpr extends AnalyzableExpr, MulExpr {
98
100
)
99
101
}
100
102
101
- override float minValue ( ) {
102
- exists ( float x1 , float x2 , float y1 , float y2 |
103
+ override QlBuiltins:: BigInt minValue ( ) {
104
+ exists (
105
+ QlBuiltins:: BigInt x1 , QlBuiltins:: BigInt x2 , QlBuiltins:: BigInt y1 , QlBuiltins:: BigInt y2
106
+ |
103
107
x1 = this .getLeftOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .minValue ( ) and
104
108
x2 = this .getLeftOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .maxValue ( ) and
105
109
y1 = this .getRightOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .minValue ( ) and
@@ -110,27 +114,27 @@ class MulAnalyzableExpr extends AnalyzableExpr, MulExpr {
110
114
}
111
115
112
116
class AddAnalyzableExpr extends AnalyzableExpr , AddExpr {
113
- override float maxValue ( ) {
117
+ override QlBuiltins :: BigInt maxValue ( ) {
114
118
result =
115
119
this .getLeftOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .maxValue ( ) +
116
120
this .getRightOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .maxValue ( )
117
121
}
118
122
119
- override float minValue ( ) {
123
+ override QlBuiltins :: BigInt minValue ( ) {
120
124
result =
121
125
this .getLeftOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .minValue ( ) +
122
126
this .getRightOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .minValue ( )
123
127
}
124
128
}
125
129
126
130
class SubAnalyzableExpr extends AnalyzableExpr , SubExpr {
127
- override float maxValue ( ) {
131
+ override QlBuiltins :: BigInt maxValue ( ) {
128
132
result =
129
133
this .getLeftOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .maxValue ( ) -
130
134
this .getRightOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .minValue ( )
131
135
}
132
136
133
- override float minValue ( ) {
137
+ override QlBuiltins :: BigInt minValue ( ) {
134
138
result =
135
139
this .getLeftOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .minValue ( ) -
136
140
this .getRightOperand ( ) .getFullyConverted ( ) .( AnalyzableExpr ) .maxValue ( )
@@ -140,7 +144,7 @@ class SubAnalyzableExpr extends AnalyzableExpr, SubExpr {
140
144
class VarAnalyzableExpr extends AnalyzableExpr , VariableAccess {
141
145
VarAnalyzableExpr ( ) { this .getTarget ( ) instanceof StackVariable }
142
146
143
- override float maxValue ( ) {
147
+ override QlBuiltins :: BigInt maxValue ( ) {
144
148
exists ( SsaDefinition def , Variable v |
145
149
def .getAUse ( v ) = this and
146
150
// if there is a defining expression, use that for
@@ -152,7 +156,7 @@ class VarAnalyzableExpr extends AnalyzableExpr, VariableAccess {
152
156
)
153
157
}
154
158
155
- override float minValue ( ) {
159
+ override QlBuiltins :: BigInt minValue ( ) {
156
160
exists ( SsaDefinition def , Variable v |
157
161
def .getAUse ( v ) = this and
158
162
if exists ( def .getDefiningValue ( v ) )
0 commit comments