ソースを参照

[analyzer] avoid some work for PHI nodes if values differ

Simon Krajewski 10 年 前
コミット
c3c19477e3
1 ファイル変更9 行追加9 行削除
  1. 9 9
      analyzer.ml

+ 9 - 9
analyzer.ml

@@ -956,16 +956,16 @@ module ConstPropagation = struct
 				e
 			else
 				value ssa e'
-		| TCall ({eexpr = TLocal {v_name = "__ssa_phi__"}},el) ->
-			let el = List.map (value ssa) el in
-			begin match el with
-				| [] -> assert false
+		| TCall ({eexpr = TLocal {v_name = "__ssa_phi__"}},e1 :: el) ->
+			let e1v = value ssa e1 in
+			let rec loop el = match el with
 				| e1 :: el ->
-					if List.for_all (fun e2 -> expr_eq e1 e2) el then
-						value ssa e1
-					else
-						e
-			end
+					let e1 = value ssa e1 in
+					if not (expr_eq e1 e1v) then e else loop el
+				| [] ->
+					e1v
+			in
+			loop el
 		| TParenthesis e1 | TMeta(_,e1) ->
 			value ssa e1
 		| TLocal v ->