diff options
author | Craig Topper <craig.topper@intel.com> | 2018-03-16 17:13:42 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2018-03-16 17:13:42 +0000 |
commit | e6913ec3400b3e23fc134097ebebb05be5330b66 (patch) | |
tree | a7f7089d631624290408c07341fb4d8809be489b /llvm/test/CodeGen/X86/bitcast-setcc-128.ll | |
parent | 4c8f4234b664fb49c4b518bc19f0073c0c112868 (diff) | |
download | bcm5719-llvm-e6913ec3400b3e23fc134097ebebb05be5330b66.tar.gz bcm5719-llvm-e6913ec3400b3e23fc134097ebebb05be5330b66.zip |
[X86] Post process the DAG after isel to remove vector moves that were added to zero upper bits.
We previously avoided inserting these moves during isel in a few cases which is implemented using a whitelist of opcodes. But it's too difficult to generate a perfect list of opcodes to whitelist. Especially with AVX512F without AVX512VL using 512 bit vectors to implement some 128/256 bit operations. Since isel is done bottoms up, we'd have to check the VT and opcode and subtarget in order to determine whether an EXTRACT_SUBREG would be generated for some operations.
So instead of doing that, this patch adds a post processing step that detects when the moves are unnecesssary after isel. At that point any EXTRACT_SUBREGs would have already been created and appear in the DAG. So then we just need to ensure the input to the move isn't one.
Differential Revision: https://reviews.llvm.org/D44289
llvm-svn: 327724
Diffstat (limited to 'llvm/test/CodeGen/X86/bitcast-setcc-128.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/bitcast-setcc-128.ll | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/llvm/test/CodeGen/X86/bitcast-setcc-128.ll b/llvm/test/CodeGen/X86/bitcast-setcc-128.ll index 5164d4f4a26..599e907251b 100644 --- a/llvm/test/CodeGen/X86/bitcast-setcc-128.ll +++ b/llvm/test/CodeGen/X86/bitcast-setcc-128.ll @@ -658,7 +658,6 @@ define i64 @v16i8_widened_with_zeroes(<16 x i8> %a, <16 x i8> %b) { ; AVX2-LABEL: v16i8_widened_with_zeroes: ; AVX2: # %bb.0: # %entry ; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0 -; AVX2-NEXT: vmovdqa %xmm0, %xmm0 ; AVX2-NEXT: vpmovmskb %ymm0, %eax ; AVX2-NEXT: vzeroupper ; AVX2-NEXT: retq |