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);

Reply via email to