[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