OSDN Git Service

[X86] Don't base domain decisions on VEXTRACTF128/VINSERTF128 if only AVX1 is available.
authorCraig Topper <craig.topper@gmail.com>
Sat, 11 Feb 2017 05:32:57 +0000 (05:32 +0000)
committerCraig Topper <craig.topper@gmail.com>
Sat, 11 Feb 2017 05:32:57 +0000 (05:32 +0000)
commitff0f1ca865f01ca11a2cbff1392808994450a50b
treea99124fca4d803249a0957a9df0a00ff6168fdd2
parent049ef19b9c9a80e22b7db05037a8ef099a8ae461
[X86] Don't base domain decisions on VEXTRACTF128/VINSERTF128 if only AVX1 is available.

Seems the execution dependency pass likes to use FP instructions when most of the consuming code is integer if a vextractf128 instruction produced the register. Without AVX2 we don't have the corresponding integer instruction available.

This patch suppresses the domain on these instructions to GenericDomain if AVX2 is not supported so that they are ignored by domain fixing. If AVX2 is supported we'll report the correct domain and allow them to switch between integer and fp.

Overall I think this produces better results in the modified test cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294824 91177308-0d34-0410-b5e6-96231b3b80d8
22 files changed:
lib/Target/X86/X86InstrInfo.cpp
test/CodeGen/X86/merge-consecutive-loads-256.ll
test/CodeGen/X86/nontemporal-loads.ll
test/CodeGen/X86/oddshuffles.ll
test/CodeGen/X86/psubus.ll
test/CodeGen/X86/subvector-broadcast.ll
test/CodeGen/X86/unaligned-32-byte-memops.ll
test/CodeGen/X86/vec_fptrunc.ll
test/CodeGen/X86/vec_int_to_fp.ll
test/CodeGen/X86/vec_minmax_uint.ll
test/CodeGen/X86/vector-bitreverse.ll
test/CodeGen/X86/vector-compare-results.ll
test/CodeGen/X86/vector-half-conversions.ll
test/CodeGen/X86/vector-idiv-sdiv-256.ll
test/CodeGen/X86/vector-idiv-udiv-256.ll
test/CodeGen/X86/vector-lzcnt-256.ll
test/CodeGen/X86/vector-popcnt-256.ll
test/CodeGen/X86/vector-trunc-math.ll
test/CodeGen/X86/vector-trunc.ll
test/CodeGen/X86/viabs.ll
test/CodeGen/X86/vselect-minmax.ll
test/CodeGen/X86/x86-interleaved-access.ll