summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorSean Fertile <sfertile@ca.ibm.com>2016-11-14 18:43:59 +0000
committerSean Fertile <sfertile@ca.ibm.com>2016-11-14 18:43:59 +0000
commita435e07de85dfe6ef675aa584c6b074ea6cd98d7 (patch)
tree76c9384c235fb8371ce38badc2ff5e72a1dbd95c /llvm/lib
parent544220fc0b31b4cc95aa183a20ef91922aeab7b7 (diff)
downloadbcm5719-llvm-a435e07de85dfe6ef675aa584c6b074ea6cd98d7.tar.gz
bcm5719-llvm-a435e07de85dfe6ef675aa584c6b074ea6cd98d7.zip
[PPC] Add intrinsic mapping to the xscvhpsp instruction
add an intrinsic to expose the 'VSX Scalar Convert Half-Precision to Single-Precision' instruction. Differential review: https://reviews.llvm.org/D26536 llvm-svn: 286862
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/PowerPC/PPCInstrVSX.td9
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCInstrVSX.td b/llvm/lib/Target/PowerPC/PPCInstrVSX.td
index cdf6a24b725..98ac3b77469 100644
--- a/llvm/lib/Target/PowerPC/PPCInstrVSX.td
+++ b/llvm/lib/Target/PowerPC/PPCInstrVSX.td
@@ -2132,6 +2132,7 @@ let AddedComplexity = 400, Predicates = [HasP9Vector] in {
def XSCVSDQP : X_VT5_XO5_VB5_TyVB<63, 10, 836, "xscvsdqp", vfrc, []>;
def XSCVUDQP : X_VT5_XO5_VB5_TyVB<63, 2, 836, "xscvudqp", vfrc, []>;
+ let UseVSXReg = 1 in {
//===--------------------------------------------------------------------===//
// Round to Floating-Point Integer Instructions
@@ -2148,6 +2149,14 @@ let AddedComplexity = 400, Predicates = [HasP9Vector] in {
[(set v4f32:$XT,
(int_ppc_vsx_xvcvsphp v4f32:$XB))]>;
+ } // UseVSXReg = 1
+
+ // Pattern for matching Vector HP -> Vector SP intrinsic. Defined as a
+ // seperate pattern so that it can convert the input register class from
+ // VRRC(v8i16) to VSRC.
+ def : Pat<(v4f32 (int_ppc_vsx_xvcvhpsp v8i16:$A)),
+ (v4f32 (XVCVHPSP (COPY_TO_REGCLASS $A, VSRC)))>;
+
class Z23_VT5_R1_VB5_RMC2_EX1<bits<6> opcode, bits<8> xo, bit ex, string opc,
list<dag> pattern>
: Z23Form_1<opcode, xo,
OpenPOWER on IntegriCloud