llvm/llvm-project

[X86] Add support for X86ISD float2int constant folding

Open

#37.146 aberto em 14 de jun. de 2018

Ver no GitHub
 (7 comments) (0 reactions) (1 assignee)C++ (10.782 forks)batch import
backend:X86bugzillagood first issue

Métricas do repositório

Stars
 (26.378 stars)
Métricas de merge de PR
 (Mesclagem média 1d 2h) (1.000 fundiu PRs em 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.

Guia do colaborador