Browse Source

bugfix in int/float comparison optimization

Nicolas Cannasse 13 years ago
parent
commit
f3b8016a82
1 changed files with 14 additions and 14 deletions
  1. 14 14
      optimizer.ml

+ 14 - 14
optimizer.ml

@@ -593,7 +593,7 @@ let rec reduce_loop ctx e =
 				)
 			in
 			let ebool t =
-				{ e with eexpr = TConst (TBool (t (Int32.compare b a))) }
+				{ e with eexpr = TConst (TBool (t (Int32.compare a b) 0)) }
 			in
 			(match op with
 			| OpAdd -> check_overflow Int64.add
@@ -606,12 +606,12 @@ let rec reduce_loop ctx e =
 			| OpShl -> opt (fun a b -> Int32.shift_left a (Int32.to_int b))
 			| OpShr -> opt (fun a b -> Int32.shift_right a (Int32.to_int b))
 			| OpUShr -> opt (fun a b -> Int32.shift_right_logical a (Int32.to_int b))
-			| OpEq -> ebool ((=) 0)
-			| OpNotEq -> ebool ((<>) 0)
-			| OpGt -> ebool ((>) 0)
-			| OpGte -> ebool ((>=) 0)
-			| OpLt -> ebool ((<) 0)
-			| OpLte -> ebool ((<=) 0)
+			| OpEq -> ebool (=)
+			| OpNotEq -> ebool (<>)
+			| OpGt -> ebool (>)
+			| OpGte -> ebool (>=)
+			| OpLt -> ebool (<)
+			| OpLte -> ebool (<=)
 			| _ -> e)
 		| TConst ((TFloat _ | TInt _) as ca), TConst ((TFloat _ | TInt _) as cb) ->
 			let fa = (match ca with
@@ -626,19 +626,19 @@ let rec reduce_loop ctx e =
 			) in
 			let fop op = check_float op fa fb in
 			let ebool t =
-				{ e with eexpr = TConst (TBool (t (compare fa fb))) }
+				{ e with eexpr = TConst (TBool (t (compare fa fb) 0)) }
 			in
 			(match op with
 			| OpAdd -> fop (+.)
 			| OpDiv -> fop (/.)
 			| OpSub -> fop (-.)
 			| OpMult -> fop ( *. )
-			| OpEq -> ebool ((=) 0)
-			| OpNotEq -> ebool ((<>) 0)
-			| OpGt -> ebool ((>) 0)
-			| OpGte -> ebool ((>=) 0)
-			| OpLt -> ebool ((<) 0)
-			| OpLte -> ebool ((<=) 0)
+			| OpEq -> ebool (=)
+			| OpNotEq -> ebool (<>)
+			| OpGt -> ebool (>)
+			| OpGte -> ebool (>=)
+			| OpLt -> ebool (<)
+			| OpLte -> ebool (<=)
 			| _ -> e)
 		| TConst (TBool a), TConst (TBool b) ->
 			let ebool f =