浏览代码

[analyzer] update PHI nodes as we go

Simon Krajewski 10 年之前
父节点
当前提交
224498a78b
共有 1 个文件被更改,包括 9 次插入9 次删除
  1. 9 9
      analyzer.ml

+ 9 - 9
analyzer.ml

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