1 ; Check VMX 128-bit integer operations
3 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s
4 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -mattr=-vsx < %s | FileCheck %s
6 define <1 x i128> @out_of_bounds_insertelement(<1 x i128> %x, i128 %val) nounwind {
7 %tmpvec = insertelement <1 x i128> <i128 0>, i128 %val, i32 1
8 %result = add <1 x i128> %x, %tmpvec
10 ; CHECK-LABEL: @out_of_bounds_insertelement
15 define <1 x i128> @test_add(<1 x i128> %x, <1 x i128> %y) nounwind {
16 %result = add <1 x i128> %x, %y
17 ret <1 x i128> %result
18 ; CHECK-LABEL: @test_add
19 ; CHECK: vadduqm 2, 2, 3
22 define <1 x i128> @increment_by_one(<1 x i128> %x) nounwind {
23 %result = add <1 x i128> %x, <i128 1>
24 ret <1 x i128> %result
25 ; CHECK-LABEL: @increment_by_one
26 ; CHECK: vadduqm 2, 2, 3
29 define <1 x i128> @increment_by_val(<1 x i128> %x, i128 %val) nounwind {
30 %tmpvec = insertelement <1 x i128> <i128 0>, i128 %val, i32 0
31 %result = add <1 x i128> %x, %tmpvec
32 ret <1 x i128> %result
33 ; CHECK-LABEL: @increment_by_val
34 ; CHECK: vadduqm 2, 2, 3
37 define <1 x i128> @test_sub(<1 x i128> %x, <1 x i128> %y) nounwind {
38 %result = sub <1 x i128> %x, %y
39 ret <1 x i128> %result
40 ; CHECK-LABEL: @test_sub
41 ; CHECK: vsubuqm 2, 2, 3
44 define <1 x i128> @decrement_by_one(<1 x i128> %x) nounwind {
45 %result = sub <1 x i128> %x, <i128 1>
46 ret <1 x i128> %result
47 ; CHECK-LABEL: @decrement_by_one
48 ; CHECK: vsubuqm 2, 2, 3
51 define <1 x i128> @decrement_by_val(<1 x i128> %x, i128 %val) nounwind {
52 %tmpvec = insertelement <1 x i128> <i128 0>, i128 %val, i32 0
53 %result = sub <1 x i128> %x, %tmpvec
54 ret <1 x i128> %result
55 ; CHECK-LABEL: @decrement_by_val
56 ; CHECK: vsubuqm 2, 2, 3
59 declare <1 x i128> @llvm.ppc.altivec.vaddeuqm(<1 x i128> %x,
61 <1 x i128> %z) nounwind readnone
62 declare <1 x i128> @llvm.ppc.altivec.vaddcuq(<1 x i128> %x,
63 <1 x i128> %y) nounwind readnone
64 declare <1 x i128> @llvm.ppc.altivec.vaddecuq(<1 x i128> %x,
66 <1 x i128> %z) nounwind readnone
67 declare <1 x i128> @llvm.ppc.altivec.vsubeuqm(<1 x i128> %x,
69 <1 x i128> %z) nounwind readnone
70 declare <1 x i128> @llvm.ppc.altivec.vsubcuq(<1 x i128> %x,
71 <1 x i128> %y) nounwind readnone
72 declare <1 x i128> @llvm.ppc.altivec.vsubecuq(<1 x i128> %x,
74 <1 x i128> %z) nounwind readnone
76 define <1 x i128> @test_vaddeuqm(<1 x i128> %x,
78 <1 x i128> %z) nounwind {
79 %tmp = tail call <1 x i128> @llvm.ppc.altivec.vaddeuqm(<1 x i128> %x,
83 ; CHECK-LABEL: @test_vaddeuqm
84 ; CHECK: vaddeuqm 2, 2, 3, 4
87 define <1 x i128> @test_vaddcuq(<1 x i128> %x,
88 <1 x i128> %y) nounwind {
89 %tmp = tail call <1 x i128> @llvm.ppc.altivec.vaddcuq(<1 x i128> %x,
92 ; CHECK-LABEL: @test_vaddcuq
93 ; CHECK: vaddcuq 2, 2, 3
96 define <1 x i128> @test_vaddecuq(<1 x i128> %x,
98 <1 x i128> %z) nounwind {
99 %tmp = tail call <1 x i128> @llvm.ppc.altivec.vaddecuq(<1 x i128> %x,
103 ; CHECK-LABEL: @test_vaddecuq
104 ; CHECK: vaddecuq 2, 2, 3, 4
107 define <1 x i128> @test_vsubeuqm(<1 x i128> %x,
109 <1 x i128> %z) nounwind {
110 %tmp = tail call <1 x i128> @llvm.ppc.altivec.vsubeuqm(<1 x i128> %x,
114 ; CHECK-LABEL: test_vsubeuqm
115 ; CHECK: vsubeuqm 2, 2, 3, 4
118 define <1 x i128> @test_vsubcuq(<1 x i128> %x,
119 <1 x i128> %y) nounwind {
120 %tmp = tail call <1 x i128> @llvm.ppc.altivec.vsubcuq(<1 x i128> %x,
123 ; CHECK-LABEL: test_vsubcuq
124 ; CHECK: vsubcuq 2, 2, 3
127 define <1 x i128> @test_vsubecuq(<1 x i128> %x,
129 <1 x i128> %z) nounwind {
130 %tmp = tail call <1 x i128> @llvm.ppc.altivec.vsubecuq(<1 x i128> %x,
134 ; CHECK-LABEL: test_vsubecuq
135 ; CHECK: vsubecuq 2, 2, 3, 4