1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -instsimplify -S | FileCheck %s 3 4;----------------------------------------------------------------------------- 5; Simple test using scalar layout. 6;----------------------------------------------------------------------------- 7 8declare i32 @llvm.smul.fix.sat.i32(i32, i32, i32) 9 10define i32 @test_smul_fix_sat_i32_0() { 11; CHECK-LABEL: @test_smul_fix_sat_i32_0( 12; CHECK-NEXT: ret i32 536870912 13; 14 %r = call i32 @llvm.smul.fix.sat.i32(i32 1073741824, i32 1073741824, i32 31) ; 0.5 * 0.5 15 ret i32 %r 16} 17 18;----------------------------------------------------------------------------- 19; More extensive tests based on vectors (basically using the scalar fold 20; for each index). 21;----------------------------------------------------------------------------- 22 23declare <8 x i3> @llvm.smul.fix.sat.v8i3(<8 x i3>, <8 x i3>, i32) 24 25define <8 x i3> @test_smul_fix_sat_v8i3_0() { 26; CHECK-LABEL: @test_smul_fix_sat_v8i3_0( 27; CHECK-NEXT: ret <8 x i3> <i3 3, i3 3, i3 3, i3 3, i3 0, i3 -4, i3 -4, i3 -4> 28; 29 %r = call <8 x i3> @llvm.smul.fix.sat.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>, 32 i32 0) 33 ret <8 x i3> %r 34} 35 36define <8 x i3> @test_smul_fix_sat_v8i3_1() { 37; CHECK-LABEL: @test_smul_fix_sat_v8i3_1( 38; CHECK-NEXT: ret <8 x i3> <i3 3, i3 3, i3 3, i3 2, i3 0, i3 -2, i3 -4, i3 -4> 39; 40 %r = call <8 x i3> @llvm.smul.fix.sat.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>, 43 i32 1) 44 ret <8 x i3> %r 45} 46 47define <8 x i3> @test_smul_fix_sat_v8i3_2() { 48; CHECK-LABEL: @test_smul_fix_sat_v8i3_2( 49; CHECK-NEXT: ret <8 x i3> <i3 3, i3 3, i3 2, i3 1, i3 0, i3 -1, i3 -2, i3 -3> 50; 51 %r = call <8 x i3> @llvm.smul.fix.sat.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>, 54 i32 2) 55 ret <8 x i3> %r 56} 57 58define <8 x i3> @test_smul_fix_sat_v8i3_3() { 59; CHECK-LABEL: @test_smul_fix_sat_v8i3_3( 60; CHECK-NEXT: ret <8 x i3> <i3 3, i3 3, i3 2, i3 1, i3 0, i3 -1, i3 -2, i3 -3> 61; 62 %r = call <8 x i3> @llvm.smul.fix.sat.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>, 65 i32 0) 66 ret <8 x i3> %r 67} 68 69define <8 x i3> @test_smul_fix_sat_v8i3_4() { 70; CHECK-LABEL: @test_smul_fix_sat_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> 72; 73 %r = call <8 x i3> @llvm.smul.fix.sat.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>, 76 i32 1) 77 ret <8 x i3> %r 78} 79 80define <8 x i3> @test_smul_fix_sat_v8i3_5() { 81; CHECK-LABEL: @test_smul_fix_sat_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> 83; 84 %r = call <8 x i3> @llvm.smul.fix.sat.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>, 87 i32 2) 88 ret <8 x i3> %r 89} 90 91define <8 x i3> @test_smul_fix_sat_v8i3_6() { 92; CHECK-LABEL: @test_smul_fix_sat_v8i3_6( 93; CHECK-NEXT: ret <8 x i3> <i3 -4, i3 -4, i3 -4, i3 -3, i3 0, i3 3, i3 3, i3 3> 94; 95 %r = call <8 x i3> @llvm.smul.fix.sat.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>, 98 i32 0) 99 ret <8 x i3> %r 100} 101 102define <8 x i3> @test_smul_fix_sat_v8i3_7() { 103; CHECK-LABEL: @test_smul_fix_sat_v8i3_7( 104; CHECK-NEXT: ret <8 x i3> <i3 -4, i3 -4, i3 -3, i3 -2, i3 0, i3 1, i3 3, i3 3> 105; 106 %r = call <8 x i3> @llvm.smul.fix.sat.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>, 109 i32 1) 110 ret <8 x i3> %r 111} 112 113define <8 x i3> @test_smul_fix_sat_v8i3_8() { 114; CHECK-LABEL: @test_smul_fix_sat_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> 116; 117 %r = call <8 x i3> @llvm.smul.fix.sat.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>, 120 i32 2) 121 ret <8 x i3> %r 122} 123