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

Reply via email to