summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2019-03-01 17:39:54 -0600
committerJason Ekstrand <[email protected]>2019-03-06 17:24:57 +0000
commitebb3695376499c276d4e1508836ce6b38faf1390 (patch)
tree0c2a2f25e3a022f02b53afdd297c35cdbe5dd663
parentca2b5e9069177ea603efbe250e675dc7d194ef90 (diff)
nir: Expose double and int64 op_to_options_mask helpers
We already have one internally for int64 but we don't have a similar one for doubles so we'll have to make one. Reviewed-by: Matt Turner <[email protected]> Reviewed-by: Jordan Justen <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/compiler/nir/nir.h2
-rw-r--r--src/compiler/nir/nir_lower_double_ops.c66
-rw-r--r--src/compiler/nir/nir_lower_int64.c6
3 files changed, 23 insertions, 51 deletions
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index 0d5b70b1c34..3e1714ec5d2 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -3271,8 +3271,10 @@ bool nir_lower_bit_size(nir_shader *shader,
nir_lower_bit_size_callback callback,
void *callback_data);
+nir_lower_int64_options nir_lower_int64_op_to_options_mask(nir_op opcode);
bool nir_lower_int64(nir_shader *shader, nir_lower_int64_options options);
+nir_lower_doubles_options nir_lower_doubles_op_to_options_mask(nir_op opcode);
bool nir_lower_doubles(nir_shader *shader, nir_lower_doubles_options options);
bool nir_lower_pack(nir_shader *shader);
diff --git a/src/compiler/nir/nir_lower_double_ops.c b/src/compiler/nir/nir_lower_double_ops.c
index 054fce9c168..69f4b3a78db 100644
--- a/src/compiler/nir/nir_lower_double_ops.c
+++ b/src/compiler/nir/nir_lower_double_ops.c
@@ -589,6 +589,23 @@ lower_doubles_instr_to_soft(nir_builder *b, nir_alu_instr *instr,
return true;
}
+nir_lower_doubles_options
+nir_lower_doubles_op_to_options_mask(nir_op opcode)
+{
+ switch (opcode) {
+ case nir_op_frcp: return nir_lower_drcp;
+ case nir_op_fsqrt: return nir_lower_dsqrt;
+ case nir_op_frsq: return nir_lower_drsq;
+ case nir_op_ftrunc: return nir_lower_dtrunc;
+ case nir_op_ffloor: return nir_lower_dfloor;
+ case nir_op_fceil: return nir_lower_dceil;
+ case nir_op_ffract: return nir_lower_dfract;
+ case nir_op_fround_even: return nir_lower_dround_even;
+ case nir_op_fmod: return nir_lower_dmod;
+ default: return 0;
+ }
+}
+
static bool
lower_doubles_instr(nir_builder *b, nir_alu_instr *instr,
nir_lower_doubles_options options)
@@ -607,55 +624,8 @@ lower_doubles_instr(nir_builder *b, nir_alu_instr *instr,
if (lower_doubles_instr_to_soft(b, instr, options))
return true;
- switch (instr->op) {
- case nir_op_frcp:
- if (!(options & nir_lower_drcp))
- return false;
- break;
-
- case nir_op_fsqrt:
- if (!(options & nir_lower_dsqrt))
- return false;
- break;
-
- case nir_op_frsq:
- if (!(options & nir_lower_drsq))
- return false;
- break;
-
- case nir_op_ftrunc:
- if (!(options & nir_lower_dtrunc))
- return false;
- break;
-
- case nir_op_ffloor:
- if (!(options & nir_lower_dfloor))
- return false;
- break;
-
- case nir_op_fceil:
- if (!(options & nir_lower_dceil))
- return false;
- break;
-
- case nir_op_ffract:
- if (!(options & nir_lower_dfract))
- return false;
- break;
-
- case nir_op_fround_even:
- if (!(options & nir_lower_dround_even))
- return false;
- break;
-
- case nir_op_fmod:
- if (!(options & nir_lower_dmod))
- return false;
- break;
-
- default:
+ if (!(options & nir_lower_doubles_op_to_options_mask(instr->op)))
return false;
- }
b->cursor = nir_before_instr(&instr->instr);
diff --git a/src/compiler/nir/nir_lower_int64.c b/src/compiler/nir/nir_lower_int64.c
index 6aae1816bd2..e7d361da6da 100644
--- a/src/compiler/nir/nir_lower_int64.c
+++ b/src/compiler/nir/nir_lower_int64.c
@@ -630,8 +630,8 @@ lower_irem64(nir_builder *b, nir_ssa_def *n, nir_ssa_def *d)
return nir_bcsel(b, n_is_neg, nir_ineg(b, r), r);
}
-static nir_lower_int64_options
-opcode_to_options_mask(nir_op opcode)
+nir_lower_int64_options
+nir_lower_int64_op_to_options_mask(nir_op opcode)
{
switch (opcode) {
case nir_op_imul:
@@ -834,7 +834,7 @@ lower_int64_impl(nir_function_impl *impl, nir_lower_int64_options options)
break;
}
- if (!(options & opcode_to_options_mask(alu->op)))
+ if (!(options & nir_lower_int64_op_to_options_mask(alu->op)))
continue;
b.cursor = nir_before_instr(instr);