diff options
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/Transforms/InstCombine/rem.ll | 15 | 
1 files changed, 15 insertions, 0 deletions
| diff --git a/llvm/test/Transforms/InstCombine/rem.ll b/llvm/test/Transforms/InstCombine/rem.ll index 808d51eba1d..2b49385b922 100644 --- a/llvm/test/Transforms/InstCombine/rem.ll +++ b/llvm/test/Transforms/InstCombine/rem.ll @@ -163,3 +163,18 @@ define i32 @test16(i32 %x, i32 %y) {  	%rem = urem i32 %x, %add  	ret i32 %rem  } + +define i32 @test17(i16 %x, i32 %y) { +; CHECK: @test17 +; CHECK-NEXT: [[AND:%.*]] = and i16 %x, 4 +; CHECK-NEXT: [[EXT:%.*]] = zext i16 [[AND]] to i32 +; CHECK-NEXT: [[SHL:%.*]] = shl nuw nsw i32 [[EXT]], 3 +; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[SHL]], 63 +; CHECK-NEXT: [[REM:%.*]] = and i32 [[XOR]], %y +; CHECK-NEXT: ret i32 [[REM]] +	%1 = and i16 %x, 4 +	%2 = icmp ne i16 %1, 0 +	%3 = select i1 %2, i32 32, i32 64 +	%4 = urem i32 %y, %3 +	ret i32 %4 +} | 

