From 39d54326542fb86cbcaeda1f378284d3e8963dfe Mon Sep 17 00:00:00 2001 From: Hugh Perkins Date: Sat, 26 Apr 2025 19:08:23 -0400 Subject: [PATCH 1/3] adding boolean to builder --- taichi/ir/ir_builder.cpp | 6 ++++++ taichi/ir/ir_builder.h | 1 + tests/cpp/ir/ir_builder_test.cpp | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/taichi/ir/ir_builder.cpp b/taichi/ir/ir_builder.cpp index b28412cd441f4..bfc99fcbfc744 100644 --- a/taichi/ir/ir_builder.cpp +++ b/taichi/ir/ir_builder.cpp @@ -138,6 +138,12 @@ LoopIndexStmt *IRBuilder::get_loop_index(Stmt *loop, int index) { return insert(Stmt::make_typed(loop, index)); } +ConstStmt *IRBuilder::get_bool(bool value) { + return insert(Stmt::make_typed(TypedConstant( + TypeFactory::get_instance().get_primitive_type(PrimitiveTypeID::u1), + value))); +} + ConstStmt *IRBuilder::get_int32(int32 value) { return insert(Stmt::make_typed(TypedConstant( TypeFactory::get_instance().get_primitive_type(PrimitiveTypeID::i32), diff --git a/taichi/ir/ir_builder.h b/taichi/ir/ir_builder.h index c585ed7be425e..5c3aab031577b 100644 --- a/taichi/ir/ir_builder.h +++ b/taichi/ir/ir_builder.h @@ -130,6 +130,7 @@ class IRBuilder { LoopIndexStmt *get_loop_index(Stmt *loop, int index = 0); // Constants. TODO: add more types + ConstStmt *get_bool(bool value); ConstStmt *get_int32(int32 value); ConstStmt *get_int64(int64 value); ConstStmt *get_uint32(uint32 value); diff --git a/tests/cpp/ir/ir_builder_test.cpp b/tests/cpp/ir/ir_builder_test.cpp index c76e4febdee64..ee8e7d6f7a9b0 100644 --- a/tests/cpp/ir/ir_builder_test.cpp +++ b/tests/cpp/ir/ir_builder_test.cpp @@ -4,12 +4,30 @@ #include "taichi/ir/statements.h" #include "tests/cpp/program/test_program.h" #include "tests/cpp/ir/ndarray_kernel.h" +#include "taichi/ir/transforms.h" #ifdef TI_WITH_VULKAN #include "taichi/rhi/vulkan/vulkan_loader.h" #endif namespace taichi::lang { +TEST(IRBuilder, Bool) { + IRBuilder builder; + auto *bool_true = builder.get_bool(true); + auto *bool_false = builder.get_bool(false); + auto ir = builder.extract_ir(); + // auto *result = builder.create_print(bool_true, "", ""); + // auto *print = result->cast(); + auto print = irpass::make_pass_printer(true, true, "", bool_true); + // irpass::re_id(ir); + std::cout << std::flush; + irpass::print(bool_true); + std::cout << std::flush; + std::cout << std::flush; + irpass::print(bool_false); + std::cout << std::flush; +} + TEST(IRBuilder, Basic) { IRBuilder builder; auto *lhs = builder.get_int32(40); From bfe008b848a2c688f6856f20790def63eb4cedbf Mon Sep 17 00:00:00 2001 From: Hugh Perkins Date: Sat, 26 Apr 2025 19:31:36 -0400 Subject: [PATCH 2/3] better builder test --- tests/cpp/ir/ir_builder_test.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/tests/cpp/ir/ir_builder_test.cpp b/tests/cpp/ir/ir_builder_test.cpp index ee8e7d6f7a9b0..3ac06368c7c23 100644 --- a/tests/cpp/ir/ir_builder_test.cpp +++ b/tests/cpp/ir/ir_builder_test.cpp @@ -15,17 +15,18 @@ TEST(IRBuilder, Bool) { IRBuilder builder; auto *bool_true = builder.get_bool(true); auto *bool_false = builder.get_bool(false); - auto ir = builder.extract_ir(); - // auto *result = builder.create_print(bool_true, "", ""); - // auto *print = result->cast(); + builder.create_and(bool_true, bool_false); + auto block = builder.extract_ir(); + auto print = irpass::make_pass_printer(true, true, "", bool_true); - // irpass::re_id(ir); - std::cout << std::flush; - irpass::print(bool_true); - std::cout << std::flush; - std::cout << std::flush; - irpass::print(bool_false); - std::cout << std::flush; + std::string ir_string; + irpass::print(block->get_ir_root(), &ir_string); + EXPECT_STREQ(ir_string.c_str(), R"(kernel { + $0 = const true + $1 = const false + $2 = bit_and $0 $1 +} +)"); } TEST(IRBuilder, Basic) { From 15495b5327f0878e94512cdc6ad694b051e4caa9 Mon Sep 17 00:00:00 2001 From: Hugh Perkins Date: Fri, 2 May 2025 06:27:26 -0400 Subject: [PATCH 3/3] remove unused print from bool --- tests/cpp/ir/ir_builder_test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/cpp/ir/ir_builder_test.cpp b/tests/cpp/ir/ir_builder_test.cpp index 3ac06368c7c23..9410cdf37a16f 100644 --- a/tests/cpp/ir/ir_builder_test.cpp +++ b/tests/cpp/ir/ir_builder_test.cpp @@ -18,7 +18,6 @@ TEST(IRBuilder, Bool) { builder.create_and(bool_true, bool_false); auto block = builder.extract_ir(); - auto print = irpass::make_pass_printer(true, true, "", bool_true); std::string ir_string; irpass::print(block->get_ir_root(), &ir_string); EXPECT_STREQ(ir_string.c_str(), R"(kernel {