[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