[llvm] ff3dcd0 - [GlobalOpt][profcheck] Mark as `unknown` the branch weights of global shrunk to boolean (#171530)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 12 08:34:16 PST 2025
Author: Mircea Trofin
Date: 2025-12-12T08:34:11-08:00
New Revision: ff3dcd06a94ad1412d7e89b5c254adc2f1e8c3e4
URL: https://github.com/llvm/llvm-project/commit/ff3dcd06a94ad1412d7e89b5c254adc2f1e8c3e4
DIFF: https://github.com/llvm/llvm-project/commit/ff3dcd06a94ad1412d7e89b5c254adc2f1e8c3e4.diff
LOG: [GlobalOpt][profcheck] Mark as `unknown` the branch weights of global shrunk to boolean (#171530)
Added:
Modified:
llvm/lib/Transforms/IPO/GlobalOpt.cpp
llvm/test/Transforms/GlobalOpt/disable-globals-aa.ll
llvm/utils/profcheck-xfail.txt
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
index 664722244699d..f0e82c9ca8350 100644
--- a/llvm/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
@@ -47,6 +47,7 @@
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Operator.h"
+#include "llvm/IR/ProfDataUtils.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Use.h"
#include "llvm/IR/User.h"
@@ -1308,8 +1309,10 @@ static bool TryToShrinkGlobalToBoolean(GlobalVariable *GV, Constant *OtherVal) {
Instruction *NSI;
if (IsOneZero)
NSI = new ZExtInst(NLI, LI->getType(), "", LI->getIterator());
- else
+ else {
NSI = SelectInst::Create(NLI, OtherVal, InitVal, "", LI->getIterator());
+ setExplicitlyUnknownBranchWeightsIfProfiled(*NSI, DEBUG_TYPE);
+ }
NSI->takeName(LI);
// Since LI is split into two instructions, NLI and NSI both inherit the
// same DebugLoc
diff --git a/llvm/test/Transforms/GlobalOpt/disable-globals-aa.ll b/llvm/test/Transforms/GlobalOpt/disable-globals-aa.ll
index b7da99148a0e1..ce1a3d39d764e 100644
--- a/llvm/test/Transforms/GlobalOpt/disable-globals-aa.ll
+++ b/llvm/test/Transforms/GlobalOpt/disable-globals-aa.ll
@@ -1,9 +1,14 @@
-; 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 -O2 -S %s | FileCheck %s --check-prefix=WITHGLOBALSAA
; RUN: opt -O2 -enable-global-analyses=0 -S %s | FileCheck %s --check-prefix=NOGLOBALSAA
@glb = internal global i8 0
+;.
+; WITHGLOBALSAA: @glb = internal unnamed_addr global i1 false
+;.
+; NOGLOBALSAA: @glb = internal unnamed_addr global i1 false
+;.
define i8 @f(ptr %ptr) {
; WITHGLOBALSAA-LABEL: @f(
; WITHGLOBALSAA-NEXT: store i8 1, ptr [[PTR:%.*]], align 1
@@ -22,17 +27,32 @@ define i8 @f(ptr %ptr) {
ret i8 %r
}
-define i8 @dummy() {
+define i8 @dummy() !prof !0 {
; WITHGLOBALSAA-LABEL: @dummy(
; WITHGLOBALSAA-NEXT: [[VAL_B:%.*]] = load i1, ptr @glb, align 1
-; WITHGLOBALSAA-NEXT: [[VAL:%.*]] = select i1 [[VAL_B]], i8 2, i8 0
+; WITHGLOBALSAA-NEXT: [[VAL:%.*]] = select i1 [[VAL_B]], i8 2, i8 0, !prof [[PROF1:![0-9]+]]
; WITHGLOBALSAA-NEXT: ret i8 [[VAL]]
;
; NOGLOBALSAA-LABEL: @dummy(
; NOGLOBALSAA-NEXT: [[VAL_B:%.*]] = load i1, ptr @glb, align 1
-; NOGLOBALSAA-NEXT: [[VAL:%.*]] = select i1 [[VAL_B]], i8 2, i8 0
+; NOGLOBALSAA-NEXT: [[VAL:%.*]] = select i1 [[VAL_B]], i8 2, i8 0, !prof [[PROF1:![0-9]+]]
; NOGLOBALSAA-NEXT: ret i8 [[VAL]]
;
%val = load i8, ptr @glb
ret i8 %val
}
+
+!0 = !{!"function_entry_count", i32 10}
+;.
+; WITHGLOBALSAA: attributes #[[ATTR0:[0-9]+]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(write, inaccessiblemem: none, target_mem0: none, target_mem1: none) }
+; WITHGLOBALSAA: attributes #[[ATTR1:[0-9]+]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(read, argmem: none, inaccessiblemem: none, target_mem0: none, target_mem1: none) }
+;.
+; NOGLOBALSAA: attributes #[[ATTR0:[0-9]+]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(write, argmem: readwrite, inaccessiblemem: none, target_mem0: none, target_mem1: none) }
+; NOGLOBALSAA: attributes #[[ATTR1:[0-9]+]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(read, argmem: none, inaccessiblemem: none, target_mem0: none, target_mem1: none) }
+;.
+; WITHGLOBALSAA: [[META0:![0-9]+]] = !{!"function_entry_count", i32 10}
+; WITHGLOBALSAA: [[PROF1]] = !{!"unknown", !"globalopt"}
+;.
+; NOGLOBALSAA: [[META0:![0-9]+]] = !{!"function_entry_count", i32 10}
+; NOGLOBALSAA: [[PROF1]] = !{!"unknown", !"globalopt"}
+;.
diff --git a/llvm/utils/profcheck-xfail.txt b/llvm/utils/profcheck-xfail.txt
index 959d227992580..86907df908930 100644
--- a/llvm/utils/profcheck-xfail.txt
+++ b/llvm/utils/profcheck-xfail.txt
@@ -163,12 +163,6 @@ Transforms/GCOVProfiling/reset.ll
Transforms/GCOVProfiling/split-indirectbr-critical-edges.ll
Transforms/GCOVProfiling/three-element-mdnode.ll
Transforms/GCOVProfiling/version.ll
-Transforms/GlobalOpt/disable-globals-aa.ll
-Transforms/GlobalOpt/global-demotion.ll
-Transforms/GlobalOpt/globalvar-code-model.ll
-Transforms/GlobalOpt/large-int-crash.ll
-Transforms/GlobalOpt/shrink-global-to-bool-check-debug.ll
-Transforms/GlobalOpt/shrink-global-to-bool-opaque-ptrs.ll
Transforms/GVN/debugloc-load-select.ll
Transforms/GVN/load-through-select-dbg.ll
Transforms/GVN/opaque-ptr.ll
More information about the llvm-commits
mailing list