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 Eubanksdeclare i31 @llvm.ctpop.i31(i31 %val) 5486ed885SArthur Eubanksdeclare i32 @llvm.cttz.i32(i32 %val, i1) 6486ed885SArthur Eubanksdeclare i33 @llvm.ctlz.i33(i33 %val, i1) 7486ed885SArthur Eubanksdeclare <2 x i31> @llvm.ctpop.v2i31(<2 x i31> %val) 8486ed885SArthur Eubanksdeclare <2 x i32> @llvm.cttz.v2i32(<2 x i32> %val, i1) 9486ed885SArthur Eubanksdeclare <2 x i33> @llvm.ctlz.v2i33(<2 x i33> %val, i1) 10486ed885SArthur Eubanks 11486ed885SArthur Eubanksdefine i31 @ctpop_const() { 12486ed885SArthur Eubanks; CHECK-LABEL: @ctpop_const( 13486ed885SArthur Eubanks; CHECK-NEXT: ret i31 12 14486ed885SArthur Eubanks; 15486ed885SArthur Eubanks %x = call i31 @llvm.ctpop.i31(i31 12415124) 16486ed885SArthur Eubanks ret i31 %x 17486ed885SArthur Eubanks} 18486ed885SArthur Eubanks 19486ed885SArthur Eubanksdefine i32 @cttz_const() { 20486ed885SArthur Eubanks; CHECK-LABEL: @cttz_const( 21486ed885SArthur Eubanks; CHECK-NEXT: ret i32 1 22486ed885SArthur Eubanks; 23486ed885SArthur Eubanks %x = call i32 @llvm.cttz.i32(i32 87359874, i1 true) 24486ed885SArthur Eubanks ret i32 %x 25486ed885SArthur Eubanks} 26486ed885SArthur Eubanks 27486ed885SArthur Eubanksdefine i33 @ctlz_const() { 28486ed885SArthur Eubanks; CHECK-LABEL: @ctlz_const( 29486ed885SArthur Eubanks; CHECK-NEXT: ret i33 6 30486ed885SArthur Eubanks; 31486ed885SArthur Eubanks %x = call i33 @llvm.ctlz.i33(i33 87359874, i1 true) 32486ed885SArthur Eubanks ret i33 %x 33486ed885SArthur Eubanks} 34486ed885SArthur Eubanks 35486ed885SArthur Eubanksdefine i31 @ctpop_zero() { 36486ed885SArthur Eubanks; CHECK-LABEL: @ctpop_zero( 37486ed885SArthur Eubanks; CHECK-NEXT: ret i31 0 38486ed885SArthur Eubanks; 39486ed885SArthur Eubanks %x = call i31 @llvm.ctpop.i31(i31 0) 40486ed885SArthur Eubanks ret i31 %x 41486ed885SArthur Eubanks} 42486ed885SArthur Eubanks 43486ed885SArthur Eubanksdefine i32 @cttz_zero_defined() { 44486ed885SArthur Eubanks; CHECK-LABEL: @cttz_zero_defined( 45486ed885SArthur Eubanks; CHECK-NEXT: ret i32 32 46486ed885SArthur Eubanks; 47486ed885SArthur Eubanks %x = call i32 @llvm.cttz.i32(i32 0, i1 false) 48486ed885SArthur Eubanks ret i32 %x 49486ed885SArthur Eubanks} 50486ed885SArthur Eubanks 512e26633aSSanjay Pateldefine i32 @cttz_zero_is_poison() { 522e26633aSSanjay Patel; CHECK-LABEL: @cttz_zero_is_poison( 532e26633aSSanjay Patel; CHECK-NEXT: ret i32 poison 54486ed885SArthur Eubanks; 55486ed885SArthur Eubanks %x = call i32 @llvm.cttz.i32(i32 0, i1 true) 56486ed885SArthur Eubanks ret i32 %x 57486ed885SArthur Eubanks} 58486ed885SArthur Eubanks 59486ed885SArthur Eubanksdefine i33 @ctlz_zero_defined() { 60486ed885SArthur Eubanks; CHECK-LABEL: @ctlz_zero_defined( 61486ed885SArthur Eubanks; CHECK-NEXT: ret i33 33 62486ed885SArthur Eubanks; 63486ed885SArthur Eubanks %x = call i33 @llvm.ctlz.i33(i33 0, i1 false) 64486ed885SArthur Eubanks ret i33 %x 65486ed885SArthur Eubanks} 66486ed885SArthur Eubanks 672e26633aSSanjay Pateldefine i33 @ctlz_zero_is_poison() { 682e26633aSSanjay Patel; CHECK-LABEL: @ctlz_zero_is_poison( 692e26633aSSanjay Patel; CHECK-NEXT: ret i33 poison 70486ed885SArthur Eubanks; 71486ed885SArthur Eubanks %x = call i33 @llvm.ctlz.i33(i33 0, i1 true) 72486ed885SArthur Eubanks ret i33 %x 73486ed885SArthur Eubanks} 74486ed885SArthur Eubanks 75486ed885SArthur Eubanksdefine i31 @ctpop_undef() { 76486ed885SArthur Eubanks; CHECK-LABEL: @ctpop_undef( 77486ed885SArthur Eubanks; CHECK-NEXT: ret i31 0 78486ed885SArthur Eubanks; 79486ed885SArthur Eubanks %x = call i31 @llvm.ctpop.i31(i31 undef) 80486ed885SArthur Eubanks ret i31 %x 81486ed885SArthur Eubanks} 82486ed885SArthur Eubanks 83486ed885SArthur Eubanksdefine i32 @cttz_undef_defined() { 84486ed885SArthur Eubanks; CHECK-LABEL: @cttz_undef_defined( 85486ed885SArthur Eubanks; CHECK-NEXT: ret i32 0 86486ed885SArthur Eubanks; 87486ed885SArthur Eubanks %x = call i32 @llvm.cttz.i32(i32 undef, i1 false) 88486ed885SArthur Eubanks ret i32 %x 89486ed885SArthur Eubanks} 90486ed885SArthur Eubanks 912e26633aSSanjay Pateldefine i32 @cttz_undef_zero_is_poison() { 922e26633aSSanjay Patel; CHECK-LABEL: @cttz_undef_zero_is_poison( 932e26633aSSanjay Patel; CHECK-NEXT: ret i32 poison 94486ed885SArthur Eubanks; 95486ed885SArthur Eubanks %x = call i32 @llvm.cttz.i32(i32 undef, i1 true) 96486ed885SArthur Eubanks ret i32 %x 97486ed885SArthur Eubanks} 98486ed885SArthur Eubanks 99486ed885SArthur Eubanksdefine i33 @ctlz_undef_defined() { 100486ed885SArthur Eubanks; CHECK-LABEL: @ctlz_undef_defined( 101486ed885SArthur Eubanks; CHECK-NEXT: ret i33 0 102486ed885SArthur Eubanks; 103486ed885SArthur Eubanks %x = call i33 @llvm.ctlz.i33(i33 undef, i1 false) 104486ed885SArthur Eubanks ret i33 %x 105486ed885SArthur Eubanks} 106486ed885SArthur Eubanks 1072e26633aSSanjay Pateldefine i33 @ctlz_undef_zero_is_poison() { 1082e26633aSSanjay Patel; CHECK-LABEL: @ctlz_undef_zero_is_poison( 1092e26633aSSanjay Patel; CHECK-NEXT: ret i33 poison 110486ed885SArthur Eubanks; 111486ed885SArthur Eubanks %x = call i33 @llvm.ctlz.i33(i33 undef, i1 true) 112486ed885SArthur Eubanks ret i33 %x 113486ed885SArthur Eubanks} 114486ed885SArthur Eubanks 115486ed885SArthur Eubanksdefine <2 x i31> @ctpop_vector() { 116486ed885SArthur Eubanks; CHECK-LABEL: @ctpop_vector( 117486ed885SArthur Eubanks; CHECK-NEXT: ret <2 x i31> <i31 8, i31 1> 118486ed885SArthur Eubanks; 119486ed885SArthur Eubanks %x = call <2 x i31> @llvm.ctpop.v2i31(<2 x i31> <i31 255, i31 16>) 120486ed885SArthur Eubanks ret <2 x i31> %x 121486ed885SArthur Eubanks} 122486ed885SArthur Eubanks 123486ed885SArthur Eubanksdefine <2 x i31> @ctpop_vector_undef() { 124486ed885SArthur Eubanks; CHECK-LABEL: @ctpop_vector_undef( 125486ed885SArthur Eubanks; CHECK-NEXT: ret <2 x i31> zeroinitializer 126486ed885SArthur Eubanks; 127486ed885SArthur Eubanks %x = call <2 x i31> @llvm.ctpop.v2i31(<2 x i31> <i31 0, i31 undef>) 128486ed885SArthur Eubanks ret <2 x i31> %x 129486ed885SArthur Eubanks} 130486ed885SArthur Eubanks 131486ed885SArthur Eubanksdefine <2 x i32> @cttz_vector() { 132486ed885SArthur Eubanks; CHECK-LABEL: @cttz_vector( 133486ed885SArthur Eubanks; CHECK-NEXT: ret <2 x i32> <i32 0, i32 4> 134486ed885SArthur Eubanks; 135486ed885SArthur Eubanks %x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 255, i32 16>, i1 true) 136486ed885SArthur Eubanks ret <2 x i32> %x 137486ed885SArthur Eubanks} 138486ed885SArthur Eubanks 139486ed885SArthur Eubanksdefine <2 x i32> @cttz_vector_undef_defined() { 140486ed885SArthur Eubanks; CHECK-LABEL: @cttz_vector_undef_defined( 141486ed885SArthur Eubanks; CHECK-NEXT: ret <2 x i32> <i32 32, i32 0> 142486ed885SArthur Eubanks; 143486ed885SArthur Eubanks %x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 0, i32 undef>, i1 false) 144486ed885SArthur Eubanks ret <2 x i32> %x 145486ed885SArthur Eubanks} 146486ed885SArthur Eubanks 1472e26633aSSanjay Pateldefine <2 x i32> @cttz_vector_undef_zero_is_poison() { 1482e26633aSSanjay Patel; CHECK-LABEL: @cttz_vector_undef_zero_is_poison( 1492e26633aSSanjay Patel; CHECK-NEXT: ret <2 x i32> poison 150486ed885SArthur Eubanks; 151486ed885SArthur Eubanks %x = call <2 x i32> @llvm.cttz.v2i32(<2 x i32> <i32 0, i32 undef>, i1 true) 152486ed885SArthur Eubanks ret <2 x i32> %x 153486ed885SArthur Eubanks} 154486ed885SArthur Eubanks 155486ed885SArthur Eubanksdefine <2 x i33> @ctlz_vector() { 156486ed885SArthur Eubanks; CHECK-LABEL: @ctlz_vector( 157486ed885SArthur Eubanks; CHECK-NEXT: ret <2 x i33> <i33 25, i33 28> 158486ed885SArthur Eubanks; 159486ed885SArthur Eubanks %x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 255, i33 16>, i1 true) 160486ed885SArthur Eubanks ret <2 x i33> %x 161486ed885SArthur Eubanks} 162486ed885SArthur Eubanks 163486ed885SArthur Eubanksdefine <2 x i33> @ctlz_vector_undef_defined() { 164486ed885SArthur Eubanks; CHECK-LABEL: @ctlz_vector_undef_defined( 165486ed885SArthur Eubanks; CHECK-NEXT: ret <2 x i33> <i33 33, i33 0> 166486ed885SArthur Eubanks; 167486ed885SArthur Eubanks %x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 0, i33 undef>, i1 false) 168486ed885SArthur Eubanks ret <2 x i33> %x 169486ed885SArthur Eubanks} 170486ed885SArthur Eubanks 1712e26633aSSanjay Pateldefine <2 x i33> @ctlz_vector_undef_zero_is_poison() { 1722e26633aSSanjay Patel; CHECK-LABEL: @ctlz_vector_undef_zero_is_poison( 1732e26633aSSanjay Patel; CHECK-NEXT: ret <2 x i33> poison 174486ed885SArthur Eubanks; 175486ed885SArthur Eubanks %x = call <2 x i33> @llvm.ctlz.v2i33(<2 x i33> <i33 0, i33 undef>, i1 true) 176486ed885SArthur Eubanks ret <2 x i33> %x 177486ed885SArthur Eubanks} 178