xref: /llvm-project/llvm/test/Transforms/InstSimplify/ConstProp/smul-fix.ll (revision b280ee1dd7e9b36ae7aaa3953556e4b7a7f31a29)
1486ed885SArthur Eubanks; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*b280ee1dSBjorn Pettersson; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
3486ed885SArthur Eubanks
4486ed885SArthur Eubanks;-----------------------------------------------------------------------------
5486ed885SArthur Eubanks; Simple test using scalar layout.
6486ed885SArthur Eubanks;-----------------------------------------------------------------------------
7486ed885SArthur Eubanks
8486ed885SArthur Eubanksdeclare i32 @llvm.smul.fix.i32(i32, i32, i32)
9486ed885SArthur Eubanks
10486ed885SArthur Eubanksdefine i32 @test_smul_fix_i32_0() {
11486ed885SArthur Eubanks; CHECK-LABEL: @test_smul_fix_i32_0(
12486ed885SArthur Eubanks; CHECK-NEXT:    ret i32 536870912
13486ed885SArthur Eubanks;
14486ed885SArthur Eubanks  %r = call i32 @llvm.smul.fix.i32(i32 1073741824, i32 1073741824, i32 31) ; 0.5 * 0.5
15486ed885SArthur Eubanks  ret i32 %r
16486ed885SArthur Eubanks}
17486ed885SArthur Eubanks
183638bdfbSBjorn Petterssondefine i32 @test_smul_fix_i32_undef_x() {
193638bdfbSBjorn Pettersson; CHECK-LABEL: @test_smul_fix_i32_undef_x(
203638bdfbSBjorn Pettersson; CHECK-NEXT:    ret i32 0
213638bdfbSBjorn Pettersson;
223638bdfbSBjorn Pettersson  %r = call i32 @llvm.smul.fix.i32(i32 undef, i32 1073741824, i32 31) ; undef * 0.5
233638bdfbSBjorn Pettersson  ret i32 %r
243638bdfbSBjorn Pettersson}
253638bdfbSBjorn Pettersson
263638bdfbSBjorn Petterssondefine i32 @test_smul_fix_i32_x_undef() {
273638bdfbSBjorn Pettersson; CHECK-LABEL: @test_smul_fix_i32_x_undef(
283638bdfbSBjorn Pettersson; CHECK-NEXT:    ret i32 0
293638bdfbSBjorn Pettersson;
303638bdfbSBjorn Pettersson  %r = call i32 @llvm.smul.fix.i32(i32 1073741824, i32 undef, i32 31)
313638bdfbSBjorn Pettersson  ret i32 %r
323638bdfbSBjorn Pettersson}
333638bdfbSBjorn Pettersson
343638bdfbSBjorn Pettersson
35486ed885SArthur Eubanks;-----------------------------------------------------------------------------
36486ed885SArthur Eubanks; More extensive tests based on vectors (basically using the scalar fold
37486ed885SArthur Eubanks; for each index).
38486ed885SArthur Eubanks;-----------------------------------------------------------------------------
39486ed885SArthur Eubanks
40486ed885SArthur Eubanksdeclare <8 x i3> @llvm.smul.fix.v8i3(<8 x i3>, <8 x i3>, i32)
41486ed885SArthur Eubanks
42486ed885SArthur Eubanksdefine <8 x i3> @test_smul_fix_v8i3_0() {
43486ed885SArthur Eubanks; CHECK-LABEL: @test_smul_fix_v8i3_0(
44486ed885SArthur Eubanks; CHECK-NEXT:    ret <8 x i3> <i3 0, i3 -4, i3 0, i3 -4, i3 0, i3 -4, i3 0, i3 -4>
45486ed885SArthur Eubanks;
46486ed885SArthur Eubanks  %r = call <8 x i3> @llvm.smul.fix.v8i3(
47486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
48486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4>,
49486ed885SArthur Eubanks  i32 0)
50486ed885SArthur Eubanks  ret <8 x i3> %r
51486ed885SArthur Eubanks}
52486ed885SArthur Eubanks
53486ed885SArthur Eubanksdefine <8 x i3> @test_smul_fix_v8i3_1() {
54486ed885SArthur Eubanks; CHECK-LABEL: @test_smul_fix_v8i3_1(
55486ed885SArthur Eubanks; CHECK-NEXT:    ret <8 x i3> <i3 0, i3 -2, i3 -4, i3 2, i3 0, i3 -2, i3 -4, i3 2>
56486ed885SArthur Eubanks;
57486ed885SArthur Eubanks  %r = call <8 x i3> @llvm.smul.fix.v8i3(
58486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
59486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4>,
60486ed885SArthur Eubanks  i32 1)
61486ed885SArthur Eubanks  ret <8 x i3> %r
62486ed885SArthur Eubanks}
63486ed885SArthur Eubanks
64486ed885SArthur Eubanksdefine <8 x i3> @test_smul_fix_v8i3_2() {
65486ed885SArthur Eubanks; CHECK-LABEL: @test_smul_fix_v8i3_2(
66486ed885SArthur Eubanks; CHECK-NEXT:    ret <8 x i3> <i3 -4, i3 3, i3 2, i3 1, i3 0, i3 -1, i3 -2, i3 -3>
67486ed885SArthur Eubanks;
68486ed885SArthur Eubanks  %r = call <8 x i3> @llvm.smul.fix.v8i3(
69486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
70486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4>,
71486ed885SArthur Eubanks  i32 2)
72486ed885SArthur Eubanks  ret <8 x i3> %r
73486ed885SArthur Eubanks}
74486ed885SArthur Eubanks
75486ed885SArthur Eubanksdefine <8 x i3> @test_smul_fix_v8i3_3() {
76486ed885SArthur Eubanks; CHECK-LABEL: @test_smul_fix_v8i3_3(
77486ed885SArthur Eubanks; CHECK-NEXT:    ret <8 x i3> <i3 -4, i3 3, i3 2, i3 1, i3 0, i3 -1, i3 -2, i3 -3>
78486ed885SArthur Eubanks;
79486ed885SArthur Eubanks  %r = call <8 x i3> @llvm.smul.fix.v8i3(
80486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
81486ed885SArthur Eubanks  <8 x i3> <i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1>,
82486ed885SArthur Eubanks  i32 0)
83486ed885SArthur Eubanks  ret <8 x i3> %r
84486ed885SArthur Eubanks}
85486ed885SArthur Eubanks
86486ed885SArthur Eubanksdefine <8 x i3> @test_smul_fix_v8i3_4() {
87486ed885SArthur Eubanks; CHECK-LABEL: @test_smul_fix_v8i3_4(
88486ed885SArthur Eubanks; CHECK-NEXT:    ret <8 x i3> <i3 2, i3 1, i3 1, i3 0, i3 0, i3 -1, i3 -1, i3 -2>
89486ed885SArthur Eubanks;
90486ed885SArthur Eubanks  %r = call <8 x i3> @llvm.smul.fix.v8i3(
91486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
92486ed885SArthur Eubanks  <8 x i3> <i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1>,
93486ed885SArthur Eubanks  i32 1)
94486ed885SArthur Eubanks  ret <8 x i3> %r
95486ed885SArthur Eubanks}
96486ed885SArthur Eubanks
97486ed885SArthur Eubanksdefine <8 x i3> @test_smul_fix_v8i3_5() {
98486ed885SArthur Eubanks; CHECK-LABEL: @test_smul_fix_v8i3_5(
99486ed885SArthur Eubanks; CHECK-NEXT:    ret <8 x i3> <i3 1, i3 0, i3 0, i3 0, i3 0, i3 -1, i3 -1, i3 -1>
100486ed885SArthur Eubanks;
101486ed885SArthur Eubanks  %r = call <8 x i3> @llvm.smul.fix.v8i3(
102486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
103486ed885SArthur Eubanks  <8 x i3> <i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1>,
104486ed885SArthur Eubanks  i32 2)
105486ed885SArthur Eubanks  ret <8 x i3> %r
106486ed885SArthur Eubanks}
107486ed885SArthur Eubanks
108486ed885SArthur Eubanksdefine <8 x i3> @test_smul_fix_v8i3_6() {
109486ed885SArthur Eubanks; CHECK-LABEL: @test_smul_fix_v8i3_6(
110486ed885SArthur Eubanks; CHECK-NEXT:    ret <8 x i3> <i3 -4, i3 -1, i3 2, i3 -3, i3 0, i3 3, i3 -2, i3 1>
111486ed885SArthur Eubanks;
112486ed885SArthur Eubanks  %r = call <8 x i3> @llvm.smul.fix.v8i3(
113486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
114486ed885SArthur Eubanks  <8 x i3> <i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3>,
115486ed885SArthur Eubanks  i32 0)
116486ed885SArthur Eubanks  ret <8 x i3> %r
117486ed885SArthur Eubanks}
118486ed885SArthur Eubanks
119486ed885SArthur Eubanksdefine <8 x i3> @test_smul_fix_v8i3_7() {
120486ed885SArthur Eubanks; CHECK-LABEL: @test_smul_fix_v8i3_7(
121486ed885SArthur Eubanks; CHECK-NEXT:    ret <8 x i3> <i3 2, i3 3, i3 -3, i3 -2, i3 0, i3 1, i3 3, i3 -4>
122486ed885SArthur Eubanks;
123486ed885SArthur Eubanks  %r = call <8 x i3> @llvm.smul.fix.v8i3(
124486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
125486ed885SArthur Eubanks  <8 x i3> <i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3>,
126486ed885SArthur Eubanks  i32 1)
127486ed885SArthur Eubanks  ret <8 x i3> %r
128486ed885SArthur Eubanks}
129486ed885SArthur Eubanks
130486ed885SArthur Eubanksdefine <8 x i3> @test_smul_fix_v8i3_8() {
131486ed885SArthur Eubanks; CHECK-LABEL: @test_smul_fix_v8i3_8(
132486ed885SArthur Eubanks; CHECK-NEXT:    ret <8 x i3> <i3 -3, i3 -3, i3 -2, i3 -1, i3 0, i3 0, i3 1, i3 2>
133486ed885SArthur Eubanks;
134486ed885SArthur Eubanks  %r = call <8 x i3> @llvm.smul.fix.v8i3(
135486ed885SArthur Eubanks  <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
136486ed885SArthur Eubanks  <8 x i3> <i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3>,
137486ed885SArthur Eubanks  i32 2)
138486ed885SArthur Eubanks  ret <8 x i3> %r
139486ed885SArthur Eubanks}
1403638bdfbSBjorn Pettersson
1413638bdfbSBjorn Petterssondefine <8 x i3> @test_smul_fix_v8i3_9() {
1423638bdfbSBjorn Pettersson; CHECK-LABEL: @test_smul_fix_v8i3_9(
1433638bdfbSBjorn Pettersson; CHECK-NEXT:    ret <8 x i3> <i3 0, i3 0, i3 poison, i3 poison, i3 1, i3 1, i3 1, i3 1>
1443638bdfbSBjorn Pettersson;
1453638bdfbSBjorn Pettersson  %r = call <8 x i3> @llvm.smul.fix.v8i3(
1463638bdfbSBjorn Pettersson  <8 x i3> <i3 2, i3 undef, i3 2, i3 poison, i3 2, i3 2, i3 2, i3 2>,
1473638bdfbSBjorn Pettersson  <8 x i3> <i3 undef, i3 2, i3 poison, i3 2, i3 2, i3 2, i3 2, i3 2>,
1483638bdfbSBjorn Pettersson  i32 2)
1493638bdfbSBjorn Pettersson  ret <8 x i3> %r
1503638bdfbSBjorn Pettersson}
151