+
+buildExpr binds (AST.For ident start cond mStep body) = mdo
+ startV <- buildExpr binds start
+
+ preheaderB <- block `named` "preheader"
+
+ br loopB
+
+ loopB <- block `named` "loop"
+
+ i <- phi [(startV, preheaderB), (nextVar, loopB)] `named` "i"
+
+ let newBinds = Map.insert ident i binds
+
+ buildExpr newBinds body `named` "body"
+
+ stepV <- case mStep of
+ Just step -> buildExpr newBinds step
+ Nothing -> pure $ ConstantOperand (Float (Double 1))
+
+ nextVar <- fadd i stepV `named` "nextvar"
+
+ condV <- buildExpr newBinds cond `named` "cond"
+
+ condBr condV loopB afterB
+
+ afterB <- block `named` "after"
+
+ return (ConstantOperand (Float (Double 0)))
+