<div dir="ltr"><div>It was reverted with <span style="color:rgb(51,51,51);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px">9eb73f9c9d409f35151b0c1e01f1ed95808acd0c because of LTO, but</span></div>also it fails assert on <a href="https://lab.llvm.org/buildbot/#/builders/237/builds/3711/steps/12/logs/stdio">https://lab.llvm.org/buildbot/#/builders/237/builds/3711/steps/12/logs/stdio</a><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 25 Jul 2023 at 07:55, Nikita Popov via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Nikita Popov<br>
Date: 2023-07-25T16:54:57+02:00<br>
New Revision: 673a4671f3e8b7158d990f6456428175a6eac38c<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/673a4671f3e8b7158d990f6456428175a6eac38c" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/673a4671f3e8b7158d990f6456428175a6eac38c</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/673a4671f3e8b7158d990f6456428175a6eac38c.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/673a4671f3e8b7158d990f6456428175a6eac38c.diff</a><br>
<br>
LOG: [ConstantFold] Avoid creation of undesirable binop<br>
<br>
When commuting the operands, don't create a constant expression<br>
for undesirable binops. Only invoke the constant folding function<br>
in that case.<br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
llvm/lib/IR/ConstantFold.cpp<br>
llvm/test/Transforms/InstCombine/pr32686.ll<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff --git a/llvm/lib/IR/ConstantFold.cpp b/llvm/lib/IR/ConstantFold.cpp<br>
index 40b21876281142..04e4217beb0884 100644<br>
--- a/llvm/lib/IR/ConstantFold.cpp<br>
+++ b/llvm/lib/IR/ConstantFold.cpp<br>
@@ -1084,7 +1084,9 @@ Constant *llvm::ConstantFoldBinaryInstruction(unsigned Opcode, Constant *C1,<br>
} else if (isa<ConstantInt>(C1)) {<br>
// If C1 is a ConstantInt and C2 is not, swap the operands.<br>
if (Instruction::isCommutative(Opcode))<br>
- return ConstantExpr::get(Opcode, C2, C1);<br>
+ return ConstantExpr::isDesirableBinOp(Opcode)<br>
+ ? ConstantExpr::get(Opcode, C2, C1)<br>
+ : ConstantFoldBinaryInstruction(Opcode, C2, C1);<br>
}<br>
<br>
if (ConstantInt *CI1 = dyn_cast<ConstantInt>(C1)) {<br>
<br>
diff --git a/llvm/test/Transforms/InstCombine/pr32686.ll b/llvm/test/Transforms/InstCombine/pr32686.ll<br>
index acce81a603d2d0..f981065bebeb80 100644<br>
--- a/llvm/test/Transforms/InstCombine/pr32686.ll<br>
+++ b/llvm/test/Transforms/InstCombine/pr32686.ll<br>
@@ -8,8 +8,9 @@ define void @tinkywinky() {<br>
; CHECK-LABEL: @tinkywinky(<br>
; CHECK-NEXT: [[PATATINO:%.*]] = load i8, ptr @a, align 1<br>
; CHECK-NEXT: [[TOBOOL_NOT:%.*]] = icmp eq i8 [[PATATINO]], 0<br>
-; CHECK-NEXT: [[TMP1:%.*]] = zext i1 [[TOBOOL_NOT]] to i32<br>
-; CHECK-NEXT: [[OR1:%.*]] = or i32 [[TMP1]], or (i32 zext (i1 icmp ne (ptr @a, ptr @b) to i32), i32 2)<br>
+; CHECK-NEXT: [[TMP1:%.*]] = or i1 [[TOBOOL_NOT]], icmp ne (ptr @a, ptr @b)<br>
+; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[TMP1]] to i32<br>
+; CHECK-NEXT: [[OR1:%.*]] = or i32 [[TMP2]], 2<br>
; CHECK-NEXT: store i32 [[OR1]], ptr @b, align 4<br>
; CHECK-NEXT: ret void<br>
;<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>