https://gcc.gnu.org/g:e91b55fb3b48d219ac50d9744778fc91cb1f7d37
commit r15-8349-ge91b55fb3b48d219ac50d9744778fc91cb1f7d37 Author: badumbatish <tanghocle...@gmail.com> Date: Mon Jul 29 21:59:13 2024 -0700 gccrs: Lower the HIR to tree with CompileExpr gcc/rust/ChangeLog: * backend/rust-compile-asm.cc (CompileAsm::asm_construct_outputs): Lower the HIR to tree with CompileExpr * backend/rust-compile-asm.h: Remove static from method Diff: --- gcc/rust/backend/rust-compile-asm.cc | 15 +++++++++++---- gcc/rust/backend/rust-compile-asm.h | 18 +++++++++--------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/gcc/rust/backend/rust-compile-asm.cc b/gcc/rust/backend/rust-compile-asm.cc index 30a8cacf203a..32ad84e60e7d 100644 --- a/gcc/rust/backend/rust-compile-asm.cc +++ b/gcc/rust/backend/rust-compile-asm.cc @@ -1,5 +1,6 @@ #include "rust-compile-asm.h" #include "rust-system.h" +#include "rust-compile-expr.h" namespace Rust { namespace Compile { @@ -82,14 +83,20 @@ tree CompileAsm::asm_construct_outputs (HIR::InlineAsm &expr) { // TODO: Do i need to do this? - int count = 0; + tree head = NULL_TREE; for (auto &output : expr.get_operands ()) { - if (output.register_type == AST::InlineAsmOperand::RegisterType::Out) - count++; + if (output.get_register_type () + == AST::InlineAsmOperand::RegisterType::Out) + { + auto out = output.get_out (); + tree out_tree = CompileExpr::Compile (out.expr.get (), this->ctx); + Backend::debug (out_tree); + /*head = chainon (head, out_tree);*/ + } } - return NULL_TREE; + return head; } tree diff --git a/gcc/rust/backend/rust-compile-asm.h b/gcc/rust/backend/rust-compile-asm.h index 05bb99ab40d4..9779a4ad7fbe 100644 --- a/gcc/rust/backend/rust-compile-asm.h +++ b/gcc/rust/backend/rust-compile-asm.h @@ -46,15 +46,15 @@ public: // build_asm_expr (location_t loc, tree string, tree outputs, tree inputs, // tree clobbers, tree labels, bool simple, bool is_inline) static const int ASM_TREE_ARRAY_LENGTH = 5; - static tree asm_build_expr (HIR::InlineAsm &); - static tree asm_build_stmt (location_t, - const std::array<tree, ASM_TREE_ARRAY_LENGTH> &); - - static tree asm_construct_string_tree (HIR::InlineAsm &); - static tree asm_construct_outputs (HIR::InlineAsm &); - static tree asm_construct_inputs (HIR::InlineAsm &); - static tree asm_construct_clobber_tree (HIR::InlineAsm &); - static tree asm_construct_label_tree (HIR::InlineAsm &); + tree asm_build_expr (HIR::InlineAsm &); + tree asm_build_stmt (location_t, + const std::array<tree, ASM_TREE_ARRAY_LENGTH> &); + + tree asm_construct_string_tree (HIR::InlineAsm &); + tree asm_construct_outputs (HIR::InlineAsm &); + tree asm_construct_inputs (HIR::InlineAsm &); + tree asm_construct_clobber_tree (HIR::InlineAsm &); + tree asm_construct_label_tree (HIR::InlineAsm &); CompileAsm (Context *ctx);