mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
53e0093564
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
19 lines
603 B
LLVM
19 lines
603 B
LLVM
; Test that a scalar FP constant can be reused from a vector splat constant
|
|
; of the same value.
|
|
;
|
|
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
|
|
|
|
define void @fun() {
|
|
; CHECK-LABEL: fun:
|
|
; CHECK: vgmg %v0, 2, 10
|
|
; CHECK-NOT: vgmg %v0, 2, 10
|
|
|
|
%tmp = fadd <2 x double> zeroinitializer, <double 1.000000e+00, double 1.000000e+00>
|
|
%tmp1 = fmul <2 x double> %tmp, <double 5.000000e-01, double 5.000000e-01>
|
|
store <2 x double> %tmp1, <2 x double>* undef
|
|
%tmp2 = load double, double* undef
|
|
%tmp3 = fmul double %tmp2, 5.000000e-01
|
|
store double %tmp3, double* undef
|
|
ret void
|
|
}
|