1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 04:02:41 +01:00
llvm-mirror/test/CodeGen/SystemZ/vec-const-05.ll
Jonas Paulsson 53e0093564 [SystemZ] Wait with selection of legal vector/FP constants until Select().
This patch aims to make sure that any such constant that can be generated
with a vector instruction (for example VGBM) is recognized as such during
legalization and kept as a target independent node through post-legalize
DAGCombining.

Two new functions named isVectorConstantLegal() and loadVectorConstant()
replace old ways of handling vector/FP constants.

A new struct named SystemZVectorConstantInfo is used to cache the results of
isVectorConstantLegal() and pass them onto loadVectorConstant().

Support for fp128 constants in the presence of FeatureVectorEnhancements1
(z14) has been added.

Review: Ulrich Weigand
https://reviews.llvm.org/D58270

llvm-svn: 354896
2019-02-26 16:47:59 +00:00

64 lines
1.7 KiB
LLVM

; Test vector byte masks, v4f32 version.
;
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
; Test an all-zeros vector.
define <4 x float> @f1() {
; CHECK-LABEL: f1:
; CHECK: vgbm %v24, 0
; CHECK: br %r14
ret <4 x float> zeroinitializer
}
; Test an all-ones vector.
define <4 x float> @f2() {
; CHECK-LABEL: f2:
; CHECK: vgbm %v24, 65535
; CHECK: br %r14
ret <4 x float> <float 0xffffffffe0000000, float 0xffffffffe0000000,
float 0xffffffffe0000000, float 0xffffffffe0000000>
}
; Test a mixed vector (mask 0xc731).
define <4 x float> @f3() {
; CHECK-LABEL: f3:
; CHECK: vgbm %v24, 50993
; CHECK: br %r14
ret <4 x float> <float 0xffffe00000000000, float 0x381fffffe0000000,
float 0x379fffe000000000, float 0x371fe00000000000>
}
; Test that undefs are treated as zero (mask 0xc031).
define <4 x float> @f4() {
; CHECK-LABEL: f4:
; CHECK: vgbm %v24, 49201
; CHECK: br %r14
ret <4 x float> <float 0xffffe00000000000, float undef,
float 0x379fffe000000000, float 0x371fe00000000000>
}
; Test that we don't use VGBM if one of the bytes is not 0 or 0xff.
define <4 x float> @f5() {
; CHECK-LABEL: f5:
; CHECK-NOT: vgbm
; CHECK: br %r14
ret <4 x float> <float 0xffffe00000000000, float 0x381fffffc0000000,
float 0x379fffe000000000, float 0x371fe00000000000>
}
; Test an all-zeros v2f32 that gets promoted to v4f32.
define <2 x float> @f6() {
; CHECK-LABEL: f6:
; CHECK: vgbm %v24, 0
; CHECK: br %r14
ret <2 x float> zeroinitializer
}
; Test a mixed v2f32 that gets promoted to v4f32 (mask 0xc700).
define <2 x float> @f7() {
; CHECK-LABEL: f7:
; CHECK: vgbm %v24, 50944
; CHECK: br %r14
ret <2 x float> <float 0xffffe00000000000, float 0x381fffffe0000000>
}