[PATCH 5/5] d3dcompiler: Introduce a new_binary_expr() helper.

Zebediah Figura zfigura at codeweavers.com
Mon Aug 12 10:27:31 CDT 2019


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 dlls/d3dcompiler_43/d3dcompiler_private.h |  29 +---
 dlls/d3dcompiler_43/hlsl.y                |  22 ++--
 dlls/d3dcompiler_43/utils.c               | 153 +---------------------
 3 files changed, 21 insertions(+), 183 deletions(-)

diff --git a/dlls/d3dcompiler_43/d3dcompiler_private.h b/dlls/d3dcompiler_43/d3dcompiler_private.h
index 7439e4aeebc..0506b16b3a2 100644
--- a/dlls/d3dcompiler_43/d3dcompiler_private.h
+++ b/dlls/d3dcompiler_43/d3dcompiler_private.h
@@ -1142,28 +1142,6 @@ struct hlsl_ir_expr *new_expr(enum hlsl_ir_expr_op op, struct hlsl_ir_node **ope
         struct source_location *loc) DECLSPEC_HIDDEN;
 struct hlsl_ir_expr *new_cast(struct hlsl_ir_node *node, struct hlsl_type *type,
 	struct source_location *loc) DECLSPEC_HIDDEN;
-struct hlsl_ir_expr *hlsl_mul(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc) DECLSPEC_HIDDEN;
-struct hlsl_ir_expr *hlsl_div(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc) DECLSPEC_HIDDEN;
-struct hlsl_ir_expr *hlsl_mod(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc) DECLSPEC_HIDDEN;
-struct hlsl_ir_expr *hlsl_add(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc) DECLSPEC_HIDDEN;
-struct hlsl_ir_expr *hlsl_sub(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc) DECLSPEC_HIDDEN;
-struct hlsl_ir_expr *hlsl_lt(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc) DECLSPEC_HIDDEN;
-struct hlsl_ir_expr *hlsl_gt(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc) DECLSPEC_HIDDEN;
-struct hlsl_ir_expr *hlsl_le(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc) DECLSPEC_HIDDEN;
-struct hlsl_ir_expr *hlsl_ge(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc) DECLSPEC_HIDDEN;
-struct hlsl_ir_expr *hlsl_eq(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc) DECLSPEC_HIDDEN;
-struct hlsl_ir_expr *hlsl_ne(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc) DECLSPEC_HIDDEN;
 struct hlsl_ir_deref *new_var_deref(struct hlsl_ir_var *var) DECLSPEC_HIDDEN;
 struct hlsl_ir_deref *new_record_deref(struct hlsl_ir_node *record, struct hlsl_struct_field *field) DECLSPEC_HIDDEN;
 struct hlsl_ir_node *make_assignment(struct hlsl_ir_node *left, enum parse_assign_op assign_op,
@@ -1193,6 +1171,13 @@ static inline struct hlsl_ir_node *new_unary_expr(enum hlsl_ir_expr_op op,
     return &new_expr(op, operands, &loc)->node;
 }
 
+static inline struct hlsl_ir_node *new_binary_expr(enum hlsl_ir_expr_op op,
+        struct hlsl_ir_node *op1, struct hlsl_ir_node *op2, struct source_location loc)
+{
+    struct hlsl_ir_node *operands[3] = {op1, op2};
+    return &new_expr(op, operands, &loc)->node;
+}
+
 #define MAKE_TAG(ch0, ch1, ch2, ch3) \
     ((DWORD)(ch0) | ((DWORD)(ch1) << 8) | \
     ((DWORD)(ch2) << 16) | ((DWORD)(ch3) << 24 ))
diff --git a/dlls/d3dcompiler_43/hlsl.y b/dlls/d3dcompiler_43/hlsl.y
index 5e74ec6d267..5585b899463 100644
--- a/dlls/d3dcompiler_43/hlsl.y
+++ b/dlls/d3dcompiler_43/hlsl.y
@@ -2214,21 +2214,21 @@ mul_expr:                 unary_expr
                                 struct source_location loc;
 
                                 set_location(&loc, &@2);
-                                $$ = &hlsl_mul($1, $3, &loc)->node;
+                                $$ = new_binary_expr(HLSL_IR_BINOP_MUL, $1, $3, loc);
                             }
                         | mul_expr '/' unary_expr
                             {
                                 struct source_location loc;
 
                                 set_location(&loc, &@2);
-                                $$ = &hlsl_div($1, $3, &loc)->node;
+                                $$ = new_binary_expr(HLSL_IR_BINOP_DIV, $1, $3, loc);
                             }
                         | mul_expr '%' unary_expr
                             {
                                 struct source_location loc;
 
                                 set_location(&loc, &@2);
-                                $$ = &hlsl_mod($1, $3, &loc)->node;
+                                $$ = new_binary_expr(HLSL_IR_BINOP_MOD, $1, $3, loc);
                             }
 
 add_expr:                 mul_expr
@@ -2240,14 +2240,14 @@ add_expr:                 mul_expr
                                 struct source_location loc;
 
                                 set_location(&loc, &@2);
-                                $$ = &hlsl_add($1, $3, &loc)->node;
+                                $$ = new_binary_expr(HLSL_IR_BINOP_ADD, $1, $3, loc);
                             }
                         | add_expr '-' mul_expr
                             {
                                 struct source_location loc;
 
                                 set_location(&loc, &@2);
-                                $$ = &hlsl_sub($1, $3, &loc)->node;
+                                $$ = new_binary_expr(HLSL_IR_BINOP_SUB, $1, $3, loc);
                             }
 
 shift_expr:               add_expr
@@ -2272,28 +2272,28 @@ relational_expr:          shift_expr
                                 struct source_location loc;
 
                                 set_location(&loc, &@2);
-                                $$ = &hlsl_lt($1, $3, &loc)->node;
+                                $$ = new_binary_expr(HLSL_IR_BINOP_LESS, $1, $3, loc);
                             }
                         | relational_expr '>' shift_expr
                             {
                                 struct source_location loc;
 
                                 set_location(&loc, &@2);
-                                $$ = &hlsl_gt($1, $3, &loc)->node;
+                                $$ = new_binary_expr(HLSL_IR_BINOP_GREATER, $1, $3, loc);
                             }
                         | relational_expr OP_LE shift_expr
                             {
                                 struct source_location loc;
 
                                 set_location(&loc, &@2);
-                                $$ = &hlsl_le($1, $3, &loc)->node;
+                                $$ = new_binary_expr(HLSL_IR_BINOP_LEQUAL, $1, $3, loc);
                             }
                         | relational_expr OP_GE shift_expr
                             {
                                 struct source_location loc;
 
                                 set_location(&loc, &@2);
-                                $$ = &hlsl_ge($1, $3, &loc)->node;
+                                $$ = new_binary_expr(HLSL_IR_BINOP_GEQUAL, $1, $3, loc);
                             }
 
 equality_expr:            relational_expr
@@ -2305,14 +2305,14 @@ equality_expr:            relational_expr
                                 struct source_location loc;
 
                                 set_location(&loc, &@2);
-                                $$ = &hlsl_eq($1, $3, &loc)->node;
+                                $$ = new_binary_expr(HLSL_IR_BINOP_EQUAL, $1, $3, loc);
                             }
                         | equality_expr OP_NE relational_expr
                             {
                                 struct source_location loc;
 
                                 set_location(&loc, &@2);
-                                $$ = &hlsl_ne($1, $3, &loc)->node;
+                                $$ = new_binary_expr(HLSL_IR_BINOP_NEQUAL, $1, $3, loc);
                             }
 
 bitand_expr:              equality_expr
diff --git a/dlls/d3dcompiler_43/utils.c b/dlls/d3dcompiler_43/utils.c
index 51042984906..d2275da97a6 100644
--- a/dlls/d3dcompiler_43/utils.c
+++ b/dlls/d3dcompiler_43/utils.c
@@ -1351,149 +1351,6 @@ struct hlsl_ir_expr *new_cast(struct hlsl_ir_node *node, struct hlsl_type *type,
     return expr_from_node(cast);
 }
 
-struct hlsl_ir_expr *hlsl_mul(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc)
-{
-    struct hlsl_ir_expr *expr;
-    struct hlsl_ir_node *ops[3];
-
-    ops[0] = op1;
-    ops[1] = op2;
-    ops[2] = NULL;
-    expr = new_expr(HLSL_IR_BINOP_MUL, ops, loc);
-    return expr;
-}
-
-struct hlsl_ir_expr *hlsl_div(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc)
-{
-    struct hlsl_ir_expr *expr;
-    struct hlsl_ir_node *ops[3];
-
-    ops[0] = op1;
-    ops[1] = op2;
-    ops[2] = NULL;
-    expr = new_expr(HLSL_IR_BINOP_DIV, ops, loc);
-    return expr;
-}
-
-struct hlsl_ir_expr *hlsl_mod(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc)
-{
-    struct hlsl_ir_expr *expr;
-    struct hlsl_ir_node *ops[3];
-
-    ops[0] = op1;
-    ops[1] = op2;
-    ops[2] = NULL;
-    expr = new_expr(HLSL_IR_BINOP_MOD, ops, loc);
-    return expr;
-}
-
-struct hlsl_ir_expr *hlsl_add(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc)
-{
-    struct hlsl_ir_expr *expr;
-    struct hlsl_ir_node *ops[3];
-
-    ops[0] = op1;
-    ops[1] = op2;
-    ops[2] = NULL;
-    expr = new_expr(HLSL_IR_BINOP_ADD, ops, loc);
-    return expr;
-}
-
-struct hlsl_ir_expr *hlsl_sub(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc)
-{
-    struct hlsl_ir_expr *expr;
-    struct hlsl_ir_node *ops[3];
-
-    ops[0] = op1;
-    ops[1] = op2;
-    ops[2] = NULL;
-    expr = new_expr(HLSL_IR_BINOP_SUB, ops, loc);
-    return expr;
-}
-
-struct hlsl_ir_expr *hlsl_lt(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc)
-{
-    struct hlsl_ir_expr *expr;
-    struct hlsl_ir_node *ops[3];
-
-    ops[0] = op1;
-    ops[1] = op2;
-    ops[2] = NULL;
-    expr = new_expr(HLSL_IR_BINOP_LESS, ops, loc);
-    return expr;
-}
-
-struct hlsl_ir_expr *hlsl_gt(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc)
-{
-    struct hlsl_ir_expr *expr;
-    struct hlsl_ir_node *ops[3];
-
-    ops[0] = op1;
-    ops[1] = op2;
-    ops[2] = NULL;
-    expr = new_expr(HLSL_IR_BINOP_GREATER, ops, loc);
-    return expr;
-}
-
-struct hlsl_ir_expr *hlsl_le(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc)
-{
-    struct hlsl_ir_expr *expr;
-    struct hlsl_ir_node *ops[3];
-
-    ops[0] = op1;
-    ops[1] = op2;
-    ops[2] = NULL;
-    expr = new_expr(HLSL_IR_BINOP_LEQUAL, ops, loc);
-    return expr;
-}
-
-struct hlsl_ir_expr *hlsl_ge(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc)
-{
-    struct hlsl_ir_expr *expr;
-    struct hlsl_ir_node *ops[3];
-
-    ops[0] = op1;
-    ops[1] = op2;
-    ops[2] = NULL;
-    expr = new_expr(HLSL_IR_BINOP_GEQUAL, ops, loc);
-    return expr;
-}
-
-struct hlsl_ir_expr *hlsl_eq(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc)
-{
-    struct hlsl_ir_expr *expr;
-    struct hlsl_ir_node *ops[3];
-
-    ops[0] = op1;
-    ops[1] = op2;
-    ops[2] = NULL;
-    expr = new_expr(HLSL_IR_BINOP_EQUAL, ops, loc);
-    return expr;
-}
-
-struct hlsl_ir_expr *hlsl_ne(struct hlsl_ir_node *op1, struct hlsl_ir_node *op2,
-        struct source_location *loc)
-{
-    struct hlsl_ir_expr *expr;
-    struct hlsl_ir_node *ops[3];
-
-    ops[0] = op1;
-    ops[1] = op2;
-    ops[2] = NULL;
-    expr = new_expr(HLSL_IR_BINOP_NEQUAL, ops, loc);
-    return expr;
-}
-
 struct hlsl_ir_deref *new_var_deref(struct hlsl_ir_var *var)
 {
     struct hlsl_ir_deref *deref = d3dcompiler_alloc(sizeof(*deref));
@@ -1553,7 +1410,6 @@ static enum hlsl_ir_expr_op op_from_assignment(enum parse_assign_op op)
 struct hlsl_ir_node *make_assignment(struct hlsl_ir_node *left, enum parse_assign_op assign_op,
         DWORD writemask, struct hlsl_ir_node *right)
 {
-    struct hlsl_ir_expr *expr;
     struct hlsl_ir_assignment *assign = d3dcompiler_alloc(sizeof(*assign));
     struct hlsl_type *type;
     struct hlsl_ir_node *lhs, *rhs;
@@ -1643,8 +1499,8 @@ struct hlsl_ir_node *make_assignment(struct hlsl_ir_node *left, enum parse_assig
     assign->lhs = lhs;
     if (assign_op != ASSIGN_OP_ASSIGN)
     {
-        struct hlsl_ir_node *operands[3];
         enum hlsl_ir_expr_op op = op_from_assignment(assign_op);
+        struct hlsl_ir_node *expr;
 
         if (lhs->type != HLSL_IR_DEREF || deref_from_node(lhs)->type != HLSL_IR_DEREF_VAR)
         {
@@ -1657,11 +1513,8 @@ struct hlsl_ir_node *make_assignment(struct hlsl_ir_node *left, enum parse_assig
 
             TRACE("Adding an expression for the compound assignment.\n");
             new_deref = new_var_deref(lhs_deref->v.var);
-            operands[0] = &new_deref->node;
-            operands[1] = rhs;
-            operands[2] = NULL;
-            expr = new_expr(op, operands, &left->loc);
-            assign->rhs = &expr->node;
+            expr = new_binary_expr(op, &new_deref->node, rhs, left->loc);
+            assign->rhs = expr;
         }
     }
     else
-- 
2.20.1




More information about the wine-devel mailing list