[llvm] 807b8cb - [X86] Fix a lowering issue of mask.compress which has undef float passthrough
Bing1 Yu via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 16 02:54:54 PDT 2022
Author: Bing1 Yu
Date: 2022-08-16T17:54:45+08:00
New Revision: 807b8cb06ca05228f3ecb4709f4f4141748d2ca9
URL: https://github.com/llvm/llvm-project/commit/807b8cb06ca05228f3ecb4709f4f4141748d2ca9
DIFF: https://github.com/llvm/llvm-project/commit/807b8cb06ca05228f3ecb4709f4f4141748d2ca9.diff
LOG: [X86] Fix a lowering issue of mask.compress which has undef float passthrough
Previously, LegaizeDAG didn't check mask.compress's passthrough might be float, and this lead to getConstant crash since it doesn't support fp
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D131947
Added:
llvm/test/CodeGen/X86/compress-undef-float-passthrough.ll
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 58cb2c6034997..69bd07ccf746c 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -27038,7 +27038,7 @@ SDValue X86TargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
// Avoid false dependency.
if (PassThru.isUndef())
- PassThru = DAG.getConstant(0, dl, VT);
+ PassThru = getZeroVector(VT, Subtarget, DAG, dl);
return DAG.getNode(IntrData->Opc0, dl, VT, DataToCompress, PassThru,
Mask);
diff --git a/llvm/test/CodeGen/X86/compress-undef-float-passthrough.ll b/llvm/test/CodeGen/X86/compress-undef-float-passthrough.ll
new file mode 100644
index 0000000000000..5d3eafdce4b55
--- /dev/null
+++ b/llvm/test/CodeGen/X86/compress-undef-float-passthrough.ll
@@ -0,0 +1,25 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=x86_64-- -mattr=avx512f,avx512vl | FileCheck %s --check-prefix=CHECK
+
+define void @test_compress_undef_float_passthrough() {
+; CHECK-LABEL: test_compress_undef_float_passthrough:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: movb $5, %al
+; CHECK-NEXT: kmovw %eax, %k1
+; CHECK-NEXT: vcompresspd %ymm0, %ymm0 {%k1} {z}
+; CHECK-NEXT: vscatterqpd %ymm0, (,%ymm0) {%k1}
+; CHECK-NEXT: vzeroupper
+; CHECK-NEXT: retq
+entry: ; preds = %loop.50
+ %0 = bitcast i4 undef to <4 x i1>
+ %1 = call <4 x double> @llvm.x86.avx512.mask.compress.v4f64(<4 x double> undef, <4 x double> undef, <4 x i1> <i1 1, i1 0, i1 1, i1 0>)
+ call void @llvm.masked.scatter.v4f64.v4p0f64(<4 x double> %1, <4 x double*> undef, i32 0, <4 x i1> %0)
+ ret void
+}
+
+; Function Attrs: nounwind readnone
+declare <4 x double> @llvm.x86.avx512.mask.compress.v4f64(<4 x double>, <4 x double>, <4 x i1>)
+
+; Function Attrs: nocallback nofree nosync nounwind willreturn writeonly
+declare void @llvm.masked.scatter.v4f64.v4p0f64(<4 x double>, <4 x double*>, i32 immarg, <4 x i1>)
+
More information about the llvm-commits
mailing list