1d781df20SRamkumar Ramachandra; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2d781df20SRamkumar Ramachandra; RUN: opt < %s -passes=instcombine -S | FileCheck %s 3d781df20SRamkumar Ramachandra 4d781df20SRamkumar Ramachandradefine i8 @urem_low_bits_know(i8 %xx, i8 %yy) { 5d781df20SRamkumar Ramachandra; CHECK-LABEL: @urem_low_bits_know( 6d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 2 7d781df20SRamkumar Ramachandra; 8d781df20SRamkumar Ramachandra %x = or i8 %xx, 2 9d781df20SRamkumar Ramachandra %y = and i8 %yy, -4 10d781df20SRamkumar Ramachandra %rem = urem i8 %x, %y 11d781df20SRamkumar Ramachandra %r = and i8 %rem, 2 12d781df20SRamkumar Ramachandra ret i8 %r 13d781df20SRamkumar Ramachandra} 14d781df20SRamkumar Ramachandra 15d781df20SRamkumar Ramachandradefine i8 @urem_high_bits_know(i8 %xx, i8 %yy) { 16d781df20SRamkumar Ramachandra; CHECK-LABEL: @urem_high_bits_know( 17d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 0 18d781df20SRamkumar Ramachandra; 19d781df20SRamkumar Ramachandra %x = and i8 %xx, 2 20d781df20SRamkumar Ramachandra %y = and i8 %yy, -4 21d781df20SRamkumar Ramachandra %rem = urem i8 %x, %y 22d781df20SRamkumar Ramachandra %r = and i8 %rem, 8 23d781df20SRamkumar Ramachandra ret i8 %r 24d781df20SRamkumar Ramachandra} 25d781df20SRamkumar Ramachandra 26d781df20SRamkumar Ramachandradefine i8 @urem_low_bits_know2(i8 %xx, i8 %yy) { 27d781df20SRamkumar Ramachandra; CHECK-LABEL: @urem_low_bits_know2( 28d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 2 29d781df20SRamkumar Ramachandra; 30d781df20SRamkumar Ramachandra %xo = or i8 %xx, 2 31d781df20SRamkumar Ramachandra %x = and i8 %xo, 254 32d781df20SRamkumar Ramachandra %y = and i8 %yy, -4 33d781df20SRamkumar Ramachandra %rem = urem i8 %x, %y 34d781df20SRamkumar Ramachandra %r = and i8 %rem, 3 35d781df20SRamkumar Ramachandra ret i8 %r 36d781df20SRamkumar Ramachandra} 37d781df20SRamkumar Ramachandra 38d781df20SRamkumar Ramachandradefine i8 @urem_todo_low_bits_partially_know_should_fold_out_urem(i8 %xx, i8 %yy) { 39d781df20SRamkumar Ramachandra; CHECK-LABEL: @urem_todo_low_bits_partially_know_should_fold_out_urem( 40d781df20SRamkumar Ramachandra; CHECK-NEXT: [[X:%.*]] = or i8 [[XX:%.*]], 2 41d781df20SRamkumar Ramachandra; CHECK-NEXT: [[Y:%.*]] = and i8 [[YY:%.*]], -4 42d781df20SRamkumar Ramachandra; CHECK-NEXT: [[REM:%.*]] = urem i8 [[X]], [[Y]] 43d781df20SRamkumar Ramachandra; CHECK-NEXT: [[R:%.*]] = and i8 [[REM]], 3 44d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 [[R]] 45d781df20SRamkumar Ramachandra; 46d781df20SRamkumar Ramachandra %x = or i8 %xx, 2 47d781df20SRamkumar Ramachandra %y = and i8 %yy, -4 48d781df20SRamkumar Ramachandra %rem = urem i8 %x, %y 49d781df20SRamkumar Ramachandra %r = and i8 %rem, 3 50d781df20SRamkumar Ramachandra ret i8 %r 51d781df20SRamkumar Ramachandra} 52d781df20SRamkumar Ramachandra 53d781df20SRamkumar Ramachandradefine i8 @urem_fail_low_bits_unknown(i8 %xx, i8 %yy) { 54d781df20SRamkumar Ramachandra; CHECK-LABEL: @urem_fail_low_bits_unknown( 55d781df20SRamkumar Ramachandra; CHECK-NEXT: [[X:%.*]] = or i8 [[XX:%.*]], 4 56d781df20SRamkumar Ramachandra; CHECK-NEXT: [[Y:%.*]] = and i8 [[YY:%.*]], -4 57d781df20SRamkumar Ramachandra; CHECK-NEXT: [[REM:%.*]] = urem i8 [[X]], [[Y]] 58d781df20SRamkumar Ramachandra; CHECK-NEXT: [[R:%.*]] = and i8 [[REM]], 2 59d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 [[R]] 60d781df20SRamkumar Ramachandra; 61d781df20SRamkumar Ramachandra %x = or i8 %xx, 4 62d781df20SRamkumar Ramachandra %y = and i8 %yy, -4 63d781df20SRamkumar Ramachandra %rem = urem i8 %x, %y 64d781df20SRamkumar Ramachandra %r = and i8 %rem, 2 65d781df20SRamkumar Ramachandra ret i8 %r 66d781df20SRamkumar Ramachandra} 67d781df20SRamkumar Ramachandra 68d781df20SRamkumar Ramachandradefine i8 @urem_fail_low_bits_unknown2(i8 %xx, i8 %yy) { 69d781df20SRamkumar Ramachandra; CHECK-LABEL: @urem_fail_low_bits_unknown2( 70d781df20SRamkumar Ramachandra; CHECK-NEXT: [[X:%.*]] = or i8 [[XX:%.*]], 1 71d781df20SRamkumar Ramachandra; CHECK-NEXT: [[Y:%.*]] = and i8 [[YY:%.*]], -5 72d781df20SRamkumar Ramachandra; CHECK-NEXT: [[REM:%.*]] = urem i8 [[X]], [[Y]] 73d781df20SRamkumar Ramachandra; CHECK-NEXT: [[R:%.*]] = and i8 [[REM]], 2 74d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 [[R]] 75d781df20SRamkumar Ramachandra; 76d781df20SRamkumar Ramachandra %x = or i8 %xx, 1 77d781df20SRamkumar Ramachandra %y = and i8 %yy, -5 78d781df20SRamkumar Ramachandra %rem = urem i8 %x, %y 79d781df20SRamkumar Ramachandra %r = and i8 %rem, 2 80d781df20SRamkumar Ramachandra ret i8 %r 81d781df20SRamkumar Ramachandra} 82d781df20SRamkumar Ramachandra 83d781df20SRamkumar Ramachandradefine i8 @srem_low_bits_know(i8 %xx, i8 %yy) { 84d781df20SRamkumar Ramachandra; CHECK-LABEL: @srem_low_bits_know( 85d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 2 86d781df20SRamkumar Ramachandra; 87d781df20SRamkumar Ramachandra %x = or i8 %xx, 10 88d781df20SRamkumar Ramachandra %y = and i8 %yy, -4 89d781df20SRamkumar Ramachandra %rem = srem i8 %x, %y 90d781df20SRamkumar Ramachandra %r = and i8 %rem, 2 91d781df20SRamkumar Ramachandra ret i8 %r 92d781df20SRamkumar Ramachandra} 93d781df20SRamkumar Ramachandra 94d781df20SRamkumar Ramachandradefine i8 @srem_low_bits_know2(i8 %xx, i8 %yy) { 95d781df20SRamkumar Ramachandra; CHECK-LABEL: @srem_low_bits_know2( 96d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 1 97d781df20SRamkumar Ramachandra; 98d781df20SRamkumar Ramachandra %x = or i8 %xx, 1 99d781df20SRamkumar Ramachandra %y = and i8 %yy, -2 100d781df20SRamkumar Ramachandra %rem = srem i8 %x, %y 101d781df20SRamkumar Ramachandra %r = and i8 %rem, 1 102d781df20SRamkumar Ramachandra ret i8 %r 103d781df20SRamkumar Ramachandra} 104d781df20SRamkumar Ramachandra 105d781df20SRamkumar Ramachandradefine i8 @srem_high_bits_know(i8 %xx, i8 %yy) { 106d781df20SRamkumar Ramachandra; CHECK-LABEL: @srem_high_bits_know( 107*3fee3e83SRamkumar Ramachandra; CHECK-NEXT: ret i8 -2 108d781df20SRamkumar Ramachandra; 109d781df20SRamkumar Ramachandra %x = or i8 %xx, -2 110d781df20SRamkumar Ramachandra %y = and i8 %yy, -4 111d781df20SRamkumar Ramachandra %rem = srem i8 %x, %y 112d781df20SRamkumar Ramachandra %r = and i8 %rem, -2 113d781df20SRamkumar Ramachandra ret i8 %r 114d781df20SRamkumar Ramachandra} 115d781df20SRamkumar Ramachandra 116d781df20SRamkumar Ramachandradefine i8 @srem_high_bits_know2(i8 %xx, i8 %yy) { 117d781df20SRamkumar Ramachandra; CHECK-LABEL: @srem_high_bits_know2( 118*3fee3e83SRamkumar Ramachandra; CHECK-NEXT: ret i8 0 119d781df20SRamkumar Ramachandra; 120d781df20SRamkumar Ramachandra %x = and i8 %xx, 13 121d781df20SRamkumar Ramachandra %y = or i8 %yy, -4 122d781df20SRamkumar Ramachandra %rem = srem i8 %x, %y 123d781df20SRamkumar Ramachandra %r = and i8 %rem, 8 124d781df20SRamkumar Ramachandra ret i8 %r 125d781df20SRamkumar Ramachandra} 126d781df20SRamkumar Ramachandra 127d781df20SRamkumar Ramachandradefine i8 @srem_high_bits_know3(i8 %xx, i8 %yy) { 128d781df20SRamkumar Ramachandra; CHECK-LABEL: @srem_high_bits_know3( 129*3fee3e83SRamkumar Ramachandra; CHECK-NEXT: ret i8 8 130d781df20SRamkumar Ramachandra; 131d781df20SRamkumar Ramachandra %x = or i8 %xx, -13 132d781df20SRamkumar Ramachandra %y = and i8 %yy, 4 133d781df20SRamkumar Ramachandra %rem = srem i8 %x, %y 134d781df20SRamkumar Ramachandra %r = and i8 %rem, 8 135d781df20SRamkumar Ramachandra ret i8 %r 136d781df20SRamkumar Ramachandra} 137d781df20SRamkumar Ramachandra 138d781df20SRamkumar Ramachandradefine i8 @srem_high_bits_know4(i8 %xx, i8 %yy) { 139d781df20SRamkumar Ramachandra; CHECK-LABEL: @srem_high_bits_know4( 140d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 0 141d781df20SRamkumar Ramachandra; 142d781df20SRamkumar Ramachandra %x = and i8 %xx, 4 143d781df20SRamkumar Ramachandra %y = or i8 %yy, -13 144d781df20SRamkumar Ramachandra %rem = srem i8 %x, %y 145d781df20SRamkumar Ramachandra %r = and i8 %rem, 8 146d781df20SRamkumar Ramachandra ret i8 %r 147d781df20SRamkumar Ramachandra} 148d781df20SRamkumar Ramachandra 149d781df20SRamkumar Ramachandradefine i8 @srem_high_bits_know5(i8 %xx, i8 %yy) { 150d781df20SRamkumar Ramachandra; CHECK-LABEL: @srem_high_bits_know5( 151d781df20SRamkumar Ramachandra; CHECK-NEXT: [[X:%.*]] = and i8 [[XX:%.*]], 2 152d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 [[X]] 153d781df20SRamkumar Ramachandra; 154d781df20SRamkumar Ramachandra %x = and i8 %xx, 2 155d781df20SRamkumar Ramachandra %y = and i8 %yy, 4 156d781df20SRamkumar Ramachandra %rem = srem i8 %x, %y 157d781df20SRamkumar Ramachandra %r = and i8 %rem, 2 158d781df20SRamkumar Ramachandra ret i8 %r 159d781df20SRamkumar Ramachandra} 160d781df20SRamkumar Ramachandra 161d781df20SRamkumar Ramachandradefine i8 @srem_todo_low_bits_partially_know_should_fold_out_srem(i8 %xx, i8 %yy) { 162d781df20SRamkumar Ramachandra; CHECK-LABEL: @srem_todo_low_bits_partially_know_should_fold_out_srem( 163d781df20SRamkumar Ramachandra; CHECK-NEXT: [[X:%.*]] = or i8 [[XX:%.*]], 10 164d781df20SRamkumar Ramachandra; CHECK-NEXT: [[Y:%.*]] = and i8 [[YY:%.*]], -4 165d781df20SRamkumar Ramachandra; CHECK-NEXT: [[REM:%.*]] = srem i8 [[X]], [[Y]] 166d781df20SRamkumar Ramachandra; CHECK-NEXT: [[R:%.*]] = and i8 [[REM]], 3 167d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 [[R]] 168d781df20SRamkumar Ramachandra; 169d781df20SRamkumar Ramachandra %x = or i8 %xx, 10 170d781df20SRamkumar Ramachandra %y = and i8 %yy, -4 171d781df20SRamkumar Ramachandra %rem = srem i8 %x, %y 172d781df20SRamkumar Ramachandra %r = and i8 %rem, 3 173d781df20SRamkumar Ramachandra ret i8 %r 174d781df20SRamkumar Ramachandra} 175d781df20SRamkumar Ramachandra 176d781df20SRamkumar Ramachandradefine i8 @srem_fail_low_bits_unknown(i8 %xx, i8 %yy) { 177d781df20SRamkumar Ramachandra; CHECK-LABEL: @srem_fail_low_bits_unknown( 178d781df20SRamkumar Ramachandra; CHECK-NEXT: [[X:%.*]] = or i8 [[XX:%.*]], 4 179d781df20SRamkumar Ramachandra; CHECK-NEXT: [[Y:%.*]] = and i8 [[YY:%.*]], -4 180d781df20SRamkumar Ramachandra; CHECK-NEXT: [[REM:%.*]] = srem i8 [[X]], [[Y]] 181d781df20SRamkumar Ramachandra; CHECK-NEXT: [[R:%.*]] = and i8 [[REM]], 2 182d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 [[R]] 183d781df20SRamkumar Ramachandra; 184d781df20SRamkumar Ramachandra %x = or i8 %xx, 4 185d781df20SRamkumar Ramachandra %y = and i8 %yy, -4 186d781df20SRamkumar Ramachandra %rem = srem i8 %x, %y 187d781df20SRamkumar Ramachandra %r = and i8 %rem, 2 188d781df20SRamkumar Ramachandra ret i8 %r 189d781df20SRamkumar Ramachandra} 190d781df20SRamkumar Ramachandra 191d781df20SRamkumar Ramachandradefine i8 @srem_fail_irrelivent_bits_known(i8 %xx, i8 %yy) { 192d781df20SRamkumar Ramachandra; CHECK-LABEL: @srem_fail_irrelivent_bits_known( 193d781df20SRamkumar Ramachandra; CHECK-NEXT: [[X:%.*]] = or i8 [[XX:%.*]], 3 194d781df20SRamkumar Ramachandra; CHECK-NEXT: [[Y:%.*]] = and i8 [[YY:%.*]], -6 195d781df20SRamkumar Ramachandra; CHECK-NEXT: [[REM:%.*]] = srem i8 [[X]], [[Y]] 196d781df20SRamkumar Ramachandra; CHECK-NEXT: [[R:%.*]] = and i8 [[REM]], 2 197d781df20SRamkumar Ramachandra; CHECK-NEXT: ret i8 [[R]] 198d781df20SRamkumar Ramachandra; 199d781df20SRamkumar Ramachandra %x = or i8 %xx, 3 200d781df20SRamkumar Ramachandra %y = and i8 %yy, -6 201d781df20SRamkumar Ramachandra %rem = srem i8 %x, %y 202d781df20SRamkumar Ramachandra %r = and i8 %rem, 2 203d781df20SRamkumar Ramachandra ret i8 %r 204d781df20SRamkumar Ramachandra} 205