llvm/llvm-project

[X86] Add support for X86ISD float2int constant folding

Open

#37.146 geöffnet am 14. Juni 2018

Auf GitHub ansehen
 (7 Kommentare) (0 Reaktionen) (1 zugewiesene Person)C++ (10.782 Forks)batch import
backend:X86bugzillagood first issue

Repository-Metriken

Stars
 (26.378 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 1T 2h) (1.000 gemergte PRs in 30 T)

Beschreibung

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