OSDN Git Service

[X86] Disable DomainReassignment pass when AVX512BW is disabled to avoid injecting...
authorCraig Topper <craig.topper@intel.com>
Thu, 10 Jan 2019 07:43:54 +0000 (07:43 +0000)
committerCraig Topper <craig.topper@intel.com>
Thu, 10 Jan 2019 07:43:54 +0000 (07:43 +0000)
commitb6b44e81068ca7c1923f4d1e131544295645542d
treee0b5806366b4f61af24fbd6b8d9634b94bac9c6c
parentb813f92d5eb22ca49a916c62687625fe7378c644
[X86] Disable DomainReassignment pass when AVX512BW is disabled to avoid injecting VK32/VK64 references into the MachineIR

Summary:
This pass replaces GR8/GR16/GR32/GR64 with their equivalent sized mask register classes. But VK32/VK64 aren't legal without AVX512BW. Apparently this mostly appears to work if the register coalescer is able to remove the VK32/VK64 register class reference. Or if we don't ever spill it. But there's no guarantee of that.

Another Intel employee managed to trigger a crash due to this with ISPC. Unfortunately, I've lost the test case he sent me at the time. I'm trying to get him to reproduce it for me. I'd like to get this in before 8.0 branches since its a little scary.

The regressions here are unfortunate, but I think we can make some improvements to DAG combine, load folding, etc. to fix them. Just not sure if we can get that done for 8.0.

Fixes PR39741

Reviewers: RKSimon, spatel

Reviewed By: RKSimon

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D56460

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350800 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86DomainReassignment.cpp
test/CodeGen/X86/avx512-intrinsics-fast-isel.ll
test/CodeGen/X86/avx512-mask-op.ll
test/CodeGen/X86/avx512vl-intrinsics.ll
test/CodeGen/X86/vec_floor.ll