[Mesa-dev] [PATCH 1/2] intel/compiler: Add a placement version of emit to the builders
Neil Roberts
bpeeluk at yahoo.co.uk
Fri Sep 22 15:09:39 UTC 2017
Adds “emit_emplace” to emit an instruction that is constructed inplace
with the parameters given. This will be used instead of the pattern of
doing emit(instruction(…)) because that ends up calling emit(const
instruction&) which implies doing a copy.
The “emplace” terminology comes from std::vector::emplace_back which
does a very similar thing.
---
Sorry if this email ends up getting sent twice. It didn’t seem to work
the first time.
src/intel/compiler/brw_fs_builder.h | 14 ++++++++++++++
src/intel/compiler/brw_vec4_builder.h | 14 ++++++++++++++
2 files changed, 28 insertions(+)
diff --git a/src/intel/compiler/brw_fs_builder.h b/src/intel/compiler/brw_fs_builder.h
index 87394bc..90d8285 100644
--- a/src/intel/compiler/brw_fs_builder.h
+++ b/src/intel/compiler/brw_fs_builder.h
@@ -25,6 +25,7 @@
#ifndef BRW_FS_BUILDER_H
#define BRW_FS_BUILDER_H
+#include <utility>
#include "brw_ir_fs.h"
#include "brw_shader.h"
@@ -256,6 +257,19 @@ namespace brw {
}
/**
+ * Insert an instruction by constructing it directly inplace. This uses
+ * perfect forwarding magic from C++11 to forward the arguments to the
+ * constructor.
+ */
+ template<typename... Args>
+ instruction *
+ emit_emplace(Args&&... args) const
+ {
+ return emit(new(shader->mem_ctx)
+ instruction(std::forward<Args>(args)...));
+ }
+
+ /**
* Create and insert a nullary control instruction into the program.
*/
instruction *
diff --git a/src/intel/compiler/brw_vec4_builder.h b/src/intel/compiler/brw_vec4_builder.h
index 4c3efe8..413b27c 100644
--- a/src/intel/compiler/brw_vec4_builder.h
+++ b/src/intel/compiler/brw_vec4_builder.h
@@ -25,6 +25,7 @@
#ifndef BRW_VEC4_BUILDER_H
#define BRW_VEC4_BUILDER_H
+#include <utility>
#include "brw_ir_vec4.h"
#include "brw_ir_allocator.h"
@@ -221,6 +222,19 @@ namespace brw {
}
/**
+ * Insert an instruction by constructing it directly inplace. This uses
+ * perfect forwarding magic from C++11 to forward the arguments to the
+ * constructor.
+ */
+ template<typename... Args>
+ instruction *
+ emit_emplace(Args&&... args) const
+ {
+ return emit(new(shader->mem_ctx)
+ instruction(std::forward<Args>(args)...));
+ }
+
+ /**
* Create and insert a nullary control instruction into the program.
*/
instruction *
--
2.9.5
.
More information about the mesa-dev
mailing list