[llvm] [InstCombine] Don't check uses of constant exprs (PR #113684)
Yingwei Zheng via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 25 05:47:26 PDT 2024
https://github.com/dtcxzyw created https://github.com/llvm/llvm-project/pull/113684
Address comment https://github.com/llvm/llvm-project/pull/105510#issuecomment-2437521147.
>From c7c05381e062b164c45507e771d7c3c049173c04 Mon Sep 17 00:00:00 2001
From: Yingwei Zheng <dtcxzyw2333 at gmail.com>
Date: Fri, 25 Oct 2024 20:27:15 +0800
Subject: [PATCH] [InstCombine] Don't check uses of constant exprs
---
.../InstCombine/InstructionCombining.cpp | 2 +-
llvm/test/Transforms/InstCombine/pr105510.ll | 43 +++++++++++++++++++
2 files changed, 44 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/Transforms/InstCombine/pr105510.ll
diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
index c8b9f166b16020..60be087430be0a 100644
--- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
@@ -3753,7 +3753,7 @@ Instruction *InstCombinerImpl::visitBranchInst(BranchInst &BI) {
}
// Replace all dominated uses of the condition with true/false
- if (BI.getSuccessor(0) != BI.getSuccessor(1)) {
+ if (!isa<Constant>(Cond) && BI.getSuccessor(0) != BI.getSuccessor(1)) {
for (auto &U : make_early_inc_range(Cond->uses())) {
BasicBlockEdge Edge0(BI.getParent(), BI.getSuccessor(0));
if (DT.dominates(Edge0, U)) {
diff --git a/llvm/test/Transforms/InstCombine/pr105510.ll b/llvm/test/Transforms/InstCombine/pr105510.ll
new file mode 100644
index 00000000000000..844fa14ad991ee
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/pr105510.ll
@@ -0,0 +1,43 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -S -passes=instcombine < %s | FileCheck %s
+
+; Make sure we don't crash in this case.
+ at g = global i32 0
+
+define i1 @foo() {
+; CHECK-LABEL: define i1 @foo() {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: br i1 ptrtoint (ptr @g to i1), label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
+; CHECK: [[IF_THEN]]:
+; CHECK-NEXT: ret i1 true
+; CHECK: [[IF_ELSE]]:
+; CHECK-NEXT: ret i1 false
+;
+entry:
+ br i1 ptrtoint (ptr @g to i1), label %if.then, label %if.else
+
+if.then:
+ ret i1 true
+
+if.else:
+ ret i1 false
+}
+
+define i1 @bar() {
+; CHECK-LABEL: define i1 @bar() {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: br i1 ptrtoint (ptr @g to i1), label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
+; CHECK: [[IF_THEN]]:
+; CHECK-NEXT: ret i1 true
+; CHECK: [[IF_ELSE]]:
+; CHECK-NEXT: ret i1 false
+;
+entry:
+ br i1 ptrtoint (ptr @g to i1), label %if.then, label %if.else
+
+if.then:
+ ret i1 true
+
+if.else:
+ ret i1 false
+}
More information about the llvm-commits
mailing list