diff options
author | Nikita Popov <npopov@redhat.com> | 2023-08-07 17:00:15 +0200 |
---|---|---|
committer | Nikita Popov <npopov@redhat.com> | 2023-08-07 17:00:50 +0200 |
commit | 95cd6aedc152d9628a3f1404e18ec39989bc7ff2 (patch) | |
tree | 562ac0de8fa2855be938f224dac48f64c930426e | |
parent | 47fe3b3b9a2649aba2ccbab91e530fbd247f8280 (diff) | |
download | llvm-95cd6aedc152d9628a3f1404e18ec39989bc7ff2.zip llvm-95cd6aedc152d9628a3f1404e18ec39989bc7ff2.tar.gz llvm-95cd6aedc152d9628a3f1404e18ec39989bc7ff2.tar.bz2 |
[InstCombine] Add tests for non-zero pow2 of shl with nowrap flags (NFC)
-rw-r--r-- | llvm/test/Transforms/InstCombine/icmp.ll | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/icmp.ll b/llvm/test/Transforms/InstCombine/icmp.ll index 7fd7b86..b0fcdc5 100644 --- a/llvm/test/Transforms/InstCombine/icmp.ll +++ b/llvm/test/Transforms/InstCombine/icmp.ll @@ -1868,6 +1868,51 @@ define i1 @icmp_and_shl_neg_ne_0(i32 %A, i32 %B) { ret i1 %cmp } +define i1 @icmp_and_shl_neg_ne_0_shl2_no_flags(i32 %A, i32 %B) { +; CHECK-LABEL: @icmp_and_shl_neg_ne_0_shl2_no_flags( +; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[A:%.*]], -1 +; CHECK-NEXT: [[SHL:%.*]] = shl i32 2, [[B:%.*]] +; CHECK-NEXT: [[AND:%.*]] = and i32 [[SHL]], [[NEG]] +; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[AND]], 0 +; CHECK-NEXT: ret i1 [[CMP]] +; + %neg = xor i32 %A, -1 + %shl = shl i32 2, %B + %and = and i32 %shl, %neg + %cmp = icmp ne i32 %and, 0 + ret i1 %cmp +} + +define i1 @icmp_and_shl_neg_ne_0_shl2_nuw(i32 %A, i32 %B) { +; CHECK-LABEL: @icmp_and_shl_neg_ne_0_shl2_nuw( +; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[A:%.*]], -1 +; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 2, [[B:%.*]] +; CHECK-NEXT: [[AND:%.*]] = and i32 [[SHL]], [[NEG]] +; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[AND]], 0 +; CHECK-NEXT: ret i1 [[CMP]] +; + %neg = xor i32 %A, -1 + %shl = shl nuw i32 2, %B + %and = and i32 %shl, %neg + %cmp = icmp ne i32 %and, 0 + ret i1 %cmp +} + +define i1 @icmp_and_shl_neg_ne_0_shl2_nsw(i32 %A, i32 %B) { +; CHECK-LABEL: @icmp_and_shl_neg_ne_0_shl2_nsw( +; CHECK-NEXT: [[NEG:%.*]] = xor i32 [[A:%.*]], -1 +; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 2, [[B:%.*]] +; CHECK-NEXT: [[AND:%.*]] = and i32 [[SHL]], [[NEG]] +; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[AND]], 0 +; CHECK-NEXT: ret i1 [[CMP]] +; + %neg = xor i32 %A, -1 + %shl = shl nuw i32 2, %B + %and = and i32 %shl, %neg + %cmp = icmp ne i32 %and, 0 + ret i1 %cmp +} + define i1 @icmp_and_shl_neg_eq_0(i32 %A, i32 %B) { ; CHECK-LABEL: @icmp_and_shl_neg_eq_0( ; CHECK-NEXT: [[SHL:%.*]] = shl nuw i32 1, [[B:%.*]] |