Page MenuHomePhabricator

[SelectionDAG] Support promotion of the FPOWI integer operand

Authored by asb on Nov 15 2018, 4:00 AM.



For targets where i32 is not a legal type (e.g. 64-bit RISC-V), LegalizeIntegerTypes must promote the integer operand of ISD::FPOWI. As this is a signed value, this should be sign-extended.

This patch enables all tests in float-intrinsics.ll, as prior to this patch that file couldn't be compiled for RV64 due to an assertion when performing codegen for fpowi.

Diff Detail

Event Timeline

asb created this revision.Nov 15 2018, 4:00 AM
efriedma accepted this revision.Nov 15 2018, 11:27 AM
efriedma added a subscriber: efriedma.

Probably worth putting a note in ISDOpcodes.h that the behavior is undefined if the integer doesn't fit in 32 bits. Otherwise LGTM.

This revision is now accepted and ready to land.Nov 15 2018, 11:27 AM

can you rebase this one as well, patch not applying cleanly

asb updated this revision to Diff 176079.EditedNov 30 2018, 3:59 AM

Updated to add note about FPOWI being undefined if integer operand is > 32-bits, as suggested by @efriedma

@apazos: The patch applies with minimal fuzz once you've applied the RV64F codegen patch (which is marked as a dependency). I think I'd incorrectly indicated to you that you'd want to apply this patch for RV64I testing - that was incorrect. rL346034 is sufficient for FPOWI on RV64I. Sorry for the confusion!

asb updated this revision to Diff 180081.Jan 3 2019, 8:09 AM

Refreshing patch, no functional changes.

asb updated this revision to Diff 183620.Jan 25 2019, 2:20 PM

Refreshing patch. No changes. This is just waiting for a LGTM on the RV64F patch.

asb updated this revision to Diff 184255.Jan 30 2019, 1:45 AM

Refreshing patch due to fabs codegen changes thanks to the dagcombine added to the RV64F patch.

This revision was automatically updated to reflect the committed changes.
Herald added a project: Restricted Project. · View Herald TranscriptJan 31 2019, 7:46 PM