1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -constprop -S | FileCheck %s
4 ;-----------------------------------------------------------------------------
5 ; Simple test using scalar layout.
6 ;-----------------------------------------------------------------------------
8 declare i32 @llvm.smul.fix.i32(i32, i32, i32)
10 define i32 @test_smul_fix_i32_0() {
11 ; CHECK-LABEL: @test_smul_fix_i32_0(
12 ; CHECK-NEXT: ret i32 536870912
14 %r = call i32 @llvm.smul.fix.i32(i32 1073741824, i32 1073741824, i32 31) ; 0.5 * 0.5
18 ;-----------------------------------------------------------------------------
19 ; More extensive tests based on vectors (basically using the scalar fold
21 ;-----------------------------------------------------------------------------
23 declare <8 x i3> @llvm.smul.fix.v8i3(<8 x i3>, <8 x i3>, i32)
25 define <8 x i3> @test_smul_fix_v8i3_0() {
26 ; CHECK-LABEL: @test_smul_fix_v8i3_0(
27 ; CHECK-NEXT: ret <8 x i3> <i3 0, i3 -4, i3 0, i3 -4, i3 0, i3 -4, i3 0, i3 -4>
29 %r = call <8 x i3> @llvm.smul.fix.v8i3(
30 <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
31 <8 x i3> <i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4>,
36 define <8 x i3> @test_smul_fix_v8i3_1() {
37 ; CHECK-LABEL: @test_smul_fix_v8i3_1(
38 ; CHECK-NEXT: ret <8 x i3> <i3 0, i3 -2, i3 -4, i3 2, i3 0, i3 -2, i3 -4, i3 2>
40 %r = call <8 x i3> @llvm.smul.fix.v8i3(
41 <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
42 <8 x i3> <i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4>,
47 define <8 x i3> @test_smul_fix_v8i3_2() {
48 ; CHECK-LABEL: @test_smul_fix_v8i3_2(
49 ; CHECK-NEXT: ret <8 x i3> <i3 -4, i3 3, i3 2, i3 1, i3 0, i3 -1, i3 -2, i3 -3>
51 %r = call <8 x i3> @llvm.smul.fix.v8i3(
52 <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
53 <8 x i3> <i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4, i3 -4>,
58 define <8 x i3> @test_smul_fix_v8i3_3() {
59 ; CHECK-LABEL: @test_smul_fix_v8i3_3(
60 ; CHECK-NEXT: ret <8 x i3> <i3 -4, i3 3, i3 2, i3 1, i3 0, i3 -1, i3 -2, i3 -3>
62 %r = call <8 x i3> @llvm.smul.fix.v8i3(
63 <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
64 <8 x i3> <i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1>,
69 define <8 x i3> @test_smul_fix_v8i3_4() {
70 ; CHECK-LABEL: @test_smul_fix_v8i3_4(
71 ; CHECK-NEXT: ret <8 x i3> <i3 2, i3 1, i3 1, i3 0, i3 0, i3 -1, i3 -1, i3 -2>
73 %r = call <8 x i3> @llvm.smul.fix.v8i3(
74 <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
75 <8 x i3> <i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1>,
80 define <8 x i3> @test_smul_fix_v8i3_5() {
81 ; CHECK-LABEL: @test_smul_fix_v8i3_5(
82 ; CHECK-NEXT: ret <8 x i3> <i3 1, i3 0, i3 0, i3 0, i3 0, i3 -1, i3 -1, i3 -1>
84 %r = call <8 x i3> @llvm.smul.fix.v8i3(
85 <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
86 <8 x i3> <i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1, i3 -1>,
91 define <8 x i3> @test_smul_fix_v8i3_6() {
92 ; CHECK-LABEL: @test_smul_fix_v8i3_6(
93 ; CHECK-NEXT: ret <8 x i3> <i3 -4, i3 -1, i3 2, i3 -3, i3 0, i3 3, i3 -2, i3 1>
95 %r = call <8 x i3> @llvm.smul.fix.v8i3(
96 <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
97 <8 x i3> <i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3>,
102 define <8 x i3> @test_smul_fix_v8i3_7() {
103 ; CHECK-LABEL: @test_smul_fix_v8i3_7(
104 ; CHECK-NEXT: ret <8 x i3> <i3 2, i3 3, i3 -3, i3 -2, i3 0, i3 1, i3 3, i3 -4>
106 %r = call <8 x i3> @llvm.smul.fix.v8i3(
107 <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
108 <8 x i3> <i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3>,
113 define <8 x i3> @test_smul_fix_v8i3_8() {
114 ; CHECK-LABEL: @test_smul_fix_v8i3_8(
115 ; CHECK-NEXT: ret <8 x i3> <i3 -3, i3 -3, i3 -2, i3 -1, i3 0, i3 0, i3 1, i3 2>
117 %r = call <8 x i3> @llvm.smul.fix.v8i3(
118 <8 x i3> <i3 -4, i3 -3, i3 -2, i3 -1, i3 0, i3 1, i3 2, i3 3>,
119 <8 x i3> <i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3, i3 3>,