]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Scaffolding asm codegen
authorjjasmine <tanghocle456@gmail.com>
Sat, 22 Jun 2024 18:56:50 +0000 (11:56 -0700)
committerArthur Cohen <arthur.cohen@embecosm.com>
Wed, 19 Mar 2025 14:32:05 +0000 (15:32 +0100)
gcc/rust/ChangeLog:

* backend/rust-compile-block.h:
Scaffolding asm codegen
* backend/rust-compile-expr.cc (CompileExpr::visit): Likewise.
* backend/rust-compile-expr.h: Likewise.
* checks/errors/borrowck/rust-bir-builder-expr-stmt.cc (ExprStmtBuilder::visit): Likewise.
* checks/errors/borrowck/rust-bir-builder-expr-stmt.h: Likewise.
* checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h: Likewise.
* checks/errors/privacy/rust-privacy-reporter.cc (PrivacyReporter::visit): Likewise.
* checks/errors/privacy/rust-privacy-reporter.h: Likewise.
* hir/tree/rust-hir-expr.h: Likewise.
* hir/tree/rust-hir-visitor.h: Likewise.
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Likewise.
* typecheck/rust-hir-type-check-expr.h: Likewise.

12 files changed:
gcc/rust/backend/rust-compile-block.h
gcc/rust/backend/rust-compile-expr.cc
gcc/rust/backend/rust-compile-expr.h
gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h
gcc/rust/checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h
gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
gcc/rust/checks/errors/privacy/rust-privacy-reporter.h
gcc/rust/hir/tree/rust-hir-expr.h
gcc/rust/hir/tree/rust-hir-visitor.h
gcc/rust/typecheck/rust-hir-type-check-expr.cc
gcc/rust/typecheck/rust-hir-type-check-expr.h

index b315c77651332723cbcec07713dd505b7da34fc7..d226b4be9f4e5f981cb1f7de3d74ce8f3187caa4 100644 (file)
@@ -101,6 +101,7 @@ public:
   void visit (HIR::MatchExpr &) override {}
   void visit (HIR::AwaitExpr &) override {}
   void visit (HIR::AsyncBlockExpr &) override {}
+  void visit (HIR::InlineAsm &) override {}
 
 private:
   CompileConditionalBlocks (Context *ctx, Bvariable *result)
@@ -184,6 +185,7 @@ public:
   void visit (HIR::MatchExpr &) override {}
   void visit (HIR::AwaitExpr &) override {}
   void visit (HIR::AsyncBlockExpr &) override {}
+  void visit (HIR::InlineAsm &) override {}
 
 private:
   CompileExprWithBlock (Context *ctx, Bvariable *result)
index e2fa6dda09e387d89f0db53c6114b0d35fc7c844..e23c691d1dbc5b96dd9e896aeeeae65dd35ccb22 100644 (file)
@@ -318,6 +318,10 @@ CompileExpr::visit (HIR::IfExpr &expr)
   ctx->add_statement (stmt);
 }
 
+void
+CompileExpr::visit (HIR::InlineAsm &expr)
+{}
+
 void
 CompileExpr::visit (HIR::IfExprConseqElse &expr)
 {
index b257da5e59cbcc7df5cdaf724d9b73f14d1ba4ed..ef907d1ca6255cc97c741074448598cc871253b8 100644 (file)
@@ -68,6 +68,7 @@ public:
   void visit (HIR::RangeFullExpr &expr) override;
   void visit (HIR::RangeFromToInclExpr &expr) override;
   void visit (HIR::ClosureExpr &expr) override;
+  void visit (HIR::InlineAsm &expr) override;
 
   // TODO
   void visit (HIR::ErrorPropagationExpr &) override {}
index 3515bdf030b6f93230e0bca462d73fe22e907e50..8d4d90aab80ce075c0eb9f7f71a4928efa1a92af 100644 (file)
@@ -21,6 +21,7 @@
 #include "rust-bir-builder-lazyboolexpr.h"
 #include "rust-bir-builder-pattern.h"
 #include "rust-bir-builder-struct.h"
+#include "rust-hir-expr.h"
 
 namespace Rust {
 namespace BIR {
@@ -317,6 +318,10 @@ ExprStmtBuilder::visit (HIR::CallExpr &expr)
               expr.get_locus (), true);
 }
 
+void
+ExprStmtBuilder::visit (HIR::InlineAsm &expr)
+{}
+
 void
 ExprStmtBuilder::visit (HIR::MethodCallExpr &expr)
 {}
index 3a58611e338ca9d47712ec8fdf39d19951bda47c..574f0f36fdd727eb24390f8343a9d0051e0041c6 100644 (file)
@@ -99,6 +99,7 @@ protected: // Expr
   void visit (HIR::WhileLetLoopExpr &expr) override;
   void visit (HIR::IfExpr &expr) override;
   void visit (HIR::IfExprConseqElse &expr) override;
+  void visit (HIR::InlineAsm &expr) override;
 
   void visit (HIR::IfLetExpr &expr) override;
   void visit (HIR::IfLetExprConseqElse &expr) override;
index 3f46d57ea51988c14c58f6020bd7e4b3f25ca300..8c1cd449aba1f1bd798af526ce71f71341f5a413 100644 (file)
@@ -213,6 +213,8 @@ public:
     return_place (ExprStmtBuilder (ctx).build (expr), expr.get_locus ());
   }
 
+  void visit (HIR::InlineAsm &expr) override {}
+
 protected: // Illegal at this position.
   void visit (HIR::StructExprFieldIdentifier &field) override
   {
index d16d6ed454c0162387ea757a6050298109ac815e..2e810bf136fb76b086be68c25a2ede066894c6c0 100644 (file)
@@ -283,6 +283,12 @@ PrivacyReporter::visit (HIR::TypePathSegmentFunction &)
   // FIXME: Do we need to do anything for this?
 }
 
+void
+PrivacyReporter::visit (HIR::InlineAsm &)
+{
+  return;
+}
+
 void
 PrivacyReporter::visit (HIR::TypePath &path)
 {
index 6f2937ce14b15b00f0b689bc1c848ef6259fead9..c4f94ab3ed70ce0f750b11dcfd14036032e19b71 100644 (file)
@@ -126,6 +126,7 @@ types
   virtual void visit (HIR::MatchExpr &expr);
   virtual void visit (HIR::AwaitExpr &expr);
   virtual void visit (HIR::AsyncBlockExpr &expr);
+  virtual void visit (HIR::InlineAsm &expr);
 
   virtual void visit (HIR::EnumItemTuple &);
   virtual void visit (HIR::EnumItemStruct &);
index 5d2cdd1814ad4eba7aae048298c858ae3258834a..7b2e32ec259d0896ce8d3a675e1b0cb5b48b47db 100644 (file)
@@ -4162,6 +4162,16 @@ public:
       options (std::move (options))
 
   {}
+
+  // This function checks if the assembly macro is "simple" or not, according to
+  // the tree defition (tree.h) of the
+  bool is_simple ()
+  {
+    return operands.size () == 0 && clobber_abi.size () == 0
+          && options.size () == 0;
+  }
+
+  bool is_inline_asm () { return !is_global_asm; }
 };
 } // namespace HIR
 } // namespace Rust
index 72609f4c850669b4d0f3a51ae8c5e175a8e48e57..e69e951d656d382339084cf3536f6883cc7dc572 100644 (file)
@@ -450,6 +450,7 @@ public:
   virtual void visit (IfExprConseqElse &expr) = 0;
   virtual void visit (IfLetExpr &expr) = 0;
   virtual void visit (IfLetExprConseqElse &expr) = 0;
+  virtual void visit (InlineAsm &expr) = 0;
   virtual void visit (MatchExpr &expr) = 0;
   virtual void visit (AwaitExpr &expr) = 0;
   virtual void visit (AsyncBlockExpr &expr) = 0;
index 38734d58948bc0a7364d14c0492f3cdea4b1bd8a..6635f13ea040cc4fa9157f3145b54ed44d7e3c82 100644 (file)
@@ -775,6 +775,12 @@ TypeCheckExpr::visit (HIR::RangeToExpr &expr)
   infered = SubstMapperInternal::Resolve (adt, subst);
 }
 
+void
+TypeCheckExpr::visit (HIR::InlineAsm &expr)
+{
+  return;
+}
+
 void
 TypeCheckExpr::visit (HIR::RangeFullExpr &expr)
 {
index 45fc330c0893da7eb6569f707d17c553ddd0200b..7192cf4dbda1ad681c759f3c4d033be12a32f324 100644 (file)
@@ -71,6 +71,7 @@ public:
   void visit (HIR::RangeFromToInclExpr &expr) override;
   void visit (HIR::WhileLoopExpr &expr) override;
   void visit (HIR::ClosureExpr &expr) override;
+  void visit (HIR::InlineAsm &expr) override;
 
   // TODO
   void visit (HIR::ErrorPropagationExpr &) override {}