Recognize branchless conditional negate and absolute value idioms.
Compiler can now optimize branchless conditional negate and absolute value patterns into single instructions.
The match.pd pattern matching system has been enhanced to recognize and optimize specific arithmetic idioms. It can now identify branchless conditional negate patterns (e.g., (x ^ -cmp) + cmp when cmp is 0 or 1) and fold them into a single conditional negate instruction. Additionally, it recognizes sign-test based absolute value expressions, exposing them as ABS_EXPR for further optimization.
In Details
The match.pd file, responsible for pattern matching in GCC's tree optimization passes, has been updated to recognize two new idioms. First, it now identifies branchless conditional negate patterns like (x ^ -cmp) + cmp when cmp is known to be 0 or 1, folding them into a conditional negate. Second, it recognizes sign-test based absolute value expressions (e.g., x < 0 equivalent) and exposes them as ABS_EXPR. These new patterns allow for more efficient code generation by leveraging specific instruction sequences.
- match.pd
- A file within GCC that defines patterns used by the tree optimizer to recognize and transform specific code constructs into more efficient forms. It uses a pattern-matching language.
- branchless
- Code that achieves a conditional outcome without using explicit conditional branching instructions (like if/else or ternary operators that compile to jumps). This can sometimes improve performance by avoiding pipeline stalls.
- idiom
- A common or characteristic expression, structure, or pattern of code that conveys a specific meaning or performs a particular task, often recognized for its efficiency or clarity.
- ABS_EXPR
- An internal GCC representation (tree node) for an absolute value expression, allowing the compiler to optimize it.