[llvm] a81d2bf - [InstCombine] Propagate profiles when folding addrscast through loads (#177214)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 22 06:07:08 PST 2026
Author: Aiden Grossman
Date: 2026-01-22T06:07:03-08:00
New Revision: a81d2bf933fb3acc993fa5493ac34ce582352191
URL: https://github.com/llvm/llvm-project/commit/a81d2bf933fb3acc993fa5493ac34ce582352191
DIFF: https://github.com/llvm/llvm-project/commit/a81d2bf933fb3acc993fa5493ac34ce582352191.diff
LOG: [InstCombine] Propagate profiles when folding addrscast through loads (#177214)
#176352 introduced a new fold and a new test for this functionality.
Given the select condition is the same before and after, we can
propagate any profile information that may be attached to the select
instruction. We should not need to explicitly drop any metadata off the
select.
Added:
Modified:
llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
llvm/test/Transforms/InstCombine/load-addrspacecast-select.ll
llvm/utils/profcheck-xfail.txt
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp b/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
index 280ea3112c7bd..eff8e6f8f5739 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
@@ -27,6 +27,10 @@ using namespace PatternMatch;
#define DEBUG_TYPE "instcombine"
+namespace llvm {
+extern cl::opt<bool> ProfcheckDisableMetadataFixes;
+}
+
STATISTIC(NumDeadStore, "Number of dead stores eliminated");
STATISTIC(NumGlobalCopies, "Number of allocas copied from constant global");
@@ -1164,7 +1168,8 @@ Instruction *InstCombinerImpl::visitLoadInst(LoadInst &LI) {
// poison-generating metadata.
V1->copyMetadata(LI, Metadata::PoisonGeneratingIDs);
V2->copyMetadata(LI, Metadata::PoisonGeneratingIDs);
- return SelectInst::Create(SI->getCondition(), V1, V2);
+ return SelectInst::Create(SI->getCondition(), V1, V2, "", nullptr,
+ ProfcheckDisableMetadataFixes ? nullptr : SI);
}
}
}
diff --git a/llvm/test/Transforms/InstCombine/load-addrspacecast-select.ll b/llvm/test/Transforms/InstCombine/load-addrspacecast-select.ll
index 748f64b93d652..eee2c652cd099 100644
--- a/llvm/test/Transforms/InstCombine/load-addrspacecast-select.ll
+++ b/llvm/test/Transforms/InstCombine/load-addrspacecast-select.ll
@@ -1,18 +1,18 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
; load(addrspacecast(select(A, B))) --> select(load(addrspacecast(A)), load(addrspacecast(B)))
-define i32 @load_addrspacecast_select_alloca(i1 %cond) {
+define i32 @load_addrspacecast_select_alloca(i1 %cond) !prof !0 {
; CHECK-LABEL: @load_addrspacecast_select_alloca(
-; CHECK-NEXT: [[RESULT:%.*]] = select i1 [[COND:%.*]], i32 42, i32 100
+; CHECK-NEXT: [[RESULT:%.*]] = select i1 [[COND:%.*]], i32 42, i32 100, !prof [[PROF1:![0-9]+]]
; CHECK-NEXT: ret i32 [[RESULT]]
;
%a = alloca i32, align 4
%b = alloca i32, align 4
store i32 42, ptr %a, align 4
store i32 100, ptr %b, align 4
- %sel = select i1 %cond, ptr %a, ptr %b
+ %sel = select i1 %cond, ptr %a, ptr %b, !prof !1
%cast = addrspacecast ptr %sel to ptr addrspace(5)
%load = load i32, ptr addrspace(5) %cast, align 4
ret i32 %load
@@ -152,3 +152,10 @@ define i32 @load_addrspacecast_select_atomic(i1 %cond) {
%load = load atomic i32, ptr addrspace(5) %cast seq_cst, align 4
ret i32 %load
}
+
+!0 = !{!"function_entry_count", i64 1000}
+!1 = !{!"branch_weights", i32 2, i32 3}
+;.
+; CHECK: [[META0:![0-9]+]] = !{!"function_entry_count", i64 1000}
+; CHECK: [[PROF1]] = !{!"branch_weights", i32 2, i32 3}
+;.
diff --git a/llvm/utils/profcheck-xfail.txt b/llvm/utils/profcheck-xfail.txt
index 60743443ad72d..a88179bbe4845 100644
--- a/llvm/utils/profcheck-xfail.txt
+++ b/llvm/utils/profcheck-xfail.txt
@@ -254,7 +254,6 @@ Transforms/InstCombine/icmp-with-selects.ll
Transforms/InstCombine/intrinsic-select.ll
Transforms/InstCombine/ldexp-ext.ll
Transforms/InstCombine/ldexp.ll
-Transforms/InstCombine/load-addrspacecast-select.ll
Transforms/InstCombine/load-bitcast-select.ll
Transforms/InstCombine/load.ll
Transforms/InstCombine/load-select.ll
More information about the llvm-commits
mailing list