From f38e5a5314131a5d03af68246301f73041336b6a Mon Sep 17 00:00:00 2001 From: ZelinMa557 <3388706467@qq.com> Date: Fri, 19 Apr 2024 21:51:49 +0800 Subject: [PATCH 1/2] [InstCombine] Add pre-commit tests. Signed-off-by: ZelinMa557 <3388706467@qq.com> --- llvm/test/Transforms/InstCombine/add.ll | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/llvm/test/Transforms/InstCombine/add.ll b/llvm/test/Transforms/InstCombine/add.ll index 408b0c6559b00..107023034e05a 100644 --- a/llvm/test/Transforms/InstCombine/add.ll +++ b/llvm/test/Transforms/InstCombine/add.ll @@ -4091,6 +4091,44 @@ define i32 @fold_zext_addition_fail2(i8 %x) { ret i32 %r } +define i32 @fold_zext_nneg_add_const(i8 %x) { +; CHECK-LABEL: @fold_zext_nneg_add_const( +; CHECK-NEXT: [[XX:%.*]] = add nsw i8 [[X:%.*]], 123 +; CHECK-NEXT: [[ZE:%.*]] = zext nneg i8 [[XX]] to i32 +; CHECK-NEXT: [[R:%.*]] = add nsw i32 [[ZE]], -25 +; CHECK-NEXT: ret i32 [[R]] +; + %xx = add nsw i8 %x, 123 + %ze = zext nneg i8 %xx to i32 + %r = add nsw i32 %ze, -25 + ret i32 %r +} + +define i32 @fold_zext_nneg_add_const_fail1(i8 %x) { +; CHECK-LABEL: @fold_zext_nneg_add_const_fail1( +; CHECK-NEXT: [[XX:%.*]] = add nsw i8 [[X:%.*]], 123 +; CHECK-NEXT: [[ZE:%.*]] = zext i8 [[XX]] to i32 +; CHECK-NEXT: [[R:%.*]] = add nsw i32 [[ZE]], -25 +; CHECK-NEXT: ret i32 [[R]] +; + %xx = add nsw i8 %x, 123 + %ze = zext i8 %xx to i32 + %r = add nsw i32 %ze, -25 + ret i32 %r +} + +define i32 @fold_zext_nneg_add_const_fail2(i8 %x) { +; CHECK-LABEL: @fold_zext_nneg_add_const_fail2( +; CHECK-NEXT: [[XX:%.*]] = add i8 [[X:%.*]], 123 +; CHECK-NEXT: [[ZE:%.*]] = zext nneg i8 [[XX]] to i32 +; CHECK-NEXT: [[R:%.*]] = add nsw i32 [[ZE]], -25 +; CHECK-NEXT: ret i32 [[R]] +; + %xx = add i8 %x, 123 + %ze = zext nneg i8 %xx to i32 + %r = add nsw i32 %ze, -25 + ret i32 %r +} declare void @llvm.assume(i1) declare void @fake_func(i32) From 0d8c7df2e5987afc156c3823e22916d3923d70be Mon Sep 17 00:00:00 2001 From: ZelinMa557 <3388706467@qq.com> Date: Fri, 19 Apr 2024 21:52:57 +0800 Subject: [PATCH 2/2] [InstCombine] Regard zext nneg as sext when folding add(zext neg(add)) Signed-off-by: ZelinMa557 <3388706467@qq.com> --- llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp | 6 +++--- llvm/test/Transforms/InstCombine/add.ll | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp index 07c50d866544b..e659b5de395b3 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp @@ -828,9 +828,10 @@ static Instruction *foldNoWrapAdd(BinaryOperator &Add, // More general combining of constants in the wide type. // (sext (X +nsw NarrowC)) + C --> (sext X) + (sext(NarrowC) + C) + // or (zext nneg (X +nsw NarrowC)) + C --> (sext X) + (sext(NarrowC) + C) Constant *NarrowC; - if (match(Op0, - m_OneUse(m_SExt(m_NSWAddLike(m_Value(X), m_Constant(NarrowC)))))) { + if (match(Op0, m_OneUse(m_SExtLike( + m_NSWAddLike(m_Value(X), m_Constant(NarrowC)))))) { Value *WideC = Builder.CreateSExt(NarrowC, Ty); Value *NewC = Builder.CreateAdd(WideC, Op1C); Value *WideX = Builder.CreateSExt(X, Ty); @@ -844,7 +845,6 @@ static Instruction *foldNoWrapAdd(BinaryOperator &Add, Value *WideX = Builder.CreateZExt(X, Ty); return BinaryOperator::CreateAdd(WideX, NewC); } - return nullptr; } diff --git a/llvm/test/Transforms/InstCombine/add.ll b/llvm/test/Transforms/InstCombine/add.ll index 107023034e05a..e75a9eb51f398 100644 --- a/llvm/test/Transforms/InstCombine/add.ll +++ b/llvm/test/Transforms/InstCombine/add.ll @@ -4093,9 +4093,8 @@ define i32 @fold_zext_addition_fail2(i8 %x) { define i32 @fold_zext_nneg_add_const(i8 %x) { ; CHECK-LABEL: @fold_zext_nneg_add_const( -; CHECK-NEXT: [[XX:%.*]] = add nsw i8 [[X:%.*]], 123 -; CHECK-NEXT: [[ZE:%.*]] = zext nneg i8 [[XX]] to i32 -; CHECK-NEXT: [[R:%.*]] = add nsw i32 [[ZE]], -25 +; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X:%.*]] to i32 +; CHECK-NEXT: [[R:%.*]] = add nsw i32 [[TMP1]], 98 ; CHECK-NEXT: ret i32 [[R]] ; %xx = add nsw i8 %x, 123