llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-llvm-transforms Author: Aiden Grossman (boomanaiden154) <details> <summary>Changes</summary> When there is no target-specific lowering of @<!-- -->llvm.cond.loop, it is lowered into a simple loop by PreISelIntrinsicLowering. Mark the branch weights into the no-return loop as unknown given we do not have value metadata to fix the profcheck test for this feature. --- Full diff: https://github.com/llvm/llvm-project/pull/180390.diff 3 Files Affected: - (modified) llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp (+6-1) - (modified) llvm/test/Transforms/PreISelIntrinsicLowering/cond-loop.ll (+17-5) - (modified) llvm/utils/profcheck-xfail.txt (-1) ``````````diff diff --git a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp index 0c328e7cff5de..a8f94afe8c023 100644 --- a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp +++ b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp @@ -28,6 +28,7 @@ #include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/Metadata.h" #include "llvm/IR/Module.h" +#include "llvm/IR/ProfDataUtils.h" #include "llvm/IR/RuntimeLibcalls.h" #include "llvm/IR/Type.h" #include "llvm/IR/Use.h" @@ -43,6 +44,8 @@ using namespace llvm; +#define DEBUG_TYPE "pre-isel-intrinsic-lowering" + /// Threshold to leave statically sized memory intrinsic calls. Calls of known /// size larger than this will be expanded by the pass. Calls of unknown or /// lower size will be left for expansion in codegen. @@ -619,7 +622,9 @@ static bool expandCondLoop(Function &Intr) { auto *Call = cast<CallInst>(U); auto *Br = cast<BranchInst>( - SplitBlockAndInsertIfThen(Call->getArgOperand(0), Call, false)); + SplitBlockAndInsertIfThen(Call->getArgOperand(0), Call, false, + getExplicitlyUnknownBranchWeightsIfProfiled( + *Call->getFunction(), DEBUG_TYPE))); Br->setSuccessor(0, Br->getParent()); Call->eraseFromParent(); } diff --git a/llvm/test/Transforms/PreISelIntrinsicLowering/cond-loop.ll b/llvm/test/Transforms/PreISelIntrinsicLowering/cond-loop.ll index 218f7f90de641..aba93a1f0e0ba 100644 --- a/llvm/test/Transforms/PreISelIntrinsicLowering/cond-loop.ll +++ b/llvm/test/Transforms/PreISelIntrinsicLowering/cond-loop.ll @@ -1,19 +1,19 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 6 ; REQUIRES: x86-registered-target, mips-registered-target ; RUN: opt -mtriple=x86_64 -passes=pre-isel-intrinsic-lowering -S < %s | FileCheck --check-prefix=X86 %s ; RUN: opt -mtriple=mips64 -passes=pre-isel-intrinsic-lowering -S < %s | FileCheck --check-prefix=MIPS %s -define void @f1(i64 %a, i64 %b) { +define void @f1(i64 %a, i64 %b) !prof !0 { ; X86-LABEL: define void @f1( -; X86-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) { +; X86-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) !prof [[PROF0:![0-9]+]] { ; X86-NEXT: [[CMP:%.*]] = icmp ult i64 [[A]], [[B]] ; X86-NEXT: call void @llvm.cond.loop(i1 [[CMP]]) ; X86-NEXT: ret void ; ; MIPS-LABEL: define void @f1( -; MIPS-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) { +; MIPS-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) !prof [[PROF0:![0-9]+]] { ; MIPS-NEXT: [[CMP:%.*]] = icmp ult i64 [[A]], [[B]] -; MIPS-NEXT: br i1 [[CMP]], label %[[BB1:.*]], label %[[BB2:.*]] +; MIPS-NEXT: br i1 [[CMP]], label %[[BB1:.*]], label %[[BB2:.*]], !prof [[PROF1:![0-9]+]] ; MIPS: [[BB1]]: ; MIPS-NEXT: br label %[[BB1]] ; MIPS: [[BB2]]: @@ -23,3 +23,15 @@ define void @f1(i64 %a, i64 %b) { call void @llvm.cond.loop(i1 %cmp) ret void } + +!0 = !{!"function_entry_count", i64 1000} +;. +; X86: attributes #[[ATTR0:[0-9]+]] = { nounwind } +;. +; MIPS: attributes #[[ATTR0:[0-9]+]] = { nounwind } +;. +; X86: [[PROF0]] = !{!"function_entry_count", i64 1000} +;. +; MIPS: [[PROF0]] = !{!"function_entry_count", i64 1000} +; MIPS: [[PROF1]] = !{!"unknown", !"pre-isel-intrinsic-lowering"} +;. diff --git a/llvm/utils/profcheck-xfail.txt b/llvm/utils/profcheck-xfail.txt index 3e2c38c99b0be..f8526550257cf 100644 --- a/llvm/utils/profcheck-xfail.txt +++ b/llvm/utils/profcheck-xfail.txt @@ -470,7 +470,6 @@ Transforms/ScalarizeMaskedMemIntrin/X86/expand-masked-gather.ll Transforms/ScalarizeMaskedMemIntrin/X86/expand-masked-load.ll Transforms/ScalarizeMaskedMemIntrin/X86/expand-masked-scatter.ll Transforms/ScalarizeMaskedMemIntrin/X86/expand-masked-store.ll -Transforms/PreISelIntrinsicLowering/cond-loop.ll Transforms/Scalarizer/basic-inseltpoison.ll Transforms/Scalarizer/basic.ll Transforms/Scalarizer/min-bits.ll `````````` </details> https://github.com/llvm/llvm-project/pull/180390 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
