Skip to content
Snippets Groups Projects
Commit 3142265d authored by Philipp Tomsich's avatar Philipp Tomsich
Browse files

RISC-V: No extensions for SImode min/max against safe constant

Optimize the common case of a SImode min/max against a constant
that is safe both for sign- and zero-extension.
E.g., consider the case
  int f(unsigned int* a)
  {
    const int C = 1000;
    return *a * 3 > C ? C : *a * 3;
  }
where the constant C will yield the same result in DImode whether
sign- or zero-extended.

This should eventually go away once the lowering to RTL smartens up
and considers the precision/signedness and the value-ranges of the
operands to MIN_EXPR and MAX_EXPR.

gcc/ChangeLog:

	* config/riscv/bitmanip.md (*minmax): Additional pattern for
	  min/max against constants that are extension-invariant.
	* config/riscv/iterators.md (minmax_optab): Add an iterator
	  that has only min and max rtl.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/zbb-min-max-02.c: New test.
parent 60d2bcc5
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment