diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc index 400415f680..540de5c885 100644 --- a/src/writer/spirv/builder.cc +++ b/src/writer/spirv/builder.cc @@ -635,6 +635,12 @@ uint32_t Builder::GenerateBinaryExpression(ast::BinaryExpression* expr) { op = lhs_is_float_or_vec ? spv::Op::OpFOrdNotEqual : spv::Op::OpINotEqual; } else if (expr->IsOr()) { op = spv::Op::OpBitwiseOr; + } else if (expr->IsShiftLeft()) { + op = spv::Op::OpShiftLeftLogical; + } else if (expr->IsShiftRight()) { + op = spv::Op::OpShiftRightLogical; + } else if (expr->IsShiftRightArith()) { + op = spv::Op::OpShiftRightArithmetic; } else if (expr->IsSubtract()) { op = lhs_is_float_or_vec ? spv::Op::OpFSub : spv::Op::OpISub; } else if (expr->IsXor()) { diff --git a/src/writer/spirv/builder_binary_expression_test.cc b/src/writer/spirv/builder_binary_expression_test.cc index b2c0d38160..97b3569772 100644 --- a/src/writer/spirv/builder_binary_expression_test.cc +++ b/src/writer/spirv/builder_binary_expression_test.cc @@ -120,13 +120,17 @@ TEST_P(BinaryArithSignedIntegerTest, Vector) { INSTANTIATE_TEST_SUITE_P( BuilderTest, BinaryArithSignedIntegerTest, - testing::Values(BinaryData{ast::BinaryOp::kAdd, "OpIAdd"}, - BinaryData{ast::BinaryOp::kAnd, "OpBitwiseAnd"}, - BinaryData{ast::BinaryOp::kDivide, "OpSDiv"}, - BinaryData{ast::BinaryOp::kModulo, "OpSMod"}, - BinaryData{ast::BinaryOp::kOr, "OpBitwiseOr"}, - BinaryData{ast::BinaryOp::kSubtract, "OpISub"}, - BinaryData{ast::BinaryOp::kXor, "OpBitwiseXor"})); + testing::Values( + BinaryData{ast::BinaryOp::kAdd, "OpIAdd"}, + BinaryData{ast::BinaryOp::kAnd, "OpBitwiseAnd"}, + BinaryData{ast::BinaryOp::kDivide, "OpSDiv"}, + BinaryData{ast::BinaryOp::kModulo, "OpSMod"}, + BinaryData{ast::BinaryOp::kOr, "OpBitwiseOr"}, + BinaryData{ast::BinaryOp::kShiftLeft, "OpShiftLeftLogical"}, + BinaryData{ast::BinaryOp::kShiftRight, "OpShiftRightLogical"}, + BinaryData{ast::BinaryOp::kShiftRightArith, "OpShiftRightArithmetic"}, + BinaryData{ast::BinaryOp::kSubtract, "OpISub"}, + BinaryData{ast::BinaryOp::kXor, "OpBitwiseXor"})); using BinaryArithUnsignedIntegerTest = testing::TestWithParam; TEST_P(BinaryArithUnsignedIntegerTest, Scalar) { @@ -203,13 +207,17 @@ TEST_P(BinaryArithUnsignedIntegerTest, Vector) { INSTANTIATE_TEST_SUITE_P( BuilderTest, BinaryArithUnsignedIntegerTest, - testing::Values(BinaryData{ast::BinaryOp::kAdd, "OpIAdd"}, - BinaryData{ast::BinaryOp::kAnd, "OpBitwiseAnd"}, - BinaryData{ast::BinaryOp::kDivide, "OpUDiv"}, - BinaryData{ast::BinaryOp::kModulo, "OpUMod"}, - BinaryData{ast::BinaryOp::kOr, "OpBitwiseOr"}, - BinaryData{ast::BinaryOp::kSubtract, "OpISub"}, - BinaryData{ast::BinaryOp::kXor, "OpBitwiseXor"})); + testing::Values( + BinaryData{ast::BinaryOp::kAdd, "OpIAdd"}, + BinaryData{ast::BinaryOp::kAnd, "OpBitwiseAnd"}, + BinaryData{ast::BinaryOp::kDivide, "OpUDiv"}, + BinaryData{ast::BinaryOp::kModulo, "OpUMod"}, + BinaryData{ast::BinaryOp::kOr, "OpBitwiseOr"}, + BinaryData{ast::BinaryOp::kShiftLeft, "OpShiftLeftLogical"}, + BinaryData{ast::BinaryOp::kShiftRight, "OpShiftRightLogical"}, + BinaryData{ast::BinaryOp::kShiftRightArith, "OpShiftRightArithmetic"}, + BinaryData{ast::BinaryOp::kSubtract, "OpISub"}, + BinaryData{ast::BinaryOp::kXor, "OpBitwiseXor"})); using BinaryArithFloatTest = testing::TestWithParam; TEST_P(BinaryArithFloatTest, Scalar) {