diff --git a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp index 0c328e7cff5d..a8f94afe8c02 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(U); auto *Br = cast( - 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 218f7f90de64..6d7fdd2a9f38 100644 --- a/llvm/test/Transforms/PreISelIntrinsicLowering/cond-loop.ll +++ b/llvm/test/Transforms/PreISelIntrinsicLowering/cond-loop.ll @@ -3,17 +3,17 @@ ; 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,11 @@ define void @f1(i64 %a, i64 %b) { call void @llvm.cond.loop(i1 %cmp) ret void } + +!0 = !{!"function_entry_count", i64 1000} +;. +; 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 3e2c38c99b0b..f8526550257c 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