[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / InstCombine / ARM / vmldava.ll
blobeeb10de350cc11816ff54bcbea7616e047bbd748
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -instcombine -S -mtriple=arm -o - %s | FileCheck %s
4 target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
6 define arm_aapcs_vfpcc i32 @test_vmladavaq_s32(i32 %z, <4 x i32> %x, <4 x i32> %y) {
7 ; CHECK-LABEL: @test_vmladavaq_s32(
8 ; CHECK-NEXT:  entry: 
9 ; CHECK-NEXT:  %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 0, i32 0, i32 %z, <4 x i32> %x, <4 x i32> %y)
10 ; CHECK-NEXT:  ret i32 %0
11 entry:
12   %0 = tail call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 0, i32 0, i32 0, <4 x i32> %x, <4 x i32> %y)
13   %1 = add nsw i32 %0, %z
14   ret i32 %1
17 define arm_aapcs_vfpcc i32 @test_vmladavaq_s16(i32 %z, <8 x i16> %x, <8 x i16> %y) {
18 ; CHECK-LABEL: @test_vmladavaq_s16(
19 ; CHECK-NEXT:  entry:
20 ; CHECK-NEXT:  %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 0, i32 0, i32 %z, <8 x i16> %x, <8 x i16> %y)
21 ; CHECK-NEXT:  ret i32 %0
22 entry:
23   %0 = tail call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 0, i32 0, i32 0, <8 x i16> %x, <8 x i16> %y)
24   %1 = add nsw i32 %0, %z
25   ret i32 %1
28 define arm_aapcs_vfpcc i32 @test_vmladavaq_s8(i32 %z, <16 x i8> %x, <16 x i8> %y) {
29 ; CHECK-LABEL: @test_vmladavaq_s8(
30 ; CHECK-NEXT:  entry:
31 ; CHECK-NEXT:  %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 0, i32 0, i32 %z, <16 x i8> %x, <16 x i8> %y)
32 ; CHECK-NEXT:  ret i32 %0
33 entry:
34   %0 = tail call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 0, i32 0, i32 0, <16 x i8> %x, <16 x i8> %y)
35   %1 = add nsw i32 %0, %z
36   ret i32 %1
39 define arm_aapcs_vfpcc i32 @test_vmladavaq_u32(i32 %z, <4 x i32> %x, <4 x i32> %y) {
40 ; CHECK-LABEL: @test_vmladavaq_u32(
41 ; CHECK-NEXT:  entry: 
42 ; CHECK-NEXT:  %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 1, i32 0, i32 0, i32 %z, <4 x i32> %x, <4 x i32> %y)
43 ; CHECK-NEXT:  ret i32 %0
44 entry:
45   %0 = tail call i32 @llvm.arm.mve.vmldava.v4i32(i32 1, i32 0, i32 0, i32 0, <4 x i32> %x, <4 x i32> %y)
46   %1 = add nsw i32 %0, %z
47   ret i32 %1
50 define arm_aapcs_vfpcc i32 @test_vmladavaq_u16(i32 %z, <8 x i16> %x, <8 x i16> %y) {
51 ; CHECK-LABEL: @test_vmladavaq_u16(
52 ; CHECK-NEXT:  entry:
53 ; CHECK-NEXT:  %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 1, i32 0, i32 0, i32 %z, <8 x i16> %x, <8 x i16> %y)
54 ; CHECK-NEXT:  ret i32 %0
55 entry:
56   %0 = tail call i32 @llvm.arm.mve.vmldava.v8i16(i32 1, i32 0, i32 0, i32 0, <8 x i16> %x, <8 x i16> %y)
57   %1 = add nsw i32 %0, %z
58   ret i32 %1
61 define arm_aapcs_vfpcc i32 @test_vmladavaq_u8(i32 %z, <16 x i8> %x, <16 x i8> %y) {
62 ; CHECK-LABEL: @test_vmladavaq_u8(
63 ; CHECK-NEXT:  entry:
64 ; CHECK-NEXT:  %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 1, i32 0, i32 0, i32 %z, <16 x i8> %x, <16 x i8> %y)
65 ; CHECK-NEXT:  ret i32 %0
66 entry:
67   %0 = tail call i32 @llvm.arm.mve.vmldava.v16i8(i32 1, i32 0, i32 0, i32 0, <16 x i8> %x, <16 x i8> %y)
68   %1 = add nsw i32 %0, %z
69   ret i32 %1
72 define arm_aapcs_vfpcc i32 @test_vmlsdavaq_s32(i32 %z, <4 x i32> %x, <4 x i32> %y) {
73 ; CHECK-LABEL: @test_vmlsdavaq_s32(
74 ; CHECK-NEXT:  entry: 
75 ; CHECK-NEXT:  %0 = call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 1, i32 0, i32 %z, <4 x i32> %x, <4 x i32> %y)
76 ; CHECK-NEXT:  ret i32 %0
77 entry:
78   %0 = tail call i32 @llvm.arm.mve.vmldava.v4i32(i32 0, i32 1, i32 0, i32 0, <4 x i32> %x, <4 x i32> %y)
79   %1 = add nsw i32 %0, %z
80   ret i32 %1
83 define arm_aapcs_vfpcc i32 @test_vmlsdavaq_s16(i32 %z, <8 x i16> %x, <8 x i16> %y) {
84 ; CHECK-LABEL: @test_vmlsdavaq_s16(
85 ; CHECK-NEXT:  entry:
86 ; CHECK-NEXT:  %0 = call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 1, i32 0, i32 %z, <8 x i16> %x, <8 x i16> %y)
87 ; CHECK-NEXT:  ret i32 %0
88 entry:
89   %0 = tail call i32 @llvm.arm.mve.vmldava.v8i16(i32 0, i32 1, i32 0, i32 0, <8 x i16> %x, <8 x i16> %y)
90   %1 = add nsw i32 %0, %z
91   ret i32 %1
94 define arm_aapcs_vfpcc i32 @test_vmlsdavaq_s8(i32 %z, <16 x i8> %x, <16 x i8> %y) {
95 ; CHECK-LABEL: @test_vmlsdavaq_s8(
96 ; CHECK-NEXT:  entry:
97 ; CHECK-NEXT:  %0 = call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 1, i32 0, i32 %z, <16 x i8> %x, <16 x i8> %y)
98 ; CHECK-NEXT:  ret i32 %0
99 entry:
100   %0 = tail call i32 @llvm.arm.mve.vmldava.v16i8(i32 0, i32 1, i32 0, i32 0, <16 x i8> %x, <16 x i8> %y)
101   %1 = add nsw i32 %0, %z
102   ret i32 %1
105 declare i32 @llvm.arm.mve.vmldava.v4i32(i32, i32, i32, i32, <4 x i32>, <4 x i32>)
106 declare i32 @llvm.arm.mve.vmldava.v8i16(i32, i32, i32, i32, <8 x i16>, <8 x i16>)
107 declare i32 @llvm.arm.mve.vmldava.v16i8(i32, i32, i32, i32, <16 x i8>, <16 x i8>)