mirror of
https://github.com/RPCS3/llvm.git
synced 2026-01-31 01:25:19 +01:00
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354896 91177308-0d34-0410-b5e6-96231b3b80d8
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
|
|
}
|