[X86][FastIsel] Fix assertion failure when selecting int-to-double conversion (PR23273).
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Mon, 20 Apr 2015 11:56:59 +0000 (11:56 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Mon, 20 Apr 2015 11:56:59 +0000 (11:56 +0000)
commit98c367093d232b1fbf1a75aa6c7d3f0d5f31d51f
tree988b2fdd01519553d1fd3e220524dea3ae79cf28
parent3ff1c381e0baa22e4b265c56c9e49f0132190b45
[X86][FastIsel] Fix assertion failure when selecting int-to-double conversion (PR23273).

This fixes a regression introduced at revision 231243.
The target-independent selection algorithm in FastISel knows how to select
a SINT_TO_FP if the target is SSE but not AVX. That is because on X86, the
tablegen'd 'fastEmit' functions know how to select CVTSI2SSrr and CVTSI2SDrr.

Method X86FastISel::X86SelectSIToFP was therefore working under the
wrong assumption that the target was AVX. That assumption was incorrect since
we can have a target that is neither AVX nor SSE.

So, rather than asserting for the presence of AVX, we should have had an
early exit from 'X86SelectSIToFP' if the target was not AVX.
This patch fixes the issue replacing the invalid assertion with an early exit.

Thanks to Dimitry Andric for reporting this problem and for providing a small
reproducible testcase. Added test pr23273.ll.

llvm-svn: 235295
llvm/lib/Target/X86/X86FastISel.cpp
llvm/test/CodeGen/X86/pr23273.ll [new file with mode: 0644]