forked from OSchip/llvm-project
[X86] Support load shrinking for strict fp nodes in combineCVTPH2PS
This commit is contained in:
parent
3f0cc7ac5e
commit
b0eea7213b
|
@ -44865,18 +44865,22 @@ static SDValue combineCVTPH2PS(SDNode *N, SelectionDAG &DAG,
|
|||
return SDValue(N, 0);
|
||||
}
|
||||
|
||||
// FIXME: Shrink vector loads.
|
||||
if (IsStrict)
|
||||
return SDValue();
|
||||
|
||||
// Convert a full vector load into vzload when not all bits are needed.
|
||||
if (ISD::isNormalLoad(Src.getNode()) && Src.hasOneUse()) {
|
||||
LoadSDNode *LN = cast<LoadSDNode>(N->getOperand(0));
|
||||
LoadSDNode *LN = cast<LoadSDNode>(N->getOperand(IsStrict ? 1 : 0));
|
||||
if (SDValue VZLoad = narrowLoadToVZLoad(LN, MVT::i64, MVT::v2i64, DAG)) {
|
||||
SDLoc dl(N);
|
||||
SDValue Convert = DAG.getNode(N->getOpcode(), dl, MVT::v4f32,
|
||||
DAG.getBitcast(MVT::v8i16, VZLoad));
|
||||
DCI.CombineTo(N, Convert);
|
||||
if (IsStrict) {
|
||||
SDValue Convert = DAG.getNode(
|
||||
N->getOpcode(), dl, {MVT::v4f32, MVT::Other},
|
||||
{N->getOperand(0), DAG.getBitcast(MVT::v8i16, VZLoad)});
|
||||
DCI.CombineTo(N, Convert, Convert.getValue(1));
|
||||
} else {
|
||||
SDValue Convert = DAG.getNode(N->getOpcode(), dl, MVT::v4f32,
|
||||
DAG.getBitcast(MVT::v8i16, VZLoad));
|
||||
DCI.CombineTo(N, Convert);
|
||||
}
|
||||
|
||||
DAG.ReplaceAllUsesOfValueWith(SDValue(LN, 1), VZLoad.getValue(1));
|
||||
DCI.recursivelyDeleteUnusedNodes(LN);
|
||||
return SDValue(N, 0);
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+f16c -verify-machineinstrs | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+f16c -verify-machineinstrs | FileCheck %s --check-prefixes=ALL,AVX,AVX2,AVX2-SLOW
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+f16c,+fast-variable-shuffle -verify-machineinstrs | FileCheck %s --check-prefixes=ALL,AVX,AVX2,AVX2-FAST
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -verify-machineinstrs | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F
|
||||
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+fast-variable-shuffle -verify-machineinstrs | FileCheck %s --check-prefixes=ALL,AVX,AVX512,AVX512VL
|
||||
; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx,+f16c -verify-machineinstrs | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
|
||||
; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx2,+f16c -verify-machineinstrs | FileCheck %s --check-prefixes=ALL,AVX,AVX2,AVX2-SLOW
|
||||
; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx2,+f16c,+fast-variable-shuffle -verify-machineinstrs | FileCheck %s --check-prefixes=ALL,AVX,AVX2,AVX2-FAST
|
||||
; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512f -verify-machineinstrs | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F
|
||||
; RUN: llc < %s -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+fast-variable-shuffle -verify-machineinstrs | FileCheck %s --check-prefixes=ALL,AVX,AVX512,AVX512VL
|
||||
|
||||
;
|
||||
; Half to Float
|
||||
|
|
Loading…
Reference in New Issue