[PATCH] D145870: [X86][FP16] Combine bitcast(extract_vector_elt vXi16, N) to extract_vector_elt(bitcast(vXi16), N)
Phoebe Wang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Mar 12 06:52:44 PDT 2023
pengfei created this revision.
pengfei added reviewers: RKSimon, LuoYuanke, skan.
Herald added a subscriber: hiraditya.
Herald added a project: All.
pengfei requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Found the problem while implementing D145867 <https://reviews.llvm.org/D145867>.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D145870
Files:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/half.ll
Index: llvm/test/CodeGen/X86/half.ll
===================================================================
--- llvm/test/CodeGen/X86/half.ll
+++ llvm/test/CodeGen/X86/half.ll
@@ -1361,24 +1361,18 @@
; CHECK-LIBCALL-LABEL: pr61271:
; CHECK-LIBCALL: # %bb.0:
; CHECK-LIBCALL-NEXT: pminsw %xmm1, %xmm0
-; CHECK-LIBCALL-NEXT: movd %xmm0, %eax
-; CHECK-LIBCALL-NEXT: pinsrw $0, %eax, %xmm0
; CHECK-LIBCALL-NEXT: retq
;
; BWON-F16C-LABEL: pr61271:
; BWON-F16C: # %bb.0:
; BWON-F16C-NEXT: vpminsw %xmm1, %xmm0, %xmm0
-; BWON-F16C-NEXT: vmovd %xmm0, %eax
-; BWON-F16C-NEXT: vpinsrw $0, %eax, %xmm0, %xmm0
; BWON-F16C-NEXT: retq
;
; CHECK-I686-LABEL: pr61271:
; CHECK-I686: # %bb.0:
-; CHECK-I686-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm0
; CHECK-I686-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm1
-; CHECK-I686-NEXT: pminsw %xmm0, %xmm1
-; CHECK-I686-NEXT: movd %xmm1, %eax
-; CHECK-I686-NEXT: pinsrw $0, %eax, %xmm0
+; CHECK-I686-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm0
+; CHECK-I686-NEXT: pminsw %xmm1, %xmm0
; CHECK-I686-NEXT: retl
%3 = call fast half @llvm.minnum.f16(half %0, half %1)
ret half %3
Index: llvm/lib/Target/X86/X86ISelLowering.cpp
===================================================================
--- llvm/lib/Target/X86/X86ISelLowering.cpp
+++ llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -44181,6 +44181,15 @@
N0 = DAG.getBitcast(MVT::i8, N0);
return DAG.getNode(ISD::TRUNCATE, dl, VT, N0);
}
+
+ // Combine bitcast(extract_vector_elt vXi16, N) to
+ // extract_vector_elt(bitcast(vXi16), N).
+ if (VT == MVT::f16 && N0.getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
+ SDValue N00 = N0.getOperand(0);
+ EVT NVT = N00.getValueType().changeVectorElementType(MVT::f16);
+ return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::f16,
+ DAG.getBitcast(NVT, N00), N0.getOperand(1));
+ }
} else {
// If we're bitcasting from iX to vXi1, see if the integer originally
// began as a vXi1 and whether we can remove the bitcast entirely.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D145870.504433.patch
Type: text/x-patch
Size: 2100 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230312/fcf66131/attachment.bin>
More information about the llvm-commits
mailing list