diff options
Diffstat (limited to 'llvm/test/Transforms/InstCombine/select-divrem.ll')
-rw-r--r-- | llvm/test/Transforms/InstCombine/select-divrem.ll | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/select-divrem.ll b/llvm/test/Transforms/InstCombine/select-divrem.ll index a674f9c..7dff78e 100644 --- a/llvm/test/Transforms/InstCombine/select-divrem.ll +++ b/llvm/test/Transforms/InstCombine/select-divrem.ll @@ -322,6 +322,21 @@ define i8 @rem_euclid_non_const_pow2(i8 %0, i8 %1) { ret i8 %sel } +define i8 @rem_euclid_non_const_pow2_commuted(i8 %0, i8 %1) { +; CHECK-LABEL: @rem_euclid_non_const_pow2_commuted( +; CHECK-NEXT: [[NOTMASK:%.*]] = shl nsw i8 -1, [[TMP0:%.*]] +; CHECK-NEXT: [[TMP3:%.*]] = xor i8 [[NOTMASK]], -1 +; CHECK-NEXT: [[SEL:%.*]] = and i8 [[TMP1:%.*]], [[TMP3]] +; CHECK-NEXT: ret i8 [[SEL]] +; + %pow2 = shl i8 1, %0 + %rem = srem i8 %1, %pow2 + %cond = icmp slt i8 %rem, 0 + %add = add i8 %pow2, %rem + %sel = select i1 %cond, i8 %add, i8 %rem + ret i8 %sel +} + define i32 @rem_euclid_pow2_true_arm_folded(i32 %n) { ; CHECK-LABEL: @rem_euclid_pow2_true_arm_folded( ; CHECK-NEXT: [[RES:%.*]] = and i32 [[N:%.*]], 1 |