This is an archive of the discontinued LLVM Phabricator instance.

[X86] Pass v32i16/v64i8 in zmm registers on KNL target.
ClosedPublic

Authored by craig.topper on Aug 24 2019, 1:55 PM.

Details

Summary

gcc and icc pass these types in zmm registers in zmm registers.

This patch implements a quick hack to override the register
type before calling convention handling to one that is legal.
Longer term we might want to do something similar to 256-bit
integer registers on AVX1 where we just split all the operations.

Fixes PR42957

Event Timeline

craig.topper created this revision.Aug 24 2019, 1:55 PM
Herald added a project: Restricted Project. · View Herald TranscriptAug 24 2019, 1:55 PM
Herald added a subscriber: hiraditya. · View Herald Transcript

Add a release notes description?

Do we need to flag anything as an ABI change?

Do we have any KNL hardware test coverage?

Add an entry to release notes. Add a paranoia command line switch to enable the old behavior. Add test cases for the command line option to avx512-calling-conv.ll

Add a release notes description?

Do we need to flag anything as an ABI change?

Do we have any KNL hardware test coverage?

Where should I flag the ABI change? Hopefully this doesn't have a big impact since using __m512i always work. Its only if you declared your own vector type and passed it to a translation unit compiled with an older compiler that things would break.

Clang was sadly never pushed by Intel for compiling for KNL. Only icc and maybe gcc were. We don't do any testing internally with KNL on clang that I know of.

RKSimon accepted this revision.Aug 30 2019, 6:48 AM

OK, I agree this be should be fine, although lack of xeonphi testing is worrying. LGTM

This revision is now accepted and ready to land.Aug 30 2019, 6:48 AM
This revision was automatically updated to reflect the committed changes.