mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-04-07 18:01:30 +00:00
[qfcc] Clean up a pile of redundant code
The code was made redundant by distribute_product doing the right thing for products that can go to 0.
This commit is contained in:
parent
26dec9ee21
commit
f5ba761c75
1 changed files with 1 additions and 96 deletions
|
@ -494,6 +494,7 @@ sum_expr_low (type_t *type, int op, const expr_t *a, const expr_t *b)
|
|||
}
|
||||
|
||||
auto sum = typed_binary_expr (type, op, a, b);
|
||||
sum = fold_constants (sum);
|
||||
sum = edag_add_expr (sum);
|
||||
return sum;
|
||||
}
|
||||
|
@ -756,48 +757,11 @@ scale_expr (type_t *type, const expr_t *a, const expr_t *b)
|
|||
if (!scale) {
|
||||
return 0;
|
||||
}
|
||||
scale = fold_constants (scale);
|
||||
scale = edag_add_expr (scale);
|
||||
scale = cast_expr (type, scale);
|
||||
scale = edag_add_expr (scale);
|
||||
return scale;
|
||||
}
|
||||
|
||||
static const expr_t *
|
||||
check_dot (const expr_t *a, const expr_t *b, int b_count)
|
||||
{
|
||||
const expr_t *b_adds[b_count + 1] = {};
|
||||
const expr_t *b_subs[b_count + 1] = {};
|
||||
|
||||
a = traverse_scale (a);
|
||||
|
||||
distribute_terms (b, b_adds, b_subs);
|
||||
const expr_t **s, **d;
|
||||
for (s = b_adds, d = s; *s; s++) {
|
||||
auto c = traverse_scale (*s);
|
||||
if (is_cross (c)) {
|
||||
if (a == traverse_scale (c->expr.e1)
|
||||
|| a == traverse_scale (c->expr.e2)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
*d++ = *s;
|
||||
}
|
||||
*d = 0;
|
||||
for (s = b_subs, d = s; *s; s++) {
|
||||
auto c = traverse_scale (*s);
|
||||
if (is_cross (c)) {
|
||||
if (a == traverse_scale (c->expr.e1)
|
||||
|| a == traverse_scale (c->expr.e2)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
*d++ = *s;
|
||||
}
|
||||
*d = 0;
|
||||
return collect_terms (get_type (b), b_adds, b_subs);
|
||||
}
|
||||
|
||||
static bool __attribute__((pure))
|
||||
reject_dot (const expr_t *a, const expr_t *b)
|
||||
{
|
||||
|
@ -826,18 +790,6 @@ dot_expr (type_t *type, const expr_t *a, const expr_t *b)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int a_terms = count_terms (a);
|
||||
int b_terms = count_terms (b);
|
||||
|
||||
if (a_terms && !b_terms) {
|
||||
a = check_dot (b, a, a_terms);
|
||||
} else if (!a_terms && b_terms) {
|
||||
b = check_dot (a, b, b_terms);
|
||||
}
|
||||
if (!a || !b) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const expr_t *prod = 0;
|
||||
if (is_scale (a)) {
|
||||
prod = a->expr.e2;
|
||||
|
@ -853,38 +805,12 @@ dot_expr (type_t *type, const expr_t *a, const expr_t *b)
|
|||
if (!dot) {
|
||||
return 0;
|
||||
}
|
||||
dot = edag_add_expr (dot);
|
||||
if (prod) {
|
||||
dot = scale_expr (type, dot, prod);
|
||||
}
|
||||
return dot;
|
||||
}
|
||||
|
||||
static const expr_t *
|
||||
check_cross (const expr_t *a, const expr_t *b, int b_count)
|
||||
{
|
||||
const expr_t *b_adds[b_count + 1] = {};
|
||||
const expr_t *b_subs[b_count + 1] = {};
|
||||
|
||||
a = traverse_scale (a);
|
||||
|
||||
distribute_terms (b, b_adds, b_subs);
|
||||
const expr_t **s, **d;
|
||||
for (s = b_adds, d = s; *s; s++) {
|
||||
if (a != traverse_scale (*s)) {
|
||||
*d++ = *s;
|
||||
}
|
||||
}
|
||||
*d = 0;
|
||||
for (s = b_subs, d = s; *s; s++) {
|
||||
if (a != traverse_scale (*s)) {
|
||||
*d++ = *s;
|
||||
}
|
||||
}
|
||||
*d = 0;
|
||||
return collect_terms (get_type (b), b_adds, b_subs);
|
||||
}
|
||||
|
||||
static bool __attribute__((pure))
|
||||
reject_cross (const expr_t *a, const expr_t *b)
|
||||
{
|
||||
|
@ -899,24 +825,7 @@ cross_expr (type_t *type, const expr_t *a, const expr_t *b)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (traverse_scale (a) == traverse_scale (b)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int a_terms = count_terms (a);
|
||||
int b_terms = count_terms (b);
|
||||
|
||||
if (a_terms && !b_terms) {
|
||||
a = check_cross (b, a, a_terms);
|
||||
} else if (!a_terms && b_terms) {
|
||||
b = check_cross (a, b, b_terms);
|
||||
}
|
||||
|
||||
auto cross = distribute_product (type, CROSS, a, b, reject_cross);
|
||||
if (!cross) {
|
||||
return 0;
|
||||
}
|
||||
cross = edag_add_expr (cross);
|
||||
return cross;
|
||||
}
|
||||
|
||||
|
@ -934,10 +843,6 @@ wedge_expr (type_t *type, const expr_t *a, const expr_t *b)
|
|||
return 0;
|
||||
}
|
||||
auto wedge = distribute_product (type, WEDGE, a, b, reject_wedge);
|
||||
if (!wedge) {
|
||||
return 0;
|
||||
}
|
||||
wedge = edag_add_expr (wedge);
|
||||
return wedge;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue