[PATCH] D89389: [SystemZ] Bugfix in SystemZVectorConstantInfo

Jonas Paulsson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 14 05:49:55 PDT 2020


jonpa created this revision.
jonpa added a reviewer: uweigand.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.
jonpa requested review of this revision.

In order to correctly load an all-ones FP NaN value into a floating point register with a VGBM, the analyzed 32/64 FP bits must first be shifted left (into element 0 of the vector register).

SystemZVectorConstantInfo has so far relied on element replication which has bypassed the need to do this shift, but now it is clear that this must be done in order to handle NaNs.


https://reviews.llvm.org/D89389

Files:
  llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
  llvm/test/CodeGen/SystemZ/fp-const-12.ll
  llvm/test/CodeGen/SystemZ/vector-constrained-fp-intrinsics.ll


Index: llvm/test/CodeGen/SystemZ/vector-constrained-fp-intrinsics.ll
===================================================================
--- llvm/test/CodeGen/SystemZ/vector-constrained-fp-intrinsics.ll
+++ llvm/test/CodeGen/SystemZ/vector-constrained-fp-intrinsics.ll
@@ -802,7 +802,7 @@
 ;
 ; SZ13-LABEL: constrained_vector_fadd_v3f32:
 ; SZ13:       # %bb.0: # %entry
-; SZ13-NEXT:    vgbm %v0, 15
+; SZ13-NEXT:    vgbm %v0, 61440
 ; SZ13-NEXT:    vgmf %v2, 1, 1
 ; SZ13-NEXT:    vgmf %v3, 2, 8
 ; SZ13-NEXT:    lzer %f1
@@ -974,12 +974,12 @@
 ;
 ; SZ13-LABEL: constrained_vector_fsub_v3f32:
 ; SZ13:       # %bb.0: # %entry
-; SZ13-NEXT:    vgbm %v2, 15
+; SZ13-NEXT:    vgbm %v2, 61440
 ; SZ13-NEXT:    lzer %f1
 ; SZ13-NEXT:    sebr %f2, %f1
 ; SZ13-NEXT:    vgmf %v1, 1, 1
-; SZ13-NEXT:    vgbm %v3, 15
-; SZ13-NEXT:    vgbm %v0, 15
+; SZ13-NEXT:    vgbm %v3, 61440
+; SZ13-NEXT:    vgbm %v0, 61440
 ; SZ13-NEXT:    sebr %f3, %f1
 ; SZ13-NEXT:    vgmf %v1, 2, 8
 ; SZ13-NEXT:    sebr %f0, %f1
Index: llvm/test/CodeGen/SystemZ/fp-const-12.ll
===================================================================
--- llvm/test/CodeGen/SystemZ/fp-const-12.ll
+++ llvm/test/CodeGen/SystemZ/fp-const-12.ll
@@ -1,4 +1,4 @@
-; Test loads of FP constants with VGM.
+; Test loads of FP constants with VGM and VGBM.
 ;
 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
 
@@ -61,3 +61,15 @@
 ; CHECK: vgmf %v0, 2, 6
   ret float 0.125
 }
+
+define float @f11() {
+; CHECK-LABEL: f11:
+; CHECK: vgbm %v0, 61440
+  ret float 0xFFFFFFFFE0000000
+}
+
+define double @f12() {
+; CHECK-LABEL: f12:
+; CHECK: vgbm %v0, 61440
+  ret double 0xFFFFFFFF00000000
+}
Index: llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
===================================================================
--- llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
+++ llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
@@ -784,10 +784,11 @@
 SystemZVectorConstantInfo::SystemZVectorConstantInfo(APFloat FPImm) {
   IntBits = FPImm.bitcastToAPInt().zextOrSelf(128);
   isFP128 = (&FPImm.getSemantics() == &APFloat::IEEEquad());
-
-  // Find the smallest splat.
   SplatBits = FPImm.bitcastToAPInt();
   unsigned Width = SplatBits.getBitWidth();
+  IntBits <<= (SystemZ::VectorBits - Width);
+
+  // Find the smallest splat.
   while (Width > 8) {
     unsigned HalfSize = Width / 2;
     APInt HighValue = SplatBits.lshr(HalfSize).trunc(HalfSize);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D89389.298130.patch
Type: text/x-patch
Size: 2420 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201014/ab879958/attachment.bin>


More information about the llvm-commits mailing list