From 3ed6143e817ea59e91e965f424514c4c02dab13f Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Tue, 13 Dec 2022 16:09:50 -0500 Subject: [PATCH] Revert "[ValueTracking] peek through extends in haveNoCommonBitsSet" This reverts commit 7520d187cf0dedcf5085f71bc1a5472c75cc8dbb. The pre-commit patch that was supposed to NFC add tests for this patch picked up some code that should not be here. I'll clean up and re-commit. --- llvm/lib/Analysis/ValueTracking.cpp | 9 +++------ llvm/test/Transforms/InstCombine/add.ll | 31 +++++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index c59cf3f..66cae4e 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -270,13 +270,10 @@ bool llvm::haveNoCommonBitsSet(const Value *LHS, const Value *RHS, match(LHS, m_c_Xor(m_c_And(m_Specific(RHS), m_Value(Y)), m_Deferred(Y)))) return true; - // Peek through extends to find a 'not' of the other side: + // Peek through extends: // (ext Y) op ext(~Y) - // (ext ~Y) op ext(Y) - if ((match(LHS, m_ZExtOrSExt(m_Value(Y))) && - match(RHS, m_ZExtOrSExt(m_Not(m_Specific(Y))))) || - (match(RHS, m_ZExtOrSExt(m_Value(Y))) && - match(LHS, m_ZExtOrSExt(m_Not(m_Specific(Y)))))) + if (match(LHS, m_ZExtOrSExt(m_Value(Y))) && + match(RHS, m_ZExtOrSExt(m_Not(m_Specific(Y))))) return true; // Look for: (A & B) op ~(A | B) diff --git a/llvm/test/Transforms/InstCombine/add.ll b/llvm/test/Transforms/InstCombine/add.ll index 950f491..a8accf1 100644 --- a/llvm/test/Transforms/InstCombine/add.ll +++ b/llvm/test/Transforms/InstCombine/add.ll @@ -2348,7 +2348,11 @@ define @add_to_or_scalable( %in) { define i5 @zext_zext_not(i3 %x) { ; CHECK-LABEL: @zext_zext_not( -; CHECK-NEXT: ret i5 7 +; CHECK-NEXT: [[ZX:%.*]] = zext i3 [[X:%.*]] to i5 +; CHECK-NEXT: [[NOTX:%.*]] = xor i3 [[X]], -1 +; CHECK-NEXT: [[ZNOTX:%.*]] = zext i3 [[NOTX]] to i5 +; CHECK-NEXT: [[R:%.*]] = add nuw nsw i5 [[ZX]], [[ZNOTX]] +; CHECK-NEXT: ret i5 [[R]] ; %zx = zext i3 %x to i5 %notx = xor i3 %x, -1 @@ -2359,7 +2363,11 @@ define i5 @zext_zext_not(i3 %x) { define <2 x i5> @zext_zext_not_commute(<2 x i3> %x) { ; CHECK-LABEL: @zext_zext_not_commute( -; CHECK-NEXT: ret <2 x i5> +; CHECK-NEXT: [[ZX:%.*]] = zext <2 x i3> [[X:%.*]] to <2 x i5> +; CHECK-NEXT: [[NOTX:%.*]] = xor <2 x i3> [[X]], +; CHECK-NEXT: [[ZNOTX:%.*]] = zext <2 x i3> [[NOTX]] to <2 x i5> +; CHECK-NEXT: [[R:%.*]] = add nuw nsw <2 x i5> [[ZNOTX]], [[ZX]] +; CHECK-NEXT: ret <2 x i5> [[R]] ; %zx = zext <2 x i3> %x to <2 x i5> %notx = xor <2 x i3> %x, @@ -2370,7 +2378,11 @@ define <2 x i5> @zext_zext_not_commute(<2 x i3> %x) { define i9 @sext_sext_not(i3 %x) { ; CHECK-LABEL: @sext_sext_not( -; CHECK-NEXT: ret i9 -1 +; CHECK-NEXT: [[SX:%.*]] = sext i3 [[X:%.*]] to i9 +; CHECK-NEXT: [[NOTX:%.*]] = xor i3 [[X]], -1 +; CHECK-NEXT: [[SNOTX:%.*]] = sext i3 [[NOTX]] to i9 +; CHECK-NEXT: [[R:%.*]] = add nsw i9 [[SX]], [[SNOTX]] +; CHECK-NEXT: ret i9 [[R]] ; %sx = sext i3 %x to i9 %notx = xor i3 %x, -1 @@ -2383,7 +2395,10 @@ define i8 @sext_sext_not_commute(i3 %x) { ; CHECK-LABEL: @sext_sext_not_commute( ; CHECK-NEXT: [[SX:%.*]] = sext i3 [[X:%.*]] to i8 ; CHECK-NEXT: call void @use(i8 [[SX]]) -; CHECK-NEXT: ret i8 -1 +; CHECK-NEXT: [[NOTX:%.*]] = xor i3 [[X]], -1 +; CHECK-NEXT: [[SNOTX:%.*]] = sext i3 [[NOTX]] to i8 +; CHECK-NEXT: [[R:%.*]] = add nsw i8 [[SNOTX]], [[SX]] +; CHECK-NEXT: ret i8 [[R]] ; %sx = sext i3 %x to i8 call void @use(i8 %sx) @@ -2398,7 +2413,7 @@ define i5 @zext_sext_not(i4 %x) { ; CHECK-NEXT: [[ZX:%.*]] = zext i4 [[X:%.*]] to i5 ; CHECK-NEXT: [[NOTX:%.*]] = xor i4 [[X]], -1 ; CHECK-NEXT: [[SNOTX:%.*]] = sext i4 [[NOTX]] to i5 -; CHECK-NEXT: [[R:%.*]] = or i5 [[ZX]], [[SNOTX]] +; CHECK-NEXT: [[R:%.*]] = add i5 [[ZX]], [[SNOTX]] ; CHECK-NEXT: ret i5 [[R]] ; %zx = zext i4 %x to i5 @@ -2415,7 +2430,7 @@ define i8 @zext_sext_not_commute(i4 %x) { ; CHECK-NEXT: [[NOTX:%.*]] = xor i4 [[X]], -1 ; CHECK-NEXT: [[SNOTX:%.*]] = sext i4 [[NOTX]] to i8 ; CHECK-NEXT: call void @use(i8 [[SNOTX]]) -; CHECK-NEXT: [[R:%.*]] = or i8 [[SNOTX]], [[ZX]] +; CHECK-NEXT: [[R:%.*]] = add nsw i8 [[SNOTX]], [[ZX]] ; CHECK-NEXT: ret i8 [[R]] ; %zx = zext i4 %x to i8 @@ -2432,7 +2447,7 @@ define i9 @sext_zext_not(i4 %x) { ; CHECK-NEXT: [[SX:%.*]] = sext i4 [[X:%.*]] to i9 ; CHECK-NEXT: [[NOTX:%.*]] = xor i4 [[X]], -1 ; CHECK-NEXT: [[ZNOTX:%.*]] = zext i4 [[NOTX]] to i9 -; CHECK-NEXT: [[R:%.*]] = or i9 [[SX]], [[ZNOTX]] +; CHECK-NEXT: [[R:%.*]] = add nsw i9 [[SX]], [[ZNOTX]] ; CHECK-NEXT: ret i9 [[R]] ; %sx = sext i4 %x to i9 @@ -2447,7 +2462,7 @@ define i9 @sext_zext_not_commute(i4 %x) { ; CHECK-NEXT: [[SX:%.*]] = sext i4 [[X:%.*]] to i9 ; CHECK-NEXT: [[NOTX:%.*]] = xor i4 [[X]], -1 ; CHECK-NEXT: [[ZNOTX:%.*]] = zext i4 [[NOTX]] to i9 -; CHECK-NEXT: [[R:%.*]] = or i9 [[ZNOTX]], [[SX]] +; CHECK-NEXT: [[R:%.*]] = add nsw i9 [[ZNOTX]], [[SX]] ; CHECK-NEXT: ret i9 [[R]] ; %sx = sext i4 %x to i9 -- 2.7.4