Skip to content

Commit 416d1f0

Browse files
committed
[slp]
1 parent ed0ca84 commit 416d1f0

File tree

4 files changed

+27
-82
lines changed

4 files changed

+27
-82
lines changed

llvm/include/llvm/IR/IRBuilder.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2548,6 +2548,11 @@ class IRBuilderBase {
25482548
std::optional<RoundingMode> Rounding = std::nullopt,
25492549
std::optional<fp::ExceptionBehavior> Except = std::nullopt);
25502550

2551+
LLVM_ABI Value *CreateSelectWithUnknownProfile(Value *C, Value *True,
2552+
Value *False,
2553+
StringRef PassName,
2554+
const Twine &Name = "");
2555+
25512556
LLVM_ABI Value *CreateSelect(Value *C, Value *True, Value *False,
25522557
const Twine &Name = "",
25532558
Instruction *MDFrom = nullptr);

llvm/lib/IR/IRBuilder.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "llvm/IR/Module.h"
2626
#include "llvm/IR/NoFolder.h"
2727
#include "llvm/IR/Operator.h"
28+
#include "llvm/IR/ProfDataUtils.h"
2829
#include "llvm/IR/Statepoint.h"
2930
#include "llvm/IR/Type.h"
3031
#include "llvm/IR/Value.h"
@@ -1002,6 +1003,18 @@ CallInst *IRBuilderBase::CreateConstrainedFPCall(
10021003
return C;
10031004
}
10041005

1006+
Value *IRBuilderBase::CreateSelectWithUnknownProfile(Value *C, Value *True,
1007+
Value *False,
1008+
StringRef PassName,
1009+
const Twine &Name) {
1010+
Value *Ret = CreateSelectFMF(C, True, False, {}, Name);
1011+
if (auto *SI = dyn_cast<SelectInst>(Ret)) {
1012+
setExplicitlyUnknownBranchWeightsIfProfiled(
1013+
*SI, *SI->getParent()->getParent(), PassName);
1014+
}
1015+
return Ret;
1016+
}
1017+
10051018
Value *IRBuilderBase::CreateSelect(Value *C, Value *True, Value *False,
10061019
const Twine &Name, Instruction *MDFrom) {
10071020
return CreateSelectFMF(C, True, False, {}, Name, MDFrom);

llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19456,7 +19456,8 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) {
1945619456
}
1945719457
assert(getNumElements(Cond->getType()) == TrueNumElements &&
1945819458
"Cannot vectorize Instruction::Select");
19459-
Value *V = Builder.CreateSelect(Cond, True, False);
19459+
Value *V =
19460+
Builder.CreateSelectWithUnknownProfile(Cond, True, False, DEBUG_TYPE);
1946019461
V = FinalShuffle(V, E);
1946119462

1946219463
E->VectorizedValue = V;
@@ -23576,18 +23577,19 @@ class HorizontalReduction {
2357623577
switch (Kind) {
2357723578
case RecurKind::Or: {
2357823579
if (UseSelect && OpTy == CmpInst::makeCmpResultType(OpTy))
23579-
return Builder.CreateSelect(
23580+
return Builder.CreateSelectWithUnknownProfile(
2358023581
LHS, ConstantInt::getAllOnesValue(CmpInst::makeCmpResultType(OpTy)),
23581-
RHS, Name);
23582+
RHS, DEBUG_TYPE, Name);
2358223583
unsigned RdxOpcode = RecurrenceDescriptor::getOpcode(Kind);
2358323584
return Builder.CreateBinOp((Instruction::BinaryOps)RdxOpcode, LHS, RHS,
2358423585
Name);
2358523586
}
2358623587
case RecurKind::And: {
2358723588
if (UseSelect && OpTy == CmpInst::makeCmpResultType(OpTy))
23588-
return Builder.CreateSelect(
23589+
return Builder.CreateSelectWithUnknownProfile(
2358923590
LHS, RHS,
23590-
ConstantInt::getNullValue(CmpInst::makeCmpResultType(OpTy)), Name);
23591+
ConstantInt::getNullValue(CmpInst::makeCmpResultType(OpTy)),
23592+
DEBUG_TYPE, Name);
2359123593
unsigned RdxOpcode = RecurrenceDescriptor::getOpcode(Kind);
2359223594
return Builder.CreateBinOp((Instruction::BinaryOps)RdxOpcode, LHS, RHS,
2359323595
Name);
@@ -23608,7 +23610,8 @@ class HorizontalReduction {
2360823610
if (UseSelect) {
2360923611
CmpInst::Predicate Pred = llvm::getMinMaxReductionPredicate(Kind);
2361023612
Value *Cmp = Builder.CreateICmp(Pred, LHS, RHS, Name);
23611-
return Builder.CreateSelect(Cmp, LHS, RHS, Name);
23613+
return Builder.CreateSelectWithUnknownProfile(Cmp, LHS, RHS, DEBUG_TYPE,
23614+
Name);
2361223615
}
2361323616
[[fallthrough]];
2361423617
case RecurKind::FMax:

llvm/utils/profcheck-xfail.txt

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1311,82 +1311,6 @@ Transforms/SimpleLoopUnswitch/pr60736.ll
13111311
Transforms/SimpleLoopUnswitch/trivial-unswitch-freeze-individual-conditions.ll
13121312
Transforms/SimpleLoopUnswitch/trivial-unswitch.ll
13131313
Transforms/SimpleLoopUnswitch/trivial-unswitch-logical-and-or.ll
1314-
Transforms/SLPVectorizer/AArch64/gather-root.ll
1315-
Transforms/SLPVectorizer/AArch64/horizontal.ll
1316-
Transforms/SLPVectorizer/AArch64/loadi8.ll
1317-
Transforms/SLPVectorizer/AArch64/phi-node-bitwidt-op-not.ll
1318-
Transforms/SLPVectorizer/AArch64/uselistorder.ll
1319-
Transforms/SLPVectorizer/AArch64/vec3-reorder-reshuffle.ll
1320-
Transforms/SLPVectorizer/AArch64/vectorizable-selects-min-max.ll
1321-
Transforms/SLPVectorizer/AArch64/vectorizable-selects-uniform-cmps.ll
1322-
Transforms/SLPVectorizer/AMDGPU/horizontal-store.ll
1323-
Transforms/SLPVectorizer/bool-logical-op-reduction-with-poison.ll
1324-
Transforms/SLPVectorizer/call-arg-reduced-by-minbitwidth.ll
1325-
Transforms/SLPVectorizer/const-bool-logical-or-reduction.ll
1326-
Transforms/SLPVectorizer/extracts-with-undefs.ll
1327-
Transforms/SLPVectorizer/freeze-signedness-missed.ll
1328-
Transforms/SLPVectorizer/gathered-consecutive-loads-different-types.ll
1329-
Transforms/SLPVectorizer/gather_extract_from_vectorbuild.ll
1330-
Transforms/SLPVectorizer/insert-element-build-vector-const.ll
1331-
Transforms/SLPVectorizer/insert-element-build-vector-inseltpoison.ll
1332-
Transforms/SLPVectorizer/insert-element-build-vector.ll
1333-
Transforms/SLPVectorizer/logical-ops-poisonous-repeated.ll
1334-
Transforms/SLPVectorizer/minbitwidth-node-with-multi-users.ll
1335-
Transforms/SLPVectorizer/minbitwidth-user-not-min.ll
1336-
Transforms/SLPVectorizer/partial-register-extract.ll
1337-
Transforms/SLPVectorizer/reduction-gather-non-scheduled-extracts.ll
1338-
Transforms/SLPVectorizer/reorder-node.ll
1339-
Transforms/SLPVectorizer/reused-buildvector-matching-vectorized-node.ll
1340-
Transforms/SLPVectorizer/revec.ll
1341-
Transforms/SLPVectorizer/RISCV/remarks_cmp_sel_min_max.ll
1342-
Transforms/SLPVectorizer/RISCV/remarks-insert-into-small-vector.ll
1343-
Transforms/SLPVectorizer/RISCV/reordered-interleaved-loads.ll
1344-
Transforms/SLPVectorizer/RISCV/revec.ll
1345-
Transforms/SLPVectorizer/RISCV/select-profitability.ll
1346-
Transforms/SLPVectorizer/RISCV/shuffled-gather-casted.ll
1347-
Transforms/SLPVectorizer/RISCV/unsigned-node-trunc-with-signed-users.ll
1348-
Transforms/SLPVectorizer/slp-deleted-inst.ll
1349-
Transforms/SLPVectorizer/SystemZ/cmp-ptr-minmax.ll
1350-
Transforms/SLPVectorizer/SystemZ/ext-not-resized-op-resized.ll
1351-
Transforms/SLPVectorizer/SystemZ/minbitwidth-trunc.ll
1352-
Transforms/SLPVectorizer/X86/bool-mask.ll
1353-
Transforms/SLPVectorizer/X86/bv-root-part-of-graph.ll
1354-
Transforms/SLPVectorizer/X86/cmp-after-intrinsic-call-minbitwidth.ll
1355-
Transforms/SLPVectorizer/X86/cmp-as-alternate-ops.ll
1356-
Transforms/SLPVectorizer/X86/cmp_sel.ll
1357-
Transforms/SLPVectorizer/X86/crash_7zip.ll
1358-
Transforms/SLPVectorizer/X86/crash_clear_undefs.ll
1359-
Transforms/SLPVectorizer/X86/crash_cmpop.ll
1360-
Transforms/SLPVectorizer/X86/debug-counter.ll
1361-
Transforms/SLPVectorizer/X86/debug-info-salvage.ll
1362-
Transforms/SLPVectorizer/X86/extractelement-single-use-many-nodes.ll
1363-
Transforms/SLPVectorizer/X86/extracts-non-extendable.ll
1364-
Transforms/SLPVectorizer/X86/ext-used-scalar-different-bitwidth.ll
1365-
Transforms/SLPVectorizer/X86/gather-node-same-as-vect-but-order.ll
1366-
Transforms/SLPVectorizer/X86/horizontal-minmax.ll
1367-
Transforms/SLPVectorizer/X86/insert-after-bundle.ll
1368-
Transforms/SLPVectorizer/X86/jumbled-load-multiuse.ll
1369-
Transforms/SLPVectorizer/X86/minbitwidth-icmp-to-trunc.ll
1370-
Transforms/SLPVectorizer/X86/minbw-user-non-sizable.ll
1371-
Transforms/SLPVectorizer/X86/non-load-reduced-as-part-of-bv.ll
1372-
Transforms/SLPVectorizer/X86/ordering-bug.ll
1373-
Transforms/SLPVectorizer/X86/phi-node-bitwidt-op-not.ll
1374-
Transforms/SLPVectorizer/X86/phi-node-reshuffled-part.ll
1375-
Transforms/SLPVectorizer/X86/pr46983.ll
1376-
Transforms/SLPVectorizer/X86/pr49933.ll
1377-
Transforms/SLPVectorizer/X86/propagate_ir_flags.ll
1378-
Transforms/SLPVectorizer/X86/reduction-bool-logic-op-inside.ll
1379-
Transforms/SLPVectorizer/X86/reduction-logical.ll
1380-
Transforms/SLPVectorizer/X86/resized-bv-values-non-power-of2-node.ll
1381-
Transforms/SLPVectorizer/X86/reused-reductions-with-minbitwidth.ll
1382-
Transforms/SLPVectorizer/X86/select-reduction-op.ll
1383-
Transforms/SLPVectorizer/X86/shrink_after_reorder.ll
1384-
Transforms/SLPVectorizer/X86/subvector-minbitwidth-unsigned-value.ll
1385-
Transforms/SLPVectorizer/X86/undef_vect.ll
1386-
Transforms/SLPVectorizer/X86/used-reduced-op.ll
1387-
Transforms/SLPVectorizer/X86/vec3-reorder-reshuffle.ll
1388-
Transforms/SLPVectorizer/X86/vectorize-widest-phis.ll
1389-
Transforms/SLPVectorizer/X86/whole-registers-compare.ll
13901314
Transforms/SROA/addrspacecast.ll
13911315
Transforms/SROA/phi-and-select.ll
13921316
Transforms/SROA/phi-gep.ll

0 commit comments

Comments
 (0)