[llvm-branch-commits] [ProfCheck] Add prof data for lowering of @llvm.cond.loop (PR #180390)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sat Feb 7 20:52:37 PST 2026
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
More information about the llvm-branch-commits
mailing list