]> granicus.if.org Git - llvm/commitdiff
[Power9] Add patterns for vnegd, vnegw
authorEhsan Amiri <amehsan@ca.ibm.com>
Fri, 18 Nov 2016 11:05:55 +0000 (11:05 +0000)
committerEhsan Amiri <amehsan@ca.ibm.com>
Fri, 18 Nov 2016 11:05:55 +0000 (11:05 +0000)
Exploit new instructions by adding patterns to .td file.
https://reviews.llvm.org/D26551

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287334 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPCInstrAltivec.td
test/CodeGen/PowerPC/vsx-p9.ll

index f9a500bea17370150447e22a900b985577679026..a2787f88329b9a530f3738e7b1e499efaf5d14e2 100644 (file)
@@ -1315,8 +1315,13 @@ let isCodeGenOnly = 1 in {
 }
 
 // Vector Integer Negate
-def VNEGW : VX_VT5_EO5_VB5<1538, 6, "vnegw", []>;
-def VNEGD : VX_VT5_EO5_VB5<1538, 7, "vnegd", []>;
+def VNEGW : VX_VT5_EO5_VB5<1538, 6, "vnegw",
+                           [(set v4i32:$vD,
+                            (sub (v4i32 immAllZerosV), v4i32:$vB))]>;
+
+def VNEGD : VX_VT5_EO5_VB5<1538, 7, "vnegd",
+                           [(set v2i64:$vD,
+                            (sub (v2i64 (bitconvert (v4i32 immAllZerosV))), v2i64:$vB))]>;
 
 // Vector Parity Byte
 def VPRTYBW : VX_VT5_EO5_VB5<1538, 8, "vprtybw", [(set v4i32:$vD,
index b0c6e85135359edaea3a7497f766c397f50431ee..e8a0a3bcf92a0828a26b0229b0ece0555e14b87c 100644 (file)
@@ -388,4 +388,26 @@ entry:
 ; Function Attrs: nounwind readnone
 declare void @llvm.ppc.vsx.stxvll(<4 x i32>, i8*, i64)
 
+define <4 x i32> @test0(<4 x i32> %a) local_unnamed_addr #0 {
+entry:
+  %sub.i = sub <4 x i32> zeroinitializer, %a
+  ret <4 x i32> %sub.i
+
+; CHECK-LABEL: @test0
+; CHECK: vnegw 2, 2
+; CHECK: blr
+
+}
+
+define <2 x i64> @test1(<2 x i64> %a) local_unnamed_addr #0 {
+entry:
+  %sub.i = sub <2 x i64> zeroinitializer, %a
+  ret <2 x i64> %sub.i
+
+; CHECK-LABEL: @test1
+; CHECK: vnegd 2, 2
+; CHECK: blr
+
+}
+
 declare void @sink(...)