-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[profcheck] Disable verification of selects on vector conditions. #167973
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[profcheck] Disable verification of selects on vector conditions. #167973
Conversation
|
@llvm/pr-subscribers-pgo Author: Mircea Trofin (mtrofin) ChangesWe don't currently support profile metadata on selects where the condition is a vector. Issue #147390 Patch is 66.16 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/167973.diff 3 Files Affected:
diff --git a/llvm/lib/Transforms/Utils/ProfileVerify.cpp b/llvm/lib/Transforms/Utils/ProfileVerify.cpp
index c578b4b839258..149c0879edcdd 100644
--- a/llvm/lib/Transforms/Utils/ProfileVerify.cpp
+++ b/llvm/lib/Transforms/Utils/ProfileVerify.cpp
@@ -102,9 +102,11 @@ bool ProfileInjector::inject() {
for (auto &BB : F) {
if (AnnotateSelect) {
for (auto &I : BB) {
- if (isa<SelectInst>(I) && !I.getMetadata(LLVMContext::MD_prof))
- setBranchWeights(I, {SelectTrueWeight, SelectFalseWeight},
- /*IsExpected=*/false);
+ if (auto *SI = dyn_cast<SelectInst>(&I))
+ if (!SI->getCondition()->getType()->isVectorTy() &&
+ !I.getMetadata(LLVMContext::MD_prof))
+ setBranchWeights(I, {SelectTrueWeight, SelectFalseWeight},
+ /*IsExpected=*/false);
}
}
auto *Term = getTerminatorBenefitingFromMDProf(BB);
@@ -185,9 +187,11 @@ PreservedAnalyses ProfileVerifierPass::run(Function &F,
for (const auto &BB : F) {
if (AnnotateSelect) {
for (const auto &I : BB)
- if (isa<SelectInst>(I) && !I.getMetadata(LLVMContext::MD_prof))
- F.getContext().emitError(
- "Profile verification failed: select annotation missing");
+ if (auto *SI = dyn_cast<SelectInst>(&I))
+ if (!SI->getCondition()->getType()->isVectorTy() &&
+ !I.getMetadata(LLVMContext::MD_prof))
+ F.getContext().emitError(
+ "Profile verification failed: select annotation missing");
}
if (const auto *Term =
ProfileInjector::getTerminatorBenefitingFromMDProf(BB))
diff --git a/llvm/test/Transforms/PGOProfile/profcheck-select.ll b/llvm/test/Transforms/PGOProfile/profcheck-select.ll
index 74bcb3f52428b..e6b3ddd42fcb0 100644
--- a/llvm/test/Transforms/PGOProfile/profcheck-select.ll
+++ b/llvm/test/Transforms/PGOProfile/profcheck-select.ll
@@ -15,7 +15,11 @@
; RUN: not opt -passes=prof-verify %t/verify-missing.ll 2>&1 | FileCheck %t/verify-missing.ll
; verify we can disable it. It's sufficient to see opt not failing.
-; RUN: opt -passes=prof-verify -profcheck-annotate-select=0 %t/verify-missing.ll
+; RUN: opt -passes=prof-verify -profcheck-annotate-select=0 --disable-output %t/verify-missing.ll
+
+; verify vector selects without profiles are OK. It's sufficient opt doesn't fail.
+; RUN: opt -passes=prof-verify --disable-output %t/verify-vec.ll
+
;--- inject.ll
declare void @foo(i32 %a);
@@ -24,8 +28,16 @@ define void @bar(i1 %c) {
call void @foo(i32 %v)
ret void
}
+
+define <2 x i32> @vec(<2 x i1> %c, <2 x i32> %v1, <2 x i32> %v2) {
+ %r = select <2 x i1> %c, <2 x i32> %v1, <2 x i32> %v2
+ ret <2 x i32> %r
+}
+
; CHECK-LABEL: @bar
; CHECK: %v = select i1 %c, i32 1, i32 2, !prof !1
+; CHECK-LABEL: @vec
+; CHECK-NOT: select {{.*}} !prof
; CHECK: !0 = !{!"function_entry_count", i64 1000}
; CHECK: !1 = !{!"branch_weights", i32 2, i32 3}
@@ -64,4 +76,10 @@ define void @bar(i1 %c) !prof !0 {
ret void
}
!0 = !{!"function_entry_count", i64 1000}
-; CHECK: Profile verification failed: select annotation missing
\ No newline at end of file
+; CHECK: Profile verification failed: select annotation missing
+
+;--- verify-vec.ll
+define <2 x i32> @vec(<2 x i1> %c, <2 x i32> %v1, <2 x i32> %v2) !prof !{!"function_entry_count", i32 10} {
+ %r = select <2 x i1> %c, <2 x i32> %v1, <2 x i32> %v2
+ ret <2 x i32> %r
+}
diff --git a/llvm/utils/profcheck-xfail.txt b/llvm/utils/profcheck-xfail.txt
index 10a7b62229b8d..04fc387425159 100644
--- a/llvm/utils/profcheck-xfail.txt
+++ b/llvm/utils/profcheck-xfail.txt
@@ -1,679 +1,649 @@
-Bitcode/fcmp-fast.ll
-Bitcode/flags.ll
-CodeGen/AArch64/cgdata-merge-local.ll
-CodeGen/AArch64/llvm-masked-gather-legal-for-sve.ll
-CodeGen/AArch64/llvm-masked-scatter-legal-for-sve.ll
-CodeGen/AArch64/selectopt-cast.ll
-CodeGen/AArch64/selectopt.ll
-CodeGen/ARM/loopvectorize_pr33804.ll
-CodeGen/ARM/sjljeh-swifterror.ll
-CodeGen/Hexagon/autohvx/interleave.ll
-CodeGen/Hexagon/loop-idiom/hexagon-memmove1.ll
-CodeGen/Hexagon/loop-idiom/hexagon-memmove2.ll
-CodeGen/Hexagon/loop-idiom/memmove-rt-check.ll
-CodeGen/Hexagon/masked_gather.ll
-CodeGen/NVPTX/lower-ctor-dtor.ll
-CodeGen/RISCV/zmmul.ll
-CodeGen/WebAssembly/memory-interleave.ll
-CodeGen/X86/AMX/amx-low-intrinsics.ll
-CodeGen/X86/masked_gather_scatter.ll
-CodeGen/X86/nocfivalue.ll
-DebugInfo/AArch64/ir-outliner.ll
-DebugInfo/assignment-tracking/X86/hotcoldsplit.ll
-DebugInfo/Generic/block-asan.ll
-DebugInfo/X86/asan_debug_info.ll
-LTO/X86/diagnostic-handler-remarks-with-hotness.ll
-Other/optimization-remarks-auto.ll
-Other/X86/debugcounter-partiallyinlinelibcalls.ll
-Transforms/AtomicExpand/ARM/atomic-expansion-v7.ll
-Transforms/AtomicExpand/SPARC/partword.ll
-Transforms/Attributor/align.ll
-Transforms/Attributor/ArgumentPromotion/2008-02-01-ReturnAttrs.ll
-Transforms/Attributor/ArgumentPromotion/2008-07-02-array-indexing.ll
-Transforms/Attributor/ArgumentPromotion/2008-09-07-CGUpdate.ll
-Transforms/Attributor/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll
-Transforms/Attributor/ArgumentPromotion/aggregate-promote.ll
-Transforms/Attributor/ArgumentPromotion/alignment.ll
-Transforms/Attributor/ArgumentPromotion/alloca-as.ll
-Transforms/Attributor/ArgumentPromotion/array.ll
-Transforms/Attributor/ArgumentPromotion/attrs.ll
-Transforms/Attributor/ArgumentPromotion/basictest.ll
-Transforms/Attributor/ArgumentPromotion/byval-2.ll
-Transforms/Attributor/ArgumentPromotion/byval.ll
-Transforms/Attributor/ArgumentPromotion/chained.ll
-Transforms/Attributor/ArgumentPromotion/control-flow2.ll
-Transforms/Attributor/ArgumentPromotion/crash.ll
-Transforms/Attributor/ArgumentPromotion/dbg.ll
-Transforms/Attributor/ArgumentPromotion/fp80.ll
-Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll
-Transforms/Attributor/ArgumentPromotion/live_called_from_dead.ll
-Transforms/Attributor/ArgumentPromotion/nonzero-address-spaces.ll
-Transforms/Attributor/ArgumentPromotion/pr27568.ll
-Transforms/Attributor/ArgumentPromotion/profile.ll
-Transforms/Attributor/ArgumentPromotion/reserve-tbaa.ll
-Transforms/Attributor/ArgumentPromotion/tail.ll
-Transforms/Attributor/ArgumentPromotion/X86/attributes.ll
-Transforms/Attributor/ArgumentPromotion/X86/min-legal-vector-width.ll
-Transforms/Attributor/callgraph.ll
-Transforms/Attributor/call-simplify-pointer-info.ll
-Transforms/Attributor/internal-noalias.ll
-Transforms/Attributor/IPConstantProp/2009-09-24-byval-ptr.ll
-Transforms/Attributor/IPConstantProp/recursion.ll
-Transforms/Attributor/IPConstantProp/remove-call-inst.ll
-Transforms/Attributor/liveness.ll
-Transforms/Attributor/memory_locations.ll
-Transforms/Attributor/misc_crash.ll
-Transforms/Attributor/noalias.ll
-Transforms/Attributor/nodelete.ll
-Transforms/Attributor/nofpclass.ll
-Transforms/Attributor/nounwind.ll
-Transforms/Attributor/potential.ll
-Transforms/Attributor/range.ll
-Transforms/Attributor/reduced/clear_cached_analysis_for_deleted_functions.ll
-Transforms/Attributor/reduced/register_benchmark_test.ll
-Transforms/Attributor/undefined_behavior.ll
-Transforms/Attributor/value-simplify-gpu.ll
-Transforms/Attributor/value-simplify.ll
-Transforms/Attributor/value-simplify-local-remote.ll
-Transforms/Attributor/value-simplify-pointer-info.ll
-Transforms/Attributor/value-simplify-reachability.ll
-Transforms/BlockExtractor/extract-blocks.ll
-Transforms/BlockExtractor/extract-blocks-with-groups.ll
-Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll
-Transforms/CodeExtractor/2004-03-14-DominanceProblem.ll
-Transforms/CodeExtractor/2004-03-14-NoSwitchSupport.ll
-Transforms/CodeExtractor/2004-03-17-MissedLiveIns.ll
-Transforms/CodeExtractor/2004-03-17-UpdatePHIsOutsideRegion.ll
-Transforms/CodeExtractor/extract-assume.ll
-Transforms/CodeExtractor/input-value-debug.ll
-Transforms/CodeExtractor/LoopExtractor_alloca.ll
-Transforms/CodeExtractor/LoopExtractor_crash.ll
-Transforms/CodeExtractor/LoopExtractor_infinite.ll
-Transforms/CodeExtractor/LoopExtractor.ll
-Transforms/CodeGenPrepare/NVPTX/bypass-slow-div-constant-numerator.ll
-Transforms/CodeGenPrepare/NVPTX/bypass-slow-div.ll
-Transforms/CodeGenPrepare/NVPTX/bypass-slow-div-not-exact.ll
-Transforms/CodeGenPrepare/NVPTX/bypass-slow-div-special-cases.ll
-Transforms/CodeGenPrepare/X86/vec-shift-inseltpoison.ll
-Transforms/CodeGenPrepare/X86/vec-shift.ll
-Transforms/Coroutines/coro-await-suspend-lower-invoke.ll
-Transforms/Coroutines/coro-await-suspend-lower.ll
-Transforms/Coroutines/coro-byval-param.ll
-Transforms/Coroutines/coro-catchswitch-cleanuppad.ll
-Transforms/Coroutines/coro-debug-coro-frame.ll
-Transforms/Coroutines/coro-debug-dbg.values.ll
-Transforms/Coroutines/coro-debug-dbg.values-not_used_in_frame.ll
-Transforms/Coroutines/coro-debug-frame-variable.ll
-Transforms/Coroutines/coro-debug-O2.ll
-Transforms/Coroutines/coro-debug-spill-dbg.declare.ll
-Transforms/Coroutines/coro-materialize.ll
-Transforms/Coroutines/coro-noop.ll
-Transforms/Coroutines/coro-noop-pacbti.ll
-Transforms/Coroutines/coro-only-destroy-when-complete.ll
-Transforms/Coroutines/coro-spill-suspend.ll
-Transforms/Coroutines/coro-split-00.ll
-Transforms/Coroutines/coro-split-alloc.ll
-Transforms/Coroutines/coro-split-dbg-labels.ll
-Transforms/Coroutines/coro-split-final-suspend.ll
-Transforms/Coroutines/coro-split-hidden.ll
-Transforms/Coroutines/coro-split-musttail10.ll
-Transforms/Coroutines/coro-split-musttail12.ll
-Transforms/Coroutines/coro-split-musttail13.ll
-Transforms/Coroutines/coro-split-musttail1.ll
-Transforms/Coroutines/coro-split-musttail2.ll
-Transforms/Coroutines/coro-split-musttail3.ll
-Transforms/Coroutines/coro-split-musttail4.ll
-Transforms/Coroutines/coro-split-musttail5.ll
-Transforms/Coroutines/coro-split-musttail6.ll
-Transforms/Coroutines/coro-split-musttail7.ll
-Transforms/Coroutines/coro-split-musttail8.ll
-Transforms/Coroutines/coro-split-musttail9.ll
-Transforms/Coroutines/coro-split-musttail-chain-pgo-counter-promo.ll
-Transforms/Coroutines/coro-split-musttail.ll
-Transforms/Coroutines/coro-split-musttail-ppc64le.ll
-Transforms/Coroutines/coro-split-noinline.ll
-Transforms/Coroutines/no-suspend.ll
-Transforms/CorrelatedValuePropagation/cond-at-use.ll
-Transforms/CorrelatedValuePropagation/urem-expansion.ll
-Transforms/CorrelatedValuePropagation/urem.ll
-Transforms/CrossDSOCFI/basic.ll
-Transforms/CrossDSOCFI/cfi_functions.ll
-Transforms/CrossDSOCFI/thumb.ll
-Transforms/ExpandLargeDivRem/X86/sdiv129.ll
-Transforms/ExpandLargeDivRem/X86/srem129.ll
-Transforms/ExpandLargeDivRem/X86/udiv129.ll
-Transforms/ExpandLargeDivRem/X86/urem129.ll
-Transforms/ExpandLargeDivRem/X86/vector.ll
-Transforms/ExpandLargeFpConvert/X86/expand-large-fp-convert-fptosi129.ll
-Transforms/ExpandLargeFpConvert/X86/expand-large-fp-convert-fptoui129.ll
-Transforms/ExpandLargeFpConvert/X86/expand-large-fp-convert-si129tofp.ll
-Transforms/ExpandLargeFpConvert/X86/expand-large-fp-convert-ui129tofp.ll
-Transforms/ExpandMemCmp/AArch64/memcmp.ll
-Transforms/ExpandMemCmp/X86/memcmp.ll
-Transforms/ExpandMemCmp/X86/memcmp-x32.ll
-Transforms/ExpandVariadics/expand-va-intrinsic-split-linkage.ll
-Transforms/ExpandVariadics/expand-va-intrinsic-split-simple.ll
-Transforms/ExpandVariadics/intrinsics.ll
-Transforms/FixIrreducible/basic.ll
-Transforms/FixIrreducible/bug45623.ll
-Transforms/FixIrreducible/callbr.ll
-Transforms/FixIrreducible/nested.ll
-Transforms/FixIrreducible/switch.ll
-Transforms/GCOVProfiling/atomic-counter.ll
-Transforms/GCOVProfiling/exit-block.ll
-Transforms/GCOVProfiling/function-numbering.ll
-Transforms/GCOVProfiling/global-ctor.ll
-Transforms/GCOVProfiling/kcfi.ll
-Transforms/GCOVProfiling/kcfi-normalize.ll
-Transforms/GCOVProfiling/linezero.ll
-Transforms/GCOVProfiling/linkagename.ll
-Transforms/GCOVProfiling/module-flags.ll
-Transforms/GCOVProfiling/noprofile.ll
-Transforms/GCOVProfiling/nosanitize.ll
-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/masked-load-store.ll
-Transforms/GVN/masked-load-store-no-mem-dep.ll
-Transforms/GVN/opaque-ptr.ll
-Transforms/GVN/pr69301.ll
-Transforms/GVN/pre-invalid-prof-metadata.ll
-Transforms/GVN/PRE/pre-load-through-select.ll
-Transforms/GVN/PRE/pre-loop-load-through-select.ll
-Transforms/HotColdSplit/addr-taken.ll
-Transforms/HotColdSplit/apply-noreturn-bonus.ll
-Transforms/HotColdSplit/assumption-cache-invalidation.ll
-Transforms/HotColdSplit/delete-use-without-def-dbg-val.ll
-Transforms/HotColdSplit/duplicate-phi-preds-crash.ll
-Transforms/HotColdSplit/eh-pads.ll
-Transforms/HotColdSplit/forward-dfs-reaches-marked-block.ll
-Transforms/HotColdSplit/invalid-dbg-assign.ll
-Transforms/HotColdSplit/lifetime-markers-on-inputs-1.ll
-Transforms/HotColdSplit/lifetime-markers-on-inputs-2.ll
-Transforms/HotColdSplit/lifetime-markers-on-inputs-3.ll
-Transforms/HotColdSplit/minsize.ll
-Transforms/HotColdSplit/multiple-exits.ll
-Transforms/HotColdSplit/musttail.ll
-Transforms/HotColdSplit/noreturn.ll
-Transforms/HotColdSplit/outline-cold-asm.ll
-Transforms/HotColdSplit/outline-disjoint-diamonds.ll
-Transforms/HotColdSplit/outline-if-then-else.ll
-Transforms/HotColdSplit/outline-inner-region.ll
-Transforms/HotColdSplit/outline-multiple-entry-region.ll
-Transforms/HotColdSplit/outline-outer-region.ll
-Transforms/HotColdSplit/outline-while-loop.ll
-Transforms/HotColdSplit/phi-with-distinct-outlined-values.ll
-Transforms/HotColdSplit/region-overlap.ll
-Transforms/HotColdSplit/resume.ll
-Transforms/HotColdSplit/retain-section.ll
-Transforms/HotColdSplit/section-splitting-custom.ll
-Transforms/HotColdSplit/section-splitting-default.ll
-Transforms/HotColdSplit/split-cold-2.ll
-Transforms/HotColdSplit/split-out-dbg-label.ll
-Transforms/HotColdSplit/split-out-dbg-val-of-arg.ll
-Transforms/HotColdSplit/split-phis-in-exit-blocks.ll
-Transforms/HotColdSplit/split-static-profile.ll
-Transforms/HotColdSplit/stale-assume-in-original-func.ll
-Transforms/HotColdSplit/succ-block-with-self-edge.ll
-Transforms/HotColdSplit/swifterror.ll
-Transforms/HotColdSplit/transfer-debug-info.ll
-Transforms/HotColdSplit/unwind.ll
-Transforms/HotColdSplit/update-split-loop-metadata.ll
-Transforms/IndirectBrExpand/basic.ll
-Transforms/IndVarSimplify/debugloc-rem-subst.ll
-Transforms/IndVarSimplify/eliminate-rem.ll
-Transforms/IndVarSimplify/invalidate-modified-lcssa-phi.ll
-Transforms/IndVarSimplify/pr45835.ll
-Transforms/IndVarSimplify/preserving-debugloc-rem-div.ll
-Transforms/InstCombine/2004-09-20-BadLoadCombine.ll
-Transforms/InstCombine/2005-04-07-UDivSelectCrash.ll
-Transforms/InstCombine/AArch64/sve-intrinsic-sel.ll
-Transforms/InstCombine/AArch64/sve-intrinsic-simplify-binop.ll
-Transforms/InstCombine/AArch64/sve-intrinsic-simplify-shift.ll
-Transforms/InstCombine/add-mask.ll
-Transforms/InstCombine/add-shl-mul-umax.ll
-Transforms/InstCombine/and2.ll
-Transforms/InstCombine/and-fcmp.ll
-Transforms/InstCombine/and.ll
-Transforms/InstCombine/and-or-icmps.ll
-Transforms/InstCombine/apint-div1.ll
-Transforms/InstCombine/apint-div2.ll
-Transforms/InstCombine/ashr-demand.ll
-Transforms/InstCombine/atomic.ll
-Transforms/InstCombine/binop-cast.ll
-Transforms/InstCombine/binop-select-cast-of-select-cond.ll
-Transforms/InstCombine/binop-select.ll
-Transforms/InstCombine/bit-checks.ll
-Transforms/InstCombine/bitreverse.ll
-Transforms/InstCombine/branch.ll
-Transforms/InstCombine/builtin-dynamic-object-size.ll
-Transforms/InstCombine/canonicalize-clamp-like-pattern-between-negative-and-positive-thresholds.ll
-Transforms/InstCombine/canonicalize-clamp-like-pattern-between-zero-and-positive-threshold.ll
-Transforms/InstCombine/cast-mul-select.ll
-Transforms/InstCombine/clamp-to-minmax.ll
-Transforms/InstCombine/conditional-negation.ll
-Transforms/InstCombine/cttz.ll
-Transforms/InstCombine/debuginfo-invert.ll
-Transforms/InstCombine/demorgan.ll
-Transforms/InstCombine/div.ll
-Transforms/InstCombine/div-shift.ll
-Transforms/InstCombine/fabs.ll
-Transforms/InstCombine/fcmp-select.ll
-Transforms/InstCombine/ffs-1.ll
-Transforms/InstCombine/ffs-i16.ll
-Transforms/InstCombine/fmul-bool.ll
-Transforms/InstCombine/fmul.ll
-Transforms/InstCombine/fneg.ll
-Transforms/InstCombine/fold-ctpop-of-not.ll
-Transforms/InstCombine/fold-ext-eq-c-with-op.ll
-Transforms/InstCombine/free-inversion.ll
-Transforms/InstCombine/icmp-and-lowbit-mask.ll
-Transforms/InstCombine/icmp.ll
-Transforms/InstCombine/icmp-mul-and.ll
-Transforms/InstCombine/icmp-of-and-x.ll
-Transforms/InstCombine/icmp-of-or-x.ll
-Transforms/InstCombine/icmp-select-implies-common-op.ll
-Transforms/InstCombine/icmp-select.ll
-Transforms/InstCombine/icmp-with-selects.ll
-Transforms/InstCombine/intrinsic-select.ll
-Transforms/InstCombine/ldexp-ext.ll
-Transforms/InstCombine/ldexp.ll
-Transforms/InstCombine/load-bitcast-select.ll
-Transforms/InstCombine/load.ll
-Transforms/InstCombine/load-select.ll
-Transforms/InstCombine/loadstore-metadata.ll
-Transforms/InstCombine/logical-select-inseltpoison.ll
-Transforms/InstCombine/logical-select.ll
-Transforms/InstCombine/lshr.ll
-Transforms/InstCombine/masked_intrinsics-inseltpoison.ll
-Transforms/InstCombine/masked_intrinsics.ll
-Transforms/InstCombine/memchr-11.ll
-Transforms/InstCombine/memchr-2.ll
-Transforms/InstCombine/memchr-3.ll
-Transforms/InstCombine/memchr-6.ll
-Transforms/InstCombine/memchr-7.ll
-Transforms/InstCombine/memchr-9.ll
-Transforms/InstCombine/memchr.ll
-Transforms/InstCombine/mem-gep-zidx.ll
-Transforms/InstCombine/memrchr-3.ll
-Transforms/InstCombine/memrchr-4.ll
-Transforms/InstCombine/minmax-fold.ll
-Transforms/InstCombine/minmax-fp.ll
-Transforms/InstCombine/minmax-intrinsics.ll
-Transforms/InstCombine/mul-inseltpoison.ll
-Transforms/InstCombine/mul.ll
-Transforms/InstCombine/mul-masked-bits.ll
-Transforms/InstCombine/mul-pow2.ll
-Transforms/InstCombine/multiple-uses-load-bitcast-select.ll
-Transforms/InstCombine/narrow.ll
-Transforms/InstCombine/negated-bitmask.ll
-Transforms/InstCombine/nested-select.ll
-Transforms/InstCombine/not.ll
-Transforms/InstCombine/or-bitmask.ll
-Transforms/InstCombine/or-fcmp.ll
-Transforms/InstCombine/or.ll
-Transforms/InstCombine/pow-1.ll
-Transforms/InstCombine/pow-3.ll
-Transforms/InstCombine/pow-sqrt.ll
-Transforms/InstCombine/pull-conditional-binop-through-shift.ll
-Transforms/InstCombine/rem.ll
-Transforms/InstCombine/sdiv-canonicalize.ll
-Transforms/InstCombine/sdiv-guard.ll
-Transforms/InstCombine/select-and-or.ll
-Transforms/InstCombine/select-cmp-br.ll
-Transforms/InstCombine/select-cmp.ll
-Transforms/InstCombine/select-factorize.ll
-Transforms/InstCombine/select_frexp.ll
-Transforms/InstCombine/select.ll
-Transforms/InstCombine/select-min-max.ll
-Transforms/InstCombine/select-of-symmetric-selects.ll
-Transforms/InstCombine/select-select.ll
-Transforms/InstCombine/shift.ll
-Transforms/InstCombine/shuffle-select-narrow-inseltpoison.ll
-Transforms/InstCombine/shuffle-select-narrow.ll
-Transforms/InstCombine/simplify-demanded-fpclass.ll
-Transforms/InstCombine/sink-not-into-another-hand-of-logical-and.ll
-Transforms/InstCombine/sink-not-into-another-hand-of-logical-or.ll
-Transforms/InstCombine/sink-not-into-logical-and.ll
-Transforms/InstCombine/sink-not-into-logical-or.ll
-Transforms/InstCombine/strchr-1.ll
-Transforms/InstCombine/strchr-3.ll
-Transforms/InstCombine/strlen-1.ll
-Transforms/InstCombine/strrchr-3.ll
-Transforms/InstCombine/sub-ashr-and-to-icmp-select.ll
-Transforms/InstCombine/sub-ashr-or-to-icmp-select.ll
-Transforms/InstCombine/sub-xor-cmp.ll
-Transforms/InstCombine/truncating-saturate.ll
-Transforms/InstCombine/unordered-fcmp-select.ll
-Transforms/InstCombine/urem-via-cmp-select.ll
-Transforms/InstCombine/vec_sext.ll
-Transforms/InstCombine/vector-urem.ll
-Transforms/InstCombine/wcslen-1.ll
-Transforms/InstCombine/wcslen-3.ll
-Transforms/InstCombine/X86/blend_x86.ll
-Transforms/InstCombine/X86/x86-avx512-inseltpoison.ll
-Transforms/InstCombine/X86/x86-avx512.ll
-Transforms/InstCombine/xor-and-or.ll
-Transforms/InstComb...
[truncated]
|
|
@llvm/pr-subscribers-llvm-transforms Author: Mircea Trofin (mtrofin) ChangesWe don't currently support profile metadata on selects where the condition is a vector. Issue #147390 Patch is 66.16 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/167973.diff 3 Files Affected:
diff --git a/llvm/lib/Transforms/Utils/ProfileVerify.cpp b/llvm/lib/Transforms/Utils/ProfileVerify.cpp
index c578b4b839258..149c0879edcdd 100644
--- a/llvm/lib/Transforms/Utils/ProfileVerify.cpp
+++ b/llvm/lib/Transforms/Utils/ProfileVerify.cpp
@@ -102,9 +102,11 @@ bool ProfileInjector::inject() {
for (auto &BB : F) {
if (AnnotateSelect) {
for (auto &I : BB) {
- if (isa<SelectInst>(I) && !I.getMetadata(LLVMContext::MD_prof))
- setBranchWeights(I, {SelectTrueWeight, SelectFalseWeight},
- /*IsExpected=*/false);
+ if (auto *SI = dyn_cast<SelectInst>(&I))
+ if (!SI->getCondition()->getType()->isVectorTy() &&
+ !I.getMetadata(LLVMContext::MD_prof))
+ setBranchWeights(I, {SelectTrueWeight, SelectFalseWeight},
+ /*IsExpected=*/false);
}
}
auto *Term = getTerminatorBenefitingFromMDProf(BB);
@@ -185,9 +187,11 @@ PreservedAnalyses ProfileVerifierPass::run(Function &F,
for (const auto &BB : F) {
if (AnnotateSelect) {
for (const auto &I : BB)
- if (isa<SelectInst>(I) && !I.getMetadata(LLVMContext::MD_prof))
- F.getContext().emitError(
- "Profile verification failed: select annotation missing");
+ if (auto *SI = dyn_cast<SelectInst>(&I))
+ if (!SI->getCondition()->getType()->isVectorTy() &&
+ !I.getMetadata(LLVMContext::MD_prof))
+ F.getContext().emitError(
+ "Profile verification failed: select annotation missing");
}
if (const auto *Term =
ProfileInjector::getTerminatorBenefitingFromMDProf(BB))
diff --git a/llvm/test/Transforms/PGOProfile/profcheck-select.ll b/llvm/test/Transforms/PGOProfile/profcheck-select.ll
index 74bcb3f52428b..e6b3ddd42fcb0 100644
--- a/llvm/test/Transforms/PGOProfile/profcheck-select.ll
+++ b/llvm/test/Transforms/PGOProfile/profcheck-select.ll
@@ -15,7 +15,11 @@
; RUN: not opt -passes=prof-verify %t/verify-missing.ll 2>&1 | FileCheck %t/verify-missing.ll
; verify we can disable it. It's sufficient to see opt not failing.
-; RUN: opt -passes=prof-verify -profcheck-annotate-select=0 %t/verify-missing.ll
+; RUN: opt -passes=prof-verify -profcheck-annotate-select=0 --disable-output %t/verify-missing.ll
+
+; verify vector selects without profiles are OK. It's sufficient opt doesn't fail.
+; RUN: opt -passes=prof-verify --disable-output %t/verify-vec.ll
+
;--- inject.ll
declare void @foo(i32 %a);
@@ -24,8 +28,16 @@ define void @bar(i1 %c) {
call void @foo(i32 %v)
ret void
}
+
+define <2 x i32> @vec(<2 x i1> %c, <2 x i32> %v1, <2 x i32> %v2) {
+ %r = select <2 x i1> %c, <2 x i32> %v1, <2 x i32> %v2
+ ret <2 x i32> %r
+}
+
; CHECK-LABEL: @bar
; CHECK: %v = select i1 %c, i32 1, i32 2, !prof !1
+; CHECK-LABEL: @vec
+; CHECK-NOT: select {{.*}} !prof
; CHECK: !0 = !{!"function_entry_count", i64 1000}
; CHECK: !1 = !{!"branch_weights", i32 2, i32 3}
@@ -64,4 +76,10 @@ define void @bar(i1 %c) !prof !0 {
ret void
}
!0 = !{!"function_entry_count", i64 1000}
-; CHECK: Profile verification failed: select annotation missing
\ No newline at end of file
+; CHECK: Profile verification failed: select annotation missing
+
+;--- verify-vec.ll
+define <2 x i32> @vec(<2 x i1> %c, <2 x i32> %v1, <2 x i32> %v2) !prof !{!"function_entry_count", i32 10} {
+ %r = select <2 x i1> %c, <2 x i32> %v1, <2 x i32> %v2
+ ret <2 x i32> %r
+}
diff --git a/llvm/utils/profcheck-xfail.txt b/llvm/utils/profcheck-xfail.txt
index 10a7b62229b8d..04fc387425159 100644
--- a/llvm/utils/profcheck-xfail.txt
+++ b/llvm/utils/profcheck-xfail.txt
@@ -1,679 +1,649 @@
-Bitcode/fcmp-fast.ll
-Bitcode/flags.ll
-CodeGen/AArch64/cgdata-merge-local.ll
-CodeGen/AArch64/llvm-masked-gather-legal-for-sve.ll
-CodeGen/AArch64/llvm-masked-scatter-legal-for-sve.ll
-CodeGen/AArch64/selectopt-cast.ll
-CodeGen/AArch64/selectopt.ll
-CodeGen/ARM/loopvectorize_pr33804.ll
-CodeGen/ARM/sjljeh-swifterror.ll
-CodeGen/Hexagon/autohvx/interleave.ll
-CodeGen/Hexagon/loop-idiom/hexagon-memmove1.ll
-CodeGen/Hexagon/loop-idiom/hexagon-memmove2.ll
-CodeGen/Hexagon/loop-idiom/memmove-rt-check.ll
-CodeGen/Hexagon/masked_gather.ll
-CodeGen/NVPTX/lower-ctor-dtor.ll
-CodeGen/RISCV/zmmul.ll
-CodeGen/WebAssembly/memory-interleave.ll
-CodeGen/X86/AMX/amx-low-intrinsics.ll
-CodeGen/X86/masked_gather_scatter.ll
-CodeGen/X86/nocfivalue.ll
-DebugInfo/AArch64/ir-outliner.ll
-DebugInfo/assignment-tracking/X86/hotcoldsplit.ll
-DebugInfo/Generic/block-asan.ll
-DebugInfo/X86/asan_debug_info.ll
-LTO/X86/diagnostic-handler-remarks-with-hotness.ll
-Other/optimization-remarks-auto.ll
-Other/X86/debugcounter-partiallyinlinelibcalls.ll
-Transforms/AtomicExpand/ARM/atomic-expansion-v7.ll
-Transforms/AtomicExpand/SPARC/partword.ll
-Transforms/Attributor/align.ll
-Transforms/Attributor/ArgumentPromotion/2008-02-01-ReturnAttrs.ll
-Transforms/Attributor/ArgumentPromotion/2008-07-02-array-indexing.ll
-Transforms/Attributor/ArgumentPromotion/2008-09-07-CGUpdate.ll
-Transforms/Attributor/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll
-Transforms/Attributor/ArgumentPromotion/aggregate-promote.ll
-Transforms/Attributor/ArgumentPromotion/alignment.ll
-Transforms/Attributor/ArgumentPromotion/alloca-as.ll
-Transforms/Attributor/ArgumentPromotion/array.ll
-Transforms/Attributor/ArgumentPromotion/attrs.ll
-Transforms/Attributor/ArgumentPromotion/basictest.ll
-Transforms/Attributor/ArgumentPromotion/byval-2.ll
-Transforms/Attributor/ArgumentPromotion/byval.ll
-Transforms/Attributor/ArgumentPromotion/chained.ll
-Transforms/Attributor/ArgumentPromotion/control-flow2.ll
-Transforms/Attributor/ArgumentPromotion/crash.ll
-Transforms/Attributor/ArgumentPromotion/dbg.ll
-Transforms/Attributor/ArgumentPromotion/fp80.ll
-Transforms/Attributor/ArgumentPromotion/live_called_from_dead_2.ll
-Transforms/Attributor/ArgumentPromotion/live_called_from_dead.ll
-Transforms/Attributor/ArgumentPromotion/nonzero-address-spaces.ll
-Transforms/Attributor/ArgumentPromotion/pr27568.ll
-Transforms/Attributor/ArgumentPromotion/profile.ll
-Transforms/Attributor/ArgumentPromotion/reserve-tbaa.ll
-Transforms/Attributor/ArgumentPromotion/tail.ll
-Transforms/Attributor/ArgumentPromotion/X86/attributes.ll
-Transforms/Attributor/ArgumentPromotion/X86/min-legal-vector-width.ll
-Transforms/Attributor/callgraph.ll
-Transforms/Attributor/call-simplify-pointer-info.ll
-Transforms/Attributor/internal-noalias.ll
-Transforms/Attributor/IPConstantProp/2009-09-24-byval-ptr.ll
-Transforms/Attributor/IPConstantProp/recursion.ll
-Transforms/Attributor/IPConstantProp/remove-call-inst.ll
-Transforms/Attributor/liveness.ll
-Transforms/Attributor/memory_locations.ll
-Transforms/Attributor/misc_crash.ll
-Transforms/Attributor/noalias.ll
-Transforms/Attributor/nodelete.ll
-Transforms/Attributor/nofpclass.ll
-Transforms/Attributor/nounwind.ll
-Transforms/Attributor/potential.ll
-Transforms/Attributor/range.ll
-Transforms/Attributor/reduced/clear_cached_analysis_for_deleted_functions.ll
-Transforms/Attributor/reduced/register_benchmark_test.ll
-Transforms/Attributor/undefined_behavior.ll
-Transforms/Attributor/value-simplify-gpu.ll
-Transforms/Attributor/value-simplify.ll
-Transforms/Attributor/value-simplify-local-remote.ll
-Transforms/Attributor/value-simplify-pointer-info.ll
-Transforms/Attributor/value-simplify-reachability.ll
-Transforms/BlockExtractor/extract-blocks.ll
-Transforms/BlockExtractor/extract-blocks-with-groups.ll
-Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll
-Transforms/CodeExtractor/2004-03-14-DominanceProblem.ll
-Transforms/CodeExtractor/2004-03-14-NoSwitchSupport.ll
-Transforms/CodeExtractor/2004-03-17-MissedLiveIns.ll
-Transforms/CodeExtractor/2004-03-17-UpdatePHIsOutsideRegion.ll
-Transforms/CodeExtractor/extract-assume.ll
-Transforms/CodeExtractor/input-value-debug.ll
-Transforms/CodeExtractor/LoopExtractor_alloca.ll
-Transforms/CodeExtractor/LoopExtractor_crash.ll
-Transforms/CodeExtractor/LoopExtractor_infinite.ll
-Transforms/CodeExtractor/LoopExtractor.ll
-Transforms/CodeGenPrepare/NVPTX/bypass-slow-div-constant-numerator.ll
-Transforms/CodeGenPrepare/NVPTX/bypass-slow-div.ll
-Transforms/CodeGenPrepare/NVPTX/bypass-slow-div-not-exact.ll
-Transforms/CodeGenPrepare/NVPTX/bypass-slow-div-special-cases.ll
-Transforms/CodeGenPrepare/X86/vec-shift-inseltpoison.ll
-Transforms/CodeGenPrepare/X86/vec-shift.ll
-Transforms/Coroutines/coro-await-suspend-lower-invoke.ll
-Transforms/Coroutines/coro-await-suspend-lower.ll
-Transforms/Coroutines/coro-byval-param.ll
-Transforms/Coroutines/coro-catchswitch-cleanuppad.ll
-Transforms/Coroutines/coro-debug-coro-frame.ll
-Transforms/Coroutines/coro-debug-dbg.values.ll
-Transforms/Coroutines/coro-debug-dbg.values-not_used_in_frame.ll
-Transforms/Coroutines/coro-debug-frame-variable.ll
-Transforms/Coroutines/coro-debug-O2.ll
-Transforms/Coroutines/coro-debug-spill-dbg.declare.ll
-Transforms/Coroutines/coro-materialize.ll
-Transforms/Coroutines/coro-noop.ll
-Transforms/Coroutines/coro-noop-pacbti.ll
-Transforms/Coroutines/coro-only-destroy-when-complete.ll
-Transforms/Coroutines/coro-spill-suspend.ll
-Transforms/Coroutines/coro-split-00.ll
-Transforms/Coroutines/coro-split-alloc.ll
-Transforms/Coroutines/coro-split-dbg-labels.ll
-Transforms/Coroutines/coro-split-final-suspend.ll
-Transforms/Coroutines/coro-split-hidden.ll
-Transforms/Coroutines/coro-split-musttail10.ll
-Transforms/Coroutines/coro-split-musttail12.ll
-Transforms/Coroutines/coro-split-musttail13.ll
-Transforms/Coroutines/coro-split-musttail1.ll
-Transforms/Coroutines/coro-split-musttail2.ll
-Transforms/Coroutines/coro-split-musttail3.ll
-Transforms/Coroutines/coro-split-musttail4.ll
-Transforms/Coroutines/coro-split-musttail5.ll
-Transforms/Coroutines/coro-split-musttail6.ll
-Transforms/Coroutines/coro-split-musttail7.ll
-Transforms/Coroutines/coro-split-musttail8.ll
-Transforms/Coroutines/coro-split-musttail9.ll
-Transforms/Coroutines/coro-split-musttail-chain-pgo-counter-promo.ll
-Transforms/Coroutines/coro-split-musttail.ll
-Transforms/Coroutines/coro-split-musttail-ppc64le.ll
-Transforms/Coroutines/coro-split-noinline.ll
-Transforms/Coroutines/no-suspend.ll
-Transforms/CorrelatedValuePropagation/cond-at-use.ll
-Transforms/CorrelatedValuePropagation/urem-expansion.ll
-Transforms/CorrelatedValuePropagation/urem.ll
-Transforms/CrossDSOCFI/basic.ll
-Transforms/CrossDSOCFI/cfi_functions.ll
-Transforms/CrossDSOCFI/thumb.ll
-Transforms/ExpandLargeDivRem/X86/sdiv129.ll
-Transforms/ExpandLargeDivRem/X86/srem129.ll
-Transforms/ExpandLargeDivRem/X86/udiv129.ll
-Transforms/ExpandLargeDivRem/X86/urem129.ll
-Transforms/ExpandLargeDivRem/X86/vector.ll
-Transforms/ExpandLargeFpConvert/X86/expand-large-fp-convert-fptosi129.ll
-Transforms/ExpandLargeFpConvert/X86/expand-large-fp-convert-fptoui129.ll
-Transforms/ExpandLargeFpConvert/X86/expand-large-fp-convert-si129tofp.ll
-Transforms/ExpandLargeFpConvert/X86/expand-large-fp-convert-ui129tofp.ll
-Transforms/ExpandMemCmp/AArch64/memcmp.ll
-Transforms/ExpandMemCmp/X86/memcmp.ll
-Transforms/ExpandMemCmp/X86/memcmp-x32.ll
-Transforms/ExpandVariadics/expand-va-intrinsic-split-linkage.ll
-Transforms/ExpandVariadics/expand-va-intrinsic-split-simple.ll
-Transforms/ExpandVariadics/intrinsics.ll
-Transforms/FixIrreducible/basic.ll
-Transforms/FixIrreducible/bug45623.ll
-Transforms/FixIrreducible/callbr.ll
-Transforms/FixIrreducible/nested.ll
-Transforms/FixIrreducible/switch.ll
-Transforms/GCOVProfiling/atomic-counter.ll
-Transforms/GCOVProfiling/exit-block.ll
-Transforms/GCOVProfiling/function-numbering.ll
-Transforms/GCOVProfiling/global-ctor.ll
-Transforms/GCOVProfiling/kcfi.ll
-Transforms/GCOVProfiling/kcfi-normalize.ll
-Transforms/GCOVProfiling/linezero.ll
-Transforms/GCOVProfiling/linkagename.ll
-Transforms/GCOVProfiling/module-flags.ll
-Transforms/GCOVProfiling/noprofile.ll
-Transforms/GCOVProfiling/nosanitize.ll
-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/masked-load-store.ll
-Transforms/GVN/masked-load-store-no-mem-dep.ll
-Transforms/GVN/opaque-ptr.ll
-Transforms/GVN/pr69301.ll
-Transforms/GVN/pre-invalid-prof-metadata.ll
-Transforms/GVN/PRE/pre-load-through-select.ll
-Transforms/GVN/PRE/pre-loop-load-through-select.ll
-Transforms/HotColdSplit/addr-taken.ll
-Transforms/HotColdSplit/apply-noreturn-bonus.ll
-Transforms/HotColdSplit/assumption-cache-invalidation.ll
-Transforms/HotColdSplit/delete-use-without-def-dbg-val.ll
-Transforms/HotColdSplit/duplicate-phi-preds-crash.ll
-Transforms/HotColdSplit/eh-pads.ll
-Transforms/HotColdSplit/forward-dfs-reaches-marked-block.ll
-Transforms/HotColdSplit/invalid-dbg-assign.ll
-Transforms/HotColdSplit/lifetime-markers-on-inputs-1.ll
-Transforms/HotColdSplit/lifetime-markers-on-inputs-2.ll
-Transforms/HotColdSplit/lifetime-markers-on-inputs-3.ll
-Transforms/HotColdSplit/minsize.ll
-Transforms/HotColdSplit/multiple-exits.ll
-Transforms/HotColdSplit/musttail.ll
-Transforms/HotColdSplit/noreturn.ll
-Transforms/HotColdSplit/outline-cold-asm.ll
-Transforms/HotColdSplit/outline-disjoint-diamonds.ll
-Transforms/HotColdSplit/outline-if-then-else.ll
-Transforms/HotColdSplit/outline-inner-region.ll
-Transforms/HotColdSplit/outline-multiple-entry-region.ll
-Transforms/HotColdSplit/outline-outer-region.ll
-Transforms/HotColdSplit/outline-while-loop.ll
-Transforms/HotColdSplit/phi-with-distinct-outlined-values.ll
-Transforms/HotColdSplit/region-overlap.ll
-Transforms/HotColdSplit/resume.ll
-Transforms/HotColdSplit/retain-section.ll
-Transforms/HotColdSplit/section-splitting-custom.ll
-Transforms/HotColdSplit/section-splitting-default.ll
-Transforms/HotColdSplit/split-cold-2.ll
-Transforms/HotColdSplit/split-out-dbg-label.ll
-Transforms/HotColdSplit/split-out-dbg-val-of-arg.ll
-Transforms/HotColdSplit/split-phis-in-exit-blocks.ll
-Transforms/HotColdSplit/split-static-profile.ll
-Transforms/HotColdSplit/stale-assume-in-original-func.ll
-Transforms/HotColdSplit/succ-block-with-self-edge.ll
-Transforms/HotColdSplit/swifterror.ll
-Transforms/HotColdSplit/transfer-debug-info.ll
-Transforms/HotColdSplit/unwind.ll
-Transforms/HotColdSplit/update-split-loop-metadata.ll
-Transforms/IndirectBrExpand/basic.ll
-Transforms/IndVarSimplify/debugloc-rem-subst.ll
-Transforms/IndVarSimplify/eliminate-rem.ll
-Transforms/IndVarSimplify/invalidate-modified-lcssa-phi.ll
-Transforms/IndVarSimplify/pr45835.ll
-Transforms/IndVarSimplify/preserving-debugloc-rem-div.ll
-Transforms/InstCombine/2004-09-20-BadLoadCombine.ll
-Transforms/InstCombine/2005-04-07-UDivSelectCrash.ll
-Transforms/InstCombine/AArch64/sve-intrinsic-sel.ll
-Transforms/InstCombine/AArch64/sve-intrinsic-simplify-binop.ll
-Transforms/InstCombine/AArch64/sve-intrinsic-simplify-shift.ll
-Transforms/InstCombine/add-mask.ll
-Transforms/InstCombine/add-shl-mul-umax.ll
-Transforms/InstCombine/and2.ll
-Transforms/InstCombine/and-fcmp.ll
-Transforms/InstCombine/and.ll
-Transforms/InstCombine/and-or-icmps.ll
-Transforms/InstCombine/apint-div1.ll
-Transforms/InstCombine/apint-div2.ll
-Transforms/InstCombine/ashr-demand.ll
-Transforms/InstCombine/atomic.ll
-Transforms/InstCombine/binop-cast.ll
-Transforms/InstCombine/binop-select-cast-of-select-cond.ll
-Transforms/InstCombine/binop-select.ll
-Transforms/InstCombine/bit-checks.ll
-Transforms/InstCombine/bitreverse.ll
-Transforms/InstCombine/branch.ll
-Transforms/InstCombine/builtin-dynamic-object-size.ll
-Transforms/InstCombine/canonicalize-clamp-like-pattern-between-negative-and-positive-thresholds.ll
-Transforms/InstCombine/canonicalize-clamp-like-pattern-between-zero-and-positive-threshold.ll
-Transforms/InstCombine/cast-mul-select.ll
-Transforms/InstCombine/clamp-to-minmax.ll
-Transforms/InstCombine/conditional-negation.ll
-Transforms/InstCombine/cttz.ll
-Transforms/InstCombine/debuginfo-invert.ll
-Transforms/InstCombine/demorgan.ll
-Transforms/InstCombine/div.ll
-Transforms/InstCombine/div-shift.ll
-Transforms/InstCombine/fabs.ll
-Transforms/InstCombine/fcmp-select.ll
-Transforms/InstCombine/ffs-1.ll
-Transforms/InstCombine/ffs-i16.ll
-Transforms/InstCombine/fmul-bool.ll
-Transforms/InstCombine/fmul.ll
-Transforms/InstCombine/fneg.ll
-Transforms/InstCombine/fold-ctpop-of-not.ll
-Transforms/InstCombine/fold-ext-eq-c-with-op.ll
-Transforms/InstCombine/free-inversion.ll
-Transforms/InstCombine/icmp-and-lowbit-mask.ll
-Transforms/InstCombine/icmp.ll
-Transforms/InstCombine/icmp-mul-and.ll
-Transforms/InstCombine/icmp-of-and-x.ll
-Transforms/InstCombine/icmp-of-or-x.ll
-Transforms/InstCombine/icmp-select-implies-common-op.ll
-Transforms/InstCombine/icmp-select.ll
-Transforms/InstCombine/icmp-with-selects.ll
-Transforms/InstCombine/intrinsic-select.ll
-Transforms/InstCombine/ldexp-ext.ll
-Transforms/InstCombine/ldexp.ll
-Transforms/InstCombine/load-bitcast-select.ll
-Transforms/InstCombine/load.ll
-Transforms/InstCombine/load-select.ll
-Transforms/InstCombine/loadstore-metadata.ll
-Transforms/InstCombine/logical-select-inseltpoison.ll
-Transforms/InstCombine/logical-select.ll
-Transforms/InstCombine/lshr.ll
-Transforms/InstCombine/masked_intrinsics-inseltpoison.ll
-Transforms/InstCombine/masked_intrinsics.ll
-Transforms/InstCombine/memchr-11.ll
-Transforms/InstCombine/memchr-2.ll
-Transforms/InstCombine/memchr-3.ll
-Transforms/InstCombine/memchr-6.ll
-Transforms/InstCombine/memchr-7.ll
-Transforms/InstCombine/memchr-9.ll
-Transforms/InstCombine/memchr.ll
-Transforms/InstCombine/mem-gep-zidx.ll
-Transforms/InstCombine/memrchr-3.ll
-Transforms/InstCombine/memrchr-4.ll
-Transforms/InstCombine/minmax-fold.ll
-Transforms/InstCombine/minmax-fp.ll
-Transforms/InstCombine/minmax-intrinsics.ll
-Transforms/InstCombine/mul-inseltpoison.ll
-Transforms/InstCombine/mul.ll
-Transforms/InstCombine/mul-masked-bits.ll
-Transforms/InstCombine/mul-pow2.ll
-Transforms/InstCombine/multiple-uses-load-bitcast-select.ll
-Transforms/InstCombine/narrow.ll
-Transforms/InstCombine/negated-bitmask.ll
-Transforms/InstCombine/nested-select.ll
-Transforms/InstCombine/not.ll
-Transforms/InstCombine/or-bitmask.ll
-Transforms/InstCombine/or-fcmp.ll
-Transforms/InstCombine/or.ll
-Transforms/InstCombine/pow-1.ll
-Transforms/InstCombine/pow-3.ll
-Transforms/InstCombine/pow-sqrt.ll
-Transforms/InstCombine/pull-conditional-binop-through-shift.ll
-Transforms/InstCombine/rem.ll
-Transforms/InstCombine/sdiv-canonicalize.ll
-Transforms/InstCombine/sdiv-guard.ll
-Transforms/InstCombine/select-and-or.ll
-Transforms/InstCombine/select-cmp-br.ll
-Transforms/InstCombine/select-cmp.ll
-Transforms/InstCombine/select-factorize.ll
-Transforms/InstCombine/select_frexp.ll
-Transforms/InstCombine/select.ll
-Transforms/InstCombine/select-min-max.ll
-Transforms/InstCombine/select-of-symmetric-selects.ll
-Transforms/InstCombine/select-select.ll
-Transforms/InstCombine/shift.ll
-Transforms/InstCombine/shuffle-select-narrow-inseltpoison.ll
-Transforms/InstCombine/shuffle-select-narrow.ll
-Transforms/InstCombine/simplify-demanded-fpclass.ll
-Transforms/InstCombine/sink-not-into-another-hand-of-logical-and.ll
-Transforms/InstCombine/sink-not-into-another-hand-of-logical-or.ll
-Transforms/InstCombine/sink-not-into-logical-and.ll
-Transforms/InstCombine/sink-not-into-logical-or.ll
-Transforms/InstCombine/strchr-1.ll
-Transforms/InstCombine/strchr-3.ll
-Transforms/InstCombine/strlen-1.ll
-Transforms/InstCombine/strrchr-3.ll
-Transforms/InstCombine/sub-ashr-and-to-icmp-select.ll
-Transforms/InstCombine/sub-ashr-or-to-icmp-select.ll
-Transforms/InstCombine/sub-xor-cmp.ll
-Transforms/InstCombine/truncating-saturate.ll
-Transforms/InstCombine/unordered-fcmp-select.ll
-Transforms/InstCombine/urem-via-cmp-select.ll
-Transforms/InstCombine/vec_sext.ll
-Transforms/InstCombine/vector-urem.ll
-Transforms/InstCombine/wcslen-1.ll
-Transforms/InstCombine/wcslen-3.ll
-Transforms/InstCombine/X86/blend_x86.ll
-Transforms/InstCombine/X86/x86-avx512-inseltpoison.ll
-Transforms/InstCombine/X86/x86-avx512.ll
-Transforms/InstCombine/xor-and-or.ll
-Transforms/InstComb...
[truncated]
|
167be33 to
e781a5a
Compare
boomanaiden154
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, some minor nits.
| setBranchWeights(I, {SelectTrueWeight, SelectFalseWeight}, | ||
| /*IsExpected=*/false); | ||
| if (auto *SI = dyn_cast<SelectInst>(&I)) | ||
| if (!SI->getCondition()->getType()->isVectorTy() && |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably more readable if we have a if (!SI->...->isVectorTy() { continue; }.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
would need more instructions, what am I missing.
| "Profile verification failed: select annotation missing"); | ||
| if (auto *SI = dyn_cast<SelectInst>(&I)) | ||
| if (!SI->getCondition()->getType()->isVectorTy() && | ||
| !I.getMetadata(LLVMContext::MD_prof)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here.
|
|
||
| ; verify we can disable it. It's sufficient to see opt not failing. | ||
| ; RUN: opt -passes=prof-verify -profcheck-annotate-select=0 %t/verify-missing.ll | ||
| ; RUN: opt -passes=prof-verify -profcheck-annotate-select=0 --disable-output %t/verify-missing.ll |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why are we disabling output? It should just go nowhere.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
when you run the lit test at the command line, it gets printed out.
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/157/builds/42200 Here is the relevant piece of the build log for the reference |
I think this is quite a bit more readable than the nested conditionals. From review feedback that was not addressed precommitn in llvm#167973.
I think this is quite a bit more readable than the nested conditionals. From review feedback that was not addressed precommitn in #167973.

We don't currently support profile metadata on selects where the condition is a vector.
Issue #147390