[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