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