llvm/llvm-project

[X86] Add support for X86ISD float2int constant folding

Open

#37,146 opened on Jun 14, 2018

View on GitHub
 (7 comments) (0 reactions) (1 assignee)C++ (10,782 forks)batch import
backend:X86bugzillagood first issue

Repository metrics

Stars
 (26,378 stars)
PR merge metrics
 (Avg merge 1d 2h) (1,000 merged PRs in 30d)

Description

Bugzilla Link 37798
Version trunk
OS Windows NT
Depends On llvm/llvm-project#37099
CC @adibiagio,@topperc,@filcab,@gregbedwell,@LebedevRI,@rotateright

Extended Description

Split off from [Bug #​37751].

Now that we've standardised to using X86ISD opcodes for float2int conversions:

  // Vector float/double to signed/unsigned integer.
  CVTP2SI, CVTP2UI, CVTP2SI_RND, CVTP2UI_RND,
  // Scalar float/double to signed/unsigned integer.
  CVTS2SI_RND, CVTS2UI_RND,

  // Vector float/double to signed/unsigned integer with truncation.
  CVTTP2SI, CVTTP2UI, CVTTP2SI_RND, CVTTP2UI_RND,
  // Scalar float/double to signed/unsigned integer with truncation.
  CVTTS2SI_RND, CVTTS2UI_RND,

We should investigate adding safe constant folding support to these. We could at least support exact conversions (these should be rounding mode independent for non-truncation instructions?).

For truncation instructions we can probably accept inexact conversions as well, as long as no underflow/overflow occurs - this would need to be tested to confirm.

Contributor guide