diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index 0998926..fe3d320 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -4960,28 +4960,27 @@
 TypedExpression FunctionEmitter::MakeSimpleSelect(
     const spvtools::opt::Instruction& inst) {
   auto condition = MakeOperand(inst, 0);
-  auto operand1 = MakeOperand(inst, 1);
-  auto operand2 = MakeOperand(inst, 2);
+  auto true_value = MakeOperand(inst, 1);
+  auto false_value = MakeOperand(inst, 2);
 
   // SPIR-V validation requires:
   // - the condition to be bool or bool vector, so we don't check it here.
-  // - operand1, operand2, and result type to match.
+  // - true_value false_value, and result type to match.
   // - you can't select over pointers or pointer vectors, unless you also have
   //   a VariablePointers* capability, which is not allowed in by WebGPU.
-  auto* op_ty = operand1.type;
+  auto* op_ty = true_value.type;
   if (op_ty->Is<Vector>() || op_ty->IsFloatScalar() ||
       op_ty->IsIntegerScalar() || op_ty->Is<Bool>()) {
     ast::ExpressionList params;
-    params.push_back(operand1.expr);
-    params.push_back(operand2.expr);
+    params.push_back(false_value.expr);
+    params.push_back(true_value.expr);
     // The condition goes last.
     params.push_back(condition.expr);
-    return {operand1.type,
-            create<ast::CallExpression>(
-                Source{},
-                create<ast::IdentifierExpression>(
-                    Source{}, builder_.Symbols().Register("select")),
-                std::move(params))};
+    return {op_ty, create<ast::CallExpression>(
+                       Source{},
+                       create<ast::IdentifierExpression>(
+                           Source{}, builder_.Symbols().Register("select")),
+                       std::move(params))};
   }
   return {};
 }
diff --git a/src/reader/spirv/function_logical_test.cc b/src/reader/spirv/function_logical_test.cc
index 180e115..2d21a1b 100644
--- a/src/reader/spirv/function_logical_test.cc
+++ b/src/reader/spirv/function_logical_test.cc
@@ -1160,9 +1160,9 @@
       Call[not set]{
         Identifier[not set]{select}
         (
-          ScalarConstructor[not set]{true}
           ScalarConstructor[not set]{false}
           ScalarConstructor[not set]{true}
+          ScalarConstructor[not set]{true}
         )
       }
     }
@@ -1193,8 +1193,8 @@
       Call[not set]{
         Identifier[not set]{select}
         (
-          ScalarConstructor[not set]{10u}
           ScalarConstructor[not set]{20u}
+          ScalarConstructor[not set]{10u}
           ScalarConstructor[not set]{true}
         )
       }
@@ -1226,8 +1226,8 @@
       Call[not set]{
         Identifier[not set]{select}
         (
-          ScalarConstructor[not set]{50.000000}
           ScalarConstructor[not set]{60.000000}
+          ScalarConstructor[not set]{50.000000}
           ScalarConstructor[not set]{true}
         )
       }
@@ -1264,13 +1264,13 @@
         (
           TypeConstructor[not set]{
             __vec_2__u32
-            ScalarConstructor[not set]{10u}
             ScalarConstructor[not set]{20u}
+            ScalarConstructor[not set]{10u}
           }
           TypeConstructor[not set]{
             __vec_2__u32
-            ScalarConstructor[not set]{20u}
             ScalarConstructor[not set]{10u}
+            ScalarConstructor[not set]{20u}
           }
           ScalarConstructor[not set]{true}
         )
@@ -1311,13 +1311,13 @@
         (
           TypeConstructor[not set]{
             __vec_2__u32
-            ScalarConstructor[not set]{10u}
             ScalarConstructor[not set]{20u}
+            ScalarConstructor[not set]{10u}
           }
           TypeConstructor[not set]{
             __vec_2__u32
-            ScalarConstructor[not set]{20u}
             ScalarConstructor[not set]{10u}
+            ScalarConstructor[not set]{20u}
           }
           TypeConstructor[not set]{
             __vec_2__bool
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index dbaed5a..0a04858 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -1247,8 +1247,8 @@
 
 bool GeneratorImpl::EmitSelectCall(std::ostream& out,
                                    ast::CallExpression* expr) {
-  auto* expr_true = expr->params()[0];
-  auto* expr_false = expr->params()[1];
+  auto* expr_false = expr->params()[0];
+  auto* expr_true = expr->params()[1];
   auto* expr_cond = expr->params()[2];
   ScopedParen paren(out);
   if (!EmitExpression(out, expr_cond)) {
diff --git a/src/writer/hlsl/generator_impl_intrinsic_test.cc b/src/writer/hlsl/generator_impl_intrinsic_test.cc
index 1d5407a..7bc6289 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_test.cc
@@ -281,7 +281,7 @@
   gen.increment_indent();
   std::stringstream out;
   ASSERT_TRUE(gen.EmitExpression(out, call)) << gen.error();
-  EXPECT_EQ(out.str(), "(true ? 1.0f : 2.0f)");
+  EXPECT_EQ(out.str(), "(true ? 2.0f : 1.0f)");
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Select_Vector) {
@@ -293,7 +293,7 @@
   gen.increment_indent();
   std::stringstream out;
   ASSERT_TRUE(gen.EmitExpression(out, call)) << gen.error();
-  EXPECT_EQ(out.str(), "(bool2(true, false) ? int2(1, 2) : int2(3, 4))");
+  EXPECT_EQ(out.str(), "(bool2(true, false) ? int2(3, 4) : int2(1, 2))");
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Modf_Scalar) {
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 9382362..b647fa31 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -2448,8 +2448,8 @@
     case IntrinsicType::kSelect: {
       // Note: Argument order is different in WGSL and SPIR-V
       auto cond_id = get_param_as_value_id(2);
-      auto true_id = get_param_as_value_id(0);
-      auto false_id = get_param_as_value_id(1);
+      auto true_id = get_param_as_value_id(1);
+      auto false_id = get_param_as_value_id(0);
       if (!cond_id || !true_id || !false_id) {
         return 0;
       }
