llvm/llvm-project

[X86] Add support for X86ISD float2int constant folding

Open

#37,146 opened on 2018年6月14日

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
 (平均マージ 1d 2h) (30d で 1,000 merged PRs)

説明

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.

コントリビューターガイド