Skip to content

Commit 7325466

Browse files
committed
[InstCombine] Set !prof metadata on selects
1 parent f2d827c commit 7325466

File tree

2 files changed

+10
-160
lines changed

2 files changed

+10
-160
lines changed

llvm/lib/Transforms/InstCombine/InstructionCombining.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
#include "llvm/IR/Operator.h"
8282
#include "llvm/IR/PassManager.h"
8383
#include "llvm/IR/PatternMatch.h"
84+
#include "llvm/IR/ProfDataUtils.h"
8485
#include "llvm/IR/Type.h"
8586
#include "llvm/IR/Use.h"
8687
#include "llvm/IR/User.h"
@@ -5937,6 +5938,15 @@ static bool combineInstructionsOverFunction(
59375938
if (!MadeChangeInThisIteration)
59385939
break;
59395940

5941+
// Issue #147390: InstCombine emits `select` as rewrites of instructions
5942+
// without metadata. It may be possible to synthesize some more meaningful
5943+
// profiles in some cases (based on operands or based on the pattern)
5944+
if (auto EC = F.getEntryCount(); EC.has_value() && EC->getCount() > 0)
5945+
for (auto &BB : F)
5946+
for (auto &I : BB)
5947+
if (isa<SelectInst>(I) && !I.getMetadata(LLVMContext::MD_prof))
5948+
setExplicitlyUnknownBranchWeights(I, DEBUG_TYPE);
5949+
59405950
MadeIRChange = true;
59415951
if (Iteration > Opts.MaxIterations) {
59425952
reportFatalUsageError(

llvm/utils/profcheck-xfail.txt

Lines changed: 0 additions & 160 deletions
Original file line numberDiff line numberDiff line change
@@ -832,166 +832,6 @@ Transforms/IndVarSimplify/pr45835.ll
832832
Transforms/IndVarSimplify/preserving-debugloc-rem-div.ll
833833
Transforms/Inline/optimization-remarks-hotness-threshold.ll
834834
Transforms/InstCombine/2004-09-20-BadLoadCombine2.ll
835-
Transforms/InstCombine/2004-09-20-BadLoadCombine.ll
836-
Transforms/InstCombine/2005-04-07-UDivSelectCrash.ll
837-
Transforms/InstCombine/2011-02-14-InfLoop.ll
838-
Transforms/InstCombine/AArch64/sve-intrinsic-sel.ll
839-
Transforms/InstCombine/AArch64/sve-intrinsic-simplify-binop.ll
840-
Transforms/InstCombine/AArch64/sve-intrinsic-simplify-shift.ll
841-
Transforms/InstCombine/add2.ll
842-
Transforms/InstCombine/add.ll
843-
Transforms/InstCombine/add-mask.ll
844-
Transforms/InstCombine/add-shl-mul-umax.ll
845-
Transforms/InstCombine/add-shl-sdiv-to-srem.ll
846-
Transforms/InstCombine/AMDGPU/addrspacecast.ll
847-
Transforms/InstCombine/and2.ll
848-
Transforms/InstCombine/and-fcmp.ll
849-
Transforms/InstCombine/and.ll
850-
Transforms/InstCombine/and-or-icmp-nullptr.ll
851-
Transforms/InstCombine/and-or-icmps.ll
852-
Transforms/InstCombine/and-or-implied-cond-not.ll
853-
Transforms/InstCombine/apint-div1.ll
854-
Transforms/InstCombine/apint-div2.ll
855-
Transforms/InstCombine/apint-rem1.ll
856-
Transforms/InstCombine/apint-rem2.ll
857-
Transforms/InstCombine/ashr-demand.ll
858-
Transforms/InstCombine/atomic.ll
859-
Transforms/InstCombine/binop-cast.ll
860-
Transforms/InstCombine/binop-select-cast-of-select-cond.ll
861-
Transforms/InstCombine/binop-select.ll
862-
Transforms/InstCombine/bit-checks.ll
863-
Transforms/InstCombine/bitreverse.ll
864-
Transforms/InstCombine/branch.ll
865-
Transforms/InstCombine/builtin-dynamic-object-size.ll
866-
Transforms/InstCombine/canonicalize-clamp-like-pattern-between-negative-and-positive-thresholds.ll
867-
Transforms/InstCombine/canonicalize-clamp-like-pattern-between-zero-and-positive-threshold.ll
868-
Transforms/InstCombine/cast-mul-select.ll
869-
Transforms/InstCombine/clamp-to-minmax.ll
870-
Transforms/InstCombine/conditional-negation.ll
871-
Transforms/InstCombine/cttz.ll
872-
Transforms/InstCombine/debuginfo-invert.ll
873-
Transforms/InstCombine/demorgan.ll
874-
Transforms/InstCombine/div.ll
875-
Transforms/InstCombine/div-shift.ll
876-
Transforms/InstCombine/fabs.ll
877-
Transforms/InstCombine/fcmp-select.ll
878-
Transforms/InstCombine/ffs-1.ll
879-
Transforms/InstCombine/ffs-i16.ll
880-
Transforms/InstCombine/fmul-bool.ll
881-
Transforms/InstCombine/fmul.ll
882-
Transforms/InstCombine/fneg.ll
883-
Transforms/InstCombine/fold-ctpop-of-not.ll
884-
Transforms/InstCombine/fold-ext-eq-c-with-op.ll
885-
Transforms/InstCombine/free-inversion.ll
886-
Transforms/InstCombine/icmp-and-lowbit-mask.ll
887-
Transforms/InstCombine/icmp-equality-test.ll
888-
Transforms/InstCombine/icmp.ll
889-
Transforms/InstCombine/icmp-mul-and.ll
890-
Transforms/InstCombine/icmp-of-and-x.ll
891-
Transforms/InstCombine/icmp-of-or-x.ll
892-
Transforms/InstCombine/icmp-select-implies-common-op.ll
893-
Transforms/InstCombine/icmp-select.ll
894-
Transforms/InstCombine/icmp-with-selects.ll
895-
Transforms/InstCombine/intrinsic-select.ll
896-
Transforms/InstCombine/known-never-nan.ll
897-
Transforms/InstCombine/ldexp-ext.ll
898-
Transforms/InstCombine/ldexp.ll
899-
Transforms/InstCombine/load-bitcast-select.ll
900-
Transforms/InstCombine/load.ll
901-
Transforms/InstCombine/load-select.ll
902-
Transforms/InstCombine/loadstore-metadata.ll
903-
Transforms/InstCombine/logical-select-inseltpoison.ll
904-
Transforms/InstCombine/logical-select.ll
905-
Transforms/InstCombine/lshr.ll
906-
Transforms/InstCombine/masked_intrinsics-inseltpoison.ll
907-
Transforms/InstCombine/masked_intrinsics.ll
908-
Transforms/InstCombine/memchr-11.ll
909-
Transforms/InstCombine/memchr-2.ll
910-
Transforms/InstCombine/memchr-3.ll
911-
Transforms/InstCombine/memchr-6.ll
912-
Transforms/InstCombine/memchr-7.ll
913-
Transforms/InstCombine/memchr-9.ll
914-
Transforms/InstCombine/memchr.ll
915-
Transforms/InstCombine/mem-gep-zidx.ll
916-
Transforms/InstCombine/memrchr-3.ll
917-
Transforms/InstCombine/memrchr-4.ll
918-
Transforms/InstCombine/minmax-fold.ll
919-
Transforms/InstCombine/minmax-fp.ll
920-
Transforms/InstCombine/minmax-intrinsics.ll
921-
Transforms/InstCombine/mul-inseltpoison.ll
922-
Transforms/InstCombine/mul.ll
923-
Transforms/InstCombine/mul-masked-bits.ll
924-
Transforms/InstCombine/mul-pow2.ll
925-
Transforms/InstCombine/multiple-uses-load-bitcast-select.ll
926-
Transforms/InstCombine/narrow.ll
927-
Transforms/InstCombine/negated-bitmask.ll
928-
Transforms/InstCombine/nested-select.ll
929-
Transforms/InstCombine/not.ll
930-
Transforms/InstCombine/or-bitmask.ll
931-
Transforms/InstCombine/or-fcmp.ll
932-
Transforms/InstCombine/or.ll
933-
Transforms/InstCombine/phi-select-constant.ll
934-
Transforms/InstCombine/pow-1.ll
935-
Transforms/InstCombine/pow-3.ll
936-
Transforms/InstCombine/pow-sqrt.ll
937-
Transforms/InstCombine/pr24354.ll
938-
Transforms/InstCombine/pr35515.ll
939-
Transforms/InstCombine/ptrtoint-nullgep.ll
940-
Transforms/InstCombine/pull-conditional-binop-through-shift.ll
941-
Transforms/InstCombine/rem.ll
942-
Transforms/InstCombine/sdiv-canonicalize.ll
943-
Transforms/InstCombine/sdiv-guard.ll
944-
Transforms/InstCombine/select-and-cmp.ll
945-
Transforms/InstCombine/select-and-or.ll
946-
Transforms/InstCombine/select_arithmetic.ll
947-
Transforms/InstCombine/select-bitext.ll
948-
Transforms/InstCombine/select-cmp-br.ll
949-
Transforms/InstCombine/select-cmp.ll
950-
Transforms/InstCombine/select-factorize.ll
951-
Transforms/InstCombine/select_frexp.ll
952-
Transforms/InstCombine/select-icmp-and.ll
953-
Transforms/InstCombine/select.ll
954-
Transforms/InstCombine/select-min-max.ll
955-
Transforms/InstCombine/select-of-symmetric-selects.ll
956-
Transforms/InstCombine/select-or-cmp.ll
957-
Transforms/InstCombine/select-safe-bool-transforms.ll
958-
Transforms/InstCombine/select-safe-impliedcond-transforms.ll
959-
Transforms/InstCombine/select-safe-transforms.ll
960-
Transforms/InstCombine/select-select.ll
961-
Transforms/InstCombine/select-with-extreme-eq-cond.ll
962-
Transforms/InstCombine/shift.ll
963-
Transforms/InstCombine/shuffle-select-narrow-inseltpoison.ll
964-
Transforms/InstCombine/shuffle-select-narrow.ll
965-
Transforms/InstCombine/simplify-demanded-fpclass.ll
966-
Transforms/InstCombine/sink-not-into-another-hand-of-logical-and.ll
967-
Transforms/InstCombine/sink-not-into-another-hand-of-logical-or.ll
968-
Transforms/InstCombine/sink-not-into-logical-and.ll
969-
Transforms/InstCombine/sink-not-into-logical-or.ll
970-
Transforms/InstCombine/strchr-1.ll
971-
Transforms/InstCombine/strchr-3.ll
972-
Transforms/InstCombine/strlen-1.ll
973-
Transforms/InstCombine/strrchr-3.ll
974-
Transforms/InstCombine/sub-ashr-and-to-icmp-select.ll
975-
Transforms/InstCombine/sub-ashr-or-to-icmp-select.ll
976-
Transforms/InstCombine/sub.ll
977-
Transforms/InstCombine/sub-xor-cmp.ll
978-
Transforms/InstCombine/truncating-saturate.ll
979-
Transforms/InstCombine/trunc-inseltpoison.ll
980-
Transforms/InstCombine/trunc.ll
981-
Transforms/InstCombine/unordered-fcmp-select.ll
982-
Transforms/InstCombine/urem-via-cmp-select.ll
983-
Transforms/InstCombine/vec_sext.ll
984-
Transforms/InstCombine/vector-urem.ll
985-
Transforms/InstCombine/wcslen-1.ll
986-
Transforms/InstCombine/wcslen-3.ll
987-
Transforms/InstCombine/X86/blend_x86.ll
988-
Transforms/InstCombine/X86/x86-avx512-inseltpoison.ll
989-
Transforms/InstCombine/X86/x86-avx512.ll
990-
Transforms/InstCombine/xor-and-or.ll
991-
Transforms/InstCombine/xor-ashr.ll
992-
Transforms/InstCombine/xor.ll
993-
Transforms/InstCombine/zext-bool-add-sub.ll
994-
Transforms/InstCombine/zext-or-icmp.ll
995835
Transforms/IRCE/add-metadata-pre-post-loops.ll
996836
Transforms/IRCE/bad_expander.ll
997837
Transforms/IRCE/bug-mismatched-types.ll

0 commit comments

Comments
 (0)