summaryrefslogtreecommitdiffstats
path: root/src/compiler/glsl/ir.h
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2016-07-07 13:57:11 -0700
committerIan Romanick <ian.d.romanick@intel.com>2016-10-04 16:53:32 -0700
commitc42fe30c8650a5bd19b22289f33a7ed35e427057 (patch)
tree841a7c201c877c23eded9c2b40962caef5c466b9 /src/compiler/glsl/ir.h
parentbb290b5679745e3b7f84dd14174aae6688ab4cac (diff)
downloadexternal_mesa3d-c42fe30c8650a5bd19b22289f33a7ed35e427057.zip
external_mesa3d-c42fe30c8650a5bd19b22289f33a7ed35e427057.tar.gz
external_mesa3d-c42fe30c8650a5bd19b22289f33a7ed35e427057.tar.bz2
glsl: Kill __intrinsic_atomic_sub
Just generate an __intrinsic_atomic_add with a negated parameter. Some background on the non-obvious reasons for the the big change to builtin_builder::call()... this is cribbed from some discussion with Ilia on mesa-dev. Why change builtin_builder::call() to allow taking dereferences and create them here rather than just feeding in the ir_variables directly? The problem is the neg_data ir_variable node would have to be in two lists at the same time: the instruction stream and parameters. The ir_variable node is automatically added to the instruction stream by the call to make_temp. Restructuring the code so that the ir_variables could be in parameters then move them to the instruction stream would have been pretty terrible. ir_call in the instruction stream has an exec_list that contains ir_dereference_variable nodes. The builtin_builder::call method previously took an exec_list of ir_variables and created a list of ir_dereference_variable. All of the original users of that method wanted to make a function call using exactly the set of parameters passed to the built-in function (i.e., call __intrinsic_atomic_add using the parameters to atomicAdd). For these users, the list of ir_variables already existed: the list of parameters in the built-in function signature. This new caller doesn't do that. It wants to call a function with a parameter from the function and a value calculated in the function. So, I changed builtin_builder::call to take a list that could either be a list of ir_variable or a list of ir_dereference_variable. In the former case it behaves just as it previously did. In the latter case, it uses (and removes from the input list) the ir_dereference_variable nodes instead of creating new ones. text data bss dec hex filename 6036395 283160 28608 6348163 60dd83 lib64/i965_dri.so before 6036923 283160 28608 6348691 60df93 lib64/i965_dri.so after Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Acked-by: Ilia Mirkin <imirkin@alum.mit.edu>
Diffstat (limited to 'src/compiler/glsl/ir.h')
-rw-r--r--src/compiler/glsl/ir.h1
1 files changed, 0 insertions, 1 deletions
diff --git a/src/compiler/glsl/ir.h b/src/compiler/glsl/ir.h
index 388b1be..83b810b 100644
--- a/src/compiler/glsl/ir.h
+++ b/src/compiler/glsl/ir.h
@@ -1045,7 +1045,6 @@ enum ir_intrinsic_id {
ir_intrinsic_atomic_counter_increment,
ir_intrinsic_atomic_counter_predecrement,
ir_intrinsic_atomic_counter_add,
- ir_intrinsic_atomic_counter_sub,
ir_intrinsic_atomic_counter_and,
ir_intrinsic_atomic_counter_or,
ir_intrinsic_atomic_counter_xor,