diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d603688..dd2fd63 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -413,6 +413,7 @@
     writer/spirv/builder_global_variable_test.cc
     writer/spirv/builder_initializer_expression_test.cc
     writer/spirv/builder_literal_test.cc
+    writer/spirv/builder_return_test.cc
     writer/spirv/builder_test.cc
     writer/spirv/builder_type_test.cc
     writer/spirv/instruction_test.cc
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 9e1b9b8..32b0d98 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -26,6 +26,7 @@
 #include "src/ast/initializer_expression.h"
 #include "src/ast/int_literal.h"
 #include "src/ast/location_decoration.h"
+#include "src/ast/return_statement.h"
 #include "src/ast/set_decoration.h"
 #include "src/ast/struct.h"
 #include "src/ast/struct_member.h"
@@ -203,7 +204,11 @@
                                   Operand::Int(func_type_id)});
   push_inst(spv::Op::OpLabel, {result_op()});
 
-  // TODO(dsinclair): Function body ...
+  for (const auto& stmt : func->body()) {
+    if (!GenerateStatement(stmt.get())) {
+      return false;
+    }
+  }
 
   push_inst(spv::Op::OpFunctionEnd, {});
 
@@ -412,6 +417,29 @@
   return result_id;
 }
 
+bool Builder::GenerateReturnStatement(ast::ReturnStatement* stmt) {
+  if (stmt->has_value()) {
+    auto val_id = GenerateExpression(stmt->value());
+    if (val_id == 0) {
+      return false;
+    }
+    push_inst(spv::Op::OpReturnValue, {Operand::Int(val_id)});
+  } else {
+    push_inst(spv::Op::OpReturn, {});
+  }
+
+  return true;
+}
+
+bool Builder::GenerateStatement(ast::Statement* stmt) {
+  if (stmt->IsReturn()) {
+    return GenerateReturnStatement(stmt->AsReturn());
+  }
+
+  error_ = "Unknown statement";
+  return false;
+}
+
 uint32_t Builder::GenerateTypeIfNeeded(ast::type::Type* type) {
   if (type->IsAlias()) {
     return GenerateTypeIfNeeded(type->AsAlias()->type());
diff --git a/src/writer/spirv/builder.h b/src/writer/spirv/builder.h
index 5490b16..a7429bb 100644
--- a/src/writer/spirv/builder.h
+++ b/src/writer/spirv/builder.h
@@ -166,6 +166,14 @@
   /// @param lit the literal to generate
   /// @returns the ID on success or 0 on failure
   uint32_t GenerateLiteralIfNeeded(ast::Literal* lit);
+  /// Generates a return statement
+  /// @param stmt the statement to generate
+  /// @returns true on success, false otherwise
+  bool GenerateReturnStatement(ast::ReturnStatement* stmt);
+  /// Generates a statement
+  /// @param stmt the statement to generate
+  /// @returns true if the statement was generated
+  bool GenerateStatement(ast::Statement* stmt);
   /// Generates a type if not already created
   /// @param type the type to create
   /// @returns the ID to use for the given type. Returns 0 on unknown type.
diff --git a/src/writer/spirv/builder_return_test.cc b/src/writer/spirv/builder_return_test.cc
new file mode 100644
index 0000000..57134e6
--- /dev/null
+++ b/src/writer/spirv/builder_return_test.cc
@@ -0,0 +1,79 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <memory>
+
+#include "gtest/gtest.h"
+#include "src/ast/const_initializer_expression.h"
+#include "src/ast/float_literal.h"
+#include "src/ast/return_statement.h"
+#include "src/ast/type/f32_type.h"
+#include "src/ast/type/vector_type.h"
+#include "src/ast/type_initializer_expression.h"
+#include "src/writer/spirv/builder.h"
+#include "src/writer/spirv/spv_dump.h"
+
+namespace tint {
+namespace writer {
+namespace spirv {
+namespace {
+
+using BuilderTest = testing::Test;
+
+TEST_F(BuilderTest, Return) {
+  ast::ReturnStatement ret;
+
+  Builder b;
+  EXPECT_TRUE(b.GenerateReturnStatement(&ret));
+  ASSERT_FALSE(b.has_error()) << b.error();
+
+  EXPECT_EQ(DumpInstructions(b.instructions()), R"(OpReturn
+)");
+}
+
+TEST_F(BuilderTest, Return_WithValue) {
+  ast::type::F32Type f32;
+  ast::type::VectorType vec(&f32, 3);
+
+  std::vector<std::unique_ptr<ast::Expression>> vals;
+  vals.push_back(std::make_unique<ast::ConstInitializerExpression>(
+      std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
+  vals.push_back(std::make_unique<ast::ConstInitializerExpression>(
+      std::make_unique<ast::FloatLiteral>(&f32, 1.0f)));
+  vals.push_back(std::make_unique<ast::ConstInitializerExpression>(
+      std::make_unique<ast::FloatLiteral>(&f32, 3.0f)));
+
+  auto val =
+      std::make_unique<ast::TypeInitializerExpression>(&vec, std::move(vals));
+
+  ast::ReturnStatement ret(std::move(val));
+
+  Builder b;
+  EXPECT_TRUE(b.GenerateReturnStatement(&ret));
+  ASSERT_FALSE(b.has_error()) << b.error();
+
+  EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32
+%1 = OpTypeVector %2 3
+%3 = OpConstant %2 1
+%4 = OpConstant %2 3
+%5 = OpCompositeConstruct %1 %3 %3 %4
+)");
+  EXPECT_EQ(DumpInstructions(b.instructions()), R"(OpReturnValue %5
+)");
+}
+
+}  // namespace
+}  // namespace spirv
+}  // namespace writer
+}  // namespace tint
