llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-llvm-transforms Author: Aiden Grossman (boomanaiden154) <details> <summary>Changes</summary> This patch tackles two cases: 1. Checks around aliasing/overlapping ranges. This is runtime dependent on the pointer values passed in, which we have no way of knowing without additional profiling. 2. Loop backedges. For these we also have an associated trip count, so we set up the branch weights to represent this. Tests updated/profcheck-xfail.txt updated. --- Patch is 20.06 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/181292.diff 6 Files Affected: - (modified) llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp (+7-4) - (modified) llvm/lib/Transforms/Utils/MatrixUtils.cpp (+6-1) - (modified) llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops-large-matrixes.ll (+6-5) - (modified) llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops.ll (+12-12) - (modified) llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-volatile.ll (+21-13) - (modified) llvm/utils/profcheck-xfail.txt (-7) ``````````diff diff --git a/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp b/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp index 053f1d99274ae..c430eff88fa01 100644 --- a/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp +++ b/llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp @@ -41,6 +41,7 @@ #include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/MatrixBuilder.h" #include "llvm/IR/PatternMatch.h" +#include "llvm/IR/ProfDataUtils.h" #include "llvm/Support/Alignment.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Compiler.h" @@ -1913,8 +1914,9 @@ class LowerMatrixIntrinsics { "store.end", true, true); Value *LoadBegin = Builder.CreatePtrToInt(const_cast<Value *>(LoadLoc.Ptr), IntPtrTy, "load.begin"); - Builder.CreateCondBr(Builder.CreateICmpULT(LoadBegin, StoreEnd), Check1, - Fusion); + BranchInst *BR1 = Builder.CreateCondBr( + Builder.CreateICmpULT(LoadBegin, StoreEnd), Check1, Fusion); + setExplicitlyUnknownBranchWeightsIfProfiled(*BR1, DEBUG_TYPE); // Check if the store begins before the end of the load location. If the // condition holds, they alias, otherwise they are guaranteed to not @@ -1924,8 +1926,9 @@ class LowerMatrixIntrinsics { Value *LoadEnd = Builder.CreateAdd( LoadBegin, ConstantInt::get(IntPtrTy, LoadLoc.Size.getValue()), "load.end", true, true); - Builder.CreateCondBr(Builder.CreateICmpULT(StoreBegin, LoadEnd), Copy, - Fusion); + BranchInst *BR2 = Builder.CreateCondBr( + Builder.CreateICmpULT(StoreBegin, LoadEnd), Copy, Fusion); + setExplicitlyUnknownBranchWeightsIfProfiled(*BR2, DEBUG_TYPE); // Copy load operand to new alloca. Builder.SetInsertPoint(Copy, Copy->begin()); diff --git a/llvm/lib/Transforms/Utils/MatrixUtils.cpp b/llvm/lib/Transforms/Utils/MatrixUtils.cpp index a35003c3bc390..88ef31df692aa 100644 --- a/llvm/lib/Transforms/Utils/MatrixUtils.cpp +++ b/llvm/lib/Transforms/Utils/MatrixUtils.cpp @@ -16,6 +16,8 @@ #include "llvm/IR/BasicBlock.h" #include "llvm/IR/Dominators.h" #include "llvm/IR/IRBuilder.h" +#include "llvm/IR/MDBuilder.h" +#include "llvm/IR/ProfDataUtils.h" #include "llvm/IR/Type.h" using namespace llvm; @@ -42,7 +44,10 @@ BasicBlock *TileInfo::CreateLoop(BasicBlock *Preheader, BasicBlock *Exit, B.SetInsertPoint(Latch); Value *Inc = B.CreateAdd(IV, Step, Name + ".step"); Value *Cond = B.CreateICmpNE(Inc, Bound, Name + ".cond"); - BranchInst::Create(Header, Exit, Cond, Latch); + auto *BR = BranchInst::Create(Header, Exit, Cond, Latch); + MDBuilder MDB(Preheader->getContext()); + setFittedBranchWeights(*BR, {Bound->getZExtValue() / Step->getZExtValue(), 1}, + false); IV->addIncoming(Inc, Latch); BranchInst *PreheaderBr = cast<BranchInst>(Preheader->getTerminator()); diff --git a/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops-large-matrixes.ll b/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops-large-matrixes.ll index 868dfec92209a..f1fd3e4d40804 100644 --- a/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops-large-matrixes.ll +++ b/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops-large-matrixes.ll @@ -1019,7 +1019,7 @@ define void @multiply_8x8x8(ptr noalias %A, ptr noalias %B, ptr noalias %C) { ; CHECK: [[INNER_LATCH]]: ; CHECK-NEXT: [[INNER_STEP]] = add i64 [[INNER_IV]], 2 ; CHECK-NEXT: [[INNER_COND:%.*]] = icmp ne i64 [[INNER_STEP]], 8 -; CHECK-NEXT: br i1 [[INNER_COND]], label %[[INNER_HEADER]], label %[[ROWS_LATCH]], !llvm.loop [[LOOP0:![0-9]+]] +; CHECK-NEXT: br i1 [[INNER_COND]], label %[[INNER_HEADER]], label %[[ROWS_LATCH]], !prof [[PROF0:![0-9]+]], !llvm.loop [[LOOP1:![0-9]+]] ; CHECK: [[ROWS_LATCH]]: ; CHECK-NEXT: [[ROWS_STEP]] = add i64 [[ROWS_IV]], 2 ; CHECK-NEXT: [[ROWS_COND:%.*]] = icmp ne i64 [[ROWS_STEP]], 8 @@ -1029,11 +1029,11 @@ define void @multiply_8x8x8(ptr noalias %A, ptr noalias %B, ptr noalias %C) { ; CHECK-NEXT: store <2 x double> [[TMP921]], ptr [[TMP928]], align 8 ; CHECK-NEXT: [[VEC_GEP1260:%.*]] = getelementptr double, ptr [[TMP928]], i64 8 ; CHECK-NEXT: store <2 x double> [[TMP927]], ptr [[VEC_GEP1260]], align 8 -; CHECK-NEXT: br i1 [[ROWS_COND]], label %[[ROWS_HEADER]], label %[[COLS_LATCH]] +; CHECK-NEXT: br i1 [[ROWS_COND]], label %[[ROWS_HEADER]], label %[[COLS_LATCH]], !prof [[PROF0]] ; CHECK: [[COLS_LATCH]]: ; CHECK-NEXT: [[COLS_STEP]] = add i64 [[COLS_IV]], 2 ; CHECK-NEXT: [[COLS_COND:%.*]] = icmp ne i64 [[COLS_STEP]], 8 -; CHECK-NEXT: br i1 [[COLS_COND]], label %[[COLS_HEADER]], label %[[CONTINUE:.*]] +; CHECK-NEXT: br i1 [[COLS_COND]], label %[[COLS_HEADER]], label %[[CONTINUE:.*]], !prof [[PROF0]] ; CHECK: [[CONTINUE]]: ; CHECK-NEXT: ret void ; @@ -1045,6 +1045,7 @@ entry: ret void } ;. -; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]]} -; CHECK: [[META1]] = !{!"llvm.loop.unroll.count", i32 4} +; CHECK: [[PROF0]] = !{!"branch_weights", i32 4, i32 1} +; CHECK: [[LOOP1]] = distinct !{[[LOOP1]], [[META2:![0-9]+]]} +; CHECK: [[META2]] = !{!"llvm.loop.unroll.count", i32 4} ;. diff --git a/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops.ll b/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops.ll index 77da175b7478b..8c6d142550abd 100644 --- a/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops.ll +++ b/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops.ll @@ -50,7 +50,7 @@ define void @multiply_noalias_4x4(ptr noalias %A, ptr noalias %B, ptr noalias %C ; CHECK: inner.latch: ; CHECK-NEXT: [[INNER_STEP]] = add i64 [[INNER_IV]], 2 ; CHECK-NEXT: [[INNER_COND_NOT:%.*]] = icmp eq i64 [[INNER_STEP]], 4 -; CHECK-NEXT: br i1 [[INNER_COND_NOT]], label [[ROWS_LATCH]], label [[INNER_HEADER]], !llvm.loop [[LOOP0:![0-9]+]] +; CHECK-NEXT: br i1 [[INNER_COND_NOT]], label [[ROWS_LATCH]], label [[INNER_HEADER]], !prof [[PROF0:![0-9]+]], !llvm.loop [[LOOP1:![0-9]+]] ; CHECK: rows.latch: ; CHECK-NEXT: [[ROWS_STEP]] = add i64 [[ROWS_IV]], 2 ; CHECK-NEXT: [[ROWS_COND_NOT:%.*]] = icmp eq i64 [[ROWS_STEP]], 4 @@ -60,11 +60,11 @@ define void @multiply_noalias_4x4(ptr noalias %A, ptr noalias %B, ptr noalias %C ; CHECK-NEXT: store <2 x double> [[TMP5]], ptr [[TMP9]], align 8 ; CHECK-NEXT: [[VEC_GEP16:%.*]] = getelementptr i8, ptr [[TMP9]], i64 32 ; CHECK-NEXT: store <2 x double> [[TMP7]], ptr [[VEC_GEP16]], align 8 -; CHECK-NEXT: br i1 [[ROWS_COND_NOT]], label [[COLS_LATCH]], label [[ROWS_HEADER]] +; CHECK-NEXT: br i1 [[ROWS_COND_NOT]], label [[COLS_LATCH]], label [[ROWS_HEADER]], !prof [[PROF0]] ; CHECK: cols.latch: ; CHECK-NEXT: [[COLS_STEP]] = add i64 [[COLS_IV]], 2 ; CHECK-NEXT: [[COLS_COND_NOT:%.*]] = icmp eq i64 [[COLS_STEP]], 4 -; CHECK-NEXT: br i1 [[COLS_COND_NOT]], label [[CONTINUE:%.*]], label [[COLS_HEADER]] +; CHECK-NEXT: br i1 [[COLS_COND_NOT]], label [[CONTINUE:%.*]], label [[COLS_HEADER]], !prof [[PROF0]] ; CHECK: continue: ; CHECK-NEXT: ret void ; @@ -130,7 +130,7 @@ define void @multiply_noalias_2x4(ptr noalias %A, ptr noalias %B, ptr noalias %C ; CHECK: inner.latch: ; CHECK-NEXT: [[INNER_STEP]] = add i64 [[INNER_IV]], 2 ; CHECK-NEXT: [[INNER_COND_NOT:%.*]] = icmp eq i64 [[INNER_STEP]], 4 -; CHECK-NEXT: br i1 [[INNER_COND_NOT]], label [[ROWS_LATCH]], label [[INNER_HEADER]], !llvm.loop [[LOOP2:![0-9]+]] +; CHECK-NEXT: br i1 [[INNER_COND_NOT]], label [[ROWS_LATCH]], label [[INNER_HEADER]], !prof [[PROF0]], !llvm.loop [[LOOP3:![0-9]+]] ; CHECK: rows.latch: ; CHECK-NEXT: [[ROWS_STEP]] = add i64 [[ROWS_IV]], 2 ; CHECK-NEXT: [[ROWS_COND_NOT:%.*]] = icmp eq i64 [[ROWS_IV]], 0 @@ -140,11 +140,11 @@ define void @multiply_noalias_2x4(ptr noalias %A, ptr noalias %B, ptr noalias %C ; CHECK-NEXT: store <2 x i64> [[TMP7]], ptr [[TMP13]], align 8 ; CHECK-NEXT: [[VEC_GEP16:%.*]] = getelementptr i8, ptr [[TMP13]], i64 16 ; CHECK-NEXT: store <2 x i64> [[TMP11]], ptr [[VEC_GEP16]], align 8 -; CHECK-NEXT: br i1 [[ROWS_COND_NOT]], label [[COLS_LATCH]], label [[ROWS_HEADER]] +; CHECK-NEXT: br i1 [[ROWS_COND_NOT]], label [[COLS_LATCH]], label [[ROWS_HEADER]], !prof [[PROF4:![0-9]+]] ; CHECK: cols.latch: ; CHECK-NEXT: [[COLS_STEP]] = add i64 [[COLS_IV]], 2 ; CHECK-NEXT: [[COLS_COND_NOT:%.*]] = icmp eq i64 [[COLS_IV]], 0 -; CHECK-NEXT: br i1 [[COLS_COND_NOT]], label [[CONTINUE:%.*]], label [[COLS_HEADER]] +; CHECK-NEXT: br i1 [[COLS_COND_NOT]], label [[CONTINUE:%.*]], label [[COLS_HEADER]], !prof [[PROF4]] ; CHECK: continue: ; CHECK-NEXT: ret void ; @@ -216,7 +216,7 @@ define void @multiply_noalias_4x2_2x8(ptr noalias %A, ptr noalias %B, ptr noalia ; CHECK: inner.latch: ; CHECK-NEXT: [[INNER_STEP]] = add i64 [[INNER_IV]], 2 ; CHECK-NEXT: [[INNER_COND_NOT:%.*]] = icmp eq i64 [[INNER_IV]], 0 -; CHECK-NEXT: br i1 [[INNER_COND_NOT]], label [[ROWS_LATCH]], label [[INNER_HEADER]], !llvm.loop [[LOOP3:![0-9]+]] +; CHECK-NEXT: br i1 [[INNER_COND_NOT]], label [[ROWS_LATCH]], label [[INNER_HEADER]], !prof [[PROF4]], !llvm.loop [[LOOP5:![0-9]+]] ; CHECK: rows.latch: ; CHECK-NEXT: [[ROWS_STEP]] = add i64 [[ROWS_IV]], 2 ; CHECK-NEXT: [[ROWS_COND_NOT:%.*]] = icmp eq i64 [[ROWS_STEP]], 4 @@ -226,11 +226,11 @@ define void @multiply_noalias_4x2_2x8(ptr noalias %A, ptr noalias %B, ptr noalia ; CHECK-NEXT: store <2 x i64> [[TMP7]], ptr [[TMP13]], align 8 ; CHECK-NEXT: [[VEC_GEP16:%.*]] = getelementptr i8, ptr [[TMP13]], i64 32 ; CHECK-NEXT: store <2 x i64> [[TMP11]], ptr [[VEC_GEP16]], align 8 -; CHECK-NEXT: br i1 [[ROWS_COND_NOT]], label [[COLS_LATCH]], label [[ROWS_HEADER]] +; CHECK-NEXT: br i1 [[ROWS_COND_NOT]], label [[COLS_LATCH]], label [[ROWS_HEADER]], !prof [[PROF0]] ; CHECK: cols.latch: ; CHECK-NEXT: [[COLS_STEP]] = add i64 [[COLS_IV]], 2 ; CHECK-NEXT: [[COLS_COND_NOT:%.*]] = icmp eq i64 [[COLS_STEP]], 8 -; CHECK-NEXT: br i1 [[COLS_COND_NOT]], label [[CONTINUE:%.*]], label [[COLS_HEADER]] +; CHECK-NEXT: br i1 [[COLS_COND_NOT]], label [[CONTINUE:%.*]], label [[COLS_HEADER]], !prof [[PROF7:![0-9]+]] ; CHECK: continue: ; CHECK-NEXT: ret void ; @@ -329,7 +329,7 @@ define void @multiply_alias_2x2(ptr %A, ptr %B, ptr %C) { ; CHECK: inner.latch: ; CHECK-NEXT: [[INNER_STEP]] = add i64 [[INNER_IV]], 2 ; CHECK-NEXT: [[INNER_COND_NOT:%.*]] = icmp eq i64 [[INNER_IV]], 0 -; CHECK-NEXT: br i1 [[INNER_COND_NOT]], label [[ROWS_LATCH]], label [[INNER_HEADER]], !llvm.loop [[LOOP5:![0-9]+]] +; CHECK-NEXT: br i1 [[INNER_COND_NOT]], label [[ROWS_LATCH]], label [[INNER_HEADER]], !prof [[PROF4]], !llvm.loop [[LOOP8:![0-9]+]] ; CHECK: rows.latch: ; CHECK-NEXT: [[ROWS_STEP]] = add i64 [[ROWS_IV]], 2 ; CHECK-NEXT: [[ROWS_COND_NOT:%.*]] = icmp eq i64 [[ROWS_IV]], 0 @@ -339,11 +339,11 @@ define void @multiply_alias_2x2(ptr %A, ptr %B, ptr %C) { ; CHECK-NEXT: store <2 x float> [[TMP15]], ptr [[TMP19]], align 8 ; CHECK-NEXT: [[VEC_GEP23:%.*]] = getelementptr i8, ptr [[TMP19]], i64 8 ; CHECK-NEXT: store <2 x float> [[TMP17]], ptr [[VEC_GEP23]], align 8 -; CHECK-NEXT: br i1 [[ROWS_COND_NOT]], label [[COLS_LATCH]], label [[ROWS_HEADER]] +; CHECK-NEXT: br i1 [[ROWS_COND_NOT]], label [[COLS_LATCH]], label [[ROWS_HEADER]], !prof [[PROF4]] ; CHECK: cols.latch: ; CHECK-NEXT: [[COLS_STEP]] = add i64 [[COLS_IV]], 2 ; CHECK-NEXT: [[COLS_COND_NOT:%.*]] = icmp eq i64 [[COLS_IV]], 0 -; CHECK-NEXT: br i1 [[COLS_COND_NOT]], label [[CONTINUE:%.*]], label [[COLS_HEADER]] +; CHECK-NEXT: br i1 [[COLS_COND_NOT]], label [[CONTINUE:%.*]], label [[COLS_HEADER]], !prof [[PROF4]] ; CHECK: continue: ; CHECK-NEXT: ret void ; diff --git a/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-volatile.ll b/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-volatile.ll index 0852940cd226e..c8227cee8fbb8 100644 --- a/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-volatile.ll +++ b/llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-volatile.ll @@ -1,4 +1,4 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals smart ; RUN: opt -passes=lower-matrix-intrinsics -fuse-matrix-loops-threshold=0 -fuse-matrix-tile-size=2 -matrix-allow-contract -force-fuse-matrix -verify-dom-info %s -S | FileCheck %s ; REQUIRES: aarch64-registered-target @@ -68,7 +68,7 @@ define void @multiply_all_volatile(ptr noalias %A, ptr noalias %B, ptr noalias % ; CHECK: inner.latch: ; CHECK-NEXT: [[INNER_STEP]] = add i64 [[INNER_IV]], 2 ; CHECK-NEXT: [[INNER_COND:%.*]] = icmp ne i64 [[INNER_STEP]], 2 -; CHECK-NEXT: br i1 [[INNER_COND]], label [[INNER_HEADER]], label [[ROWS_LATCH]], !llvm.loop [[LOOP0:![0-9]+]] +; CHECK-NEXT: br i1 [[INNER_COND]], label [[INNER_HEADER]], label [[ROWS_LATCH]], !prof [[PROF0:![0-9]+]], !llvm.loop [[LOOP1:![0-9]+]] ; CHECK: rows.latch: ; CHECK-NEXT: [[ROWS_STEP]] = add i64 [[ROWS_IV]], 2 ; CHECK-NEXT: [[ROWS_COND:%.*]] = icmp ne i64 [[ROWS_STEP]], 2 @@ -78,11 +78,11 @@ define void @multiply_all_volatile(ptr noalias %A, ptr noalias %B, ptr noalias % ; CHECK-NEXT: store volatile <2 x double> [[TMP11]], ptr [[TMP20]], align 8 ; CHECK-NEXT: [[VEC_GEP16:%.*]] = getelementptr double, ptr [[TMP20]], i64 2 ; CHECK-NEXT: store volatile <2 x double> [[TMP17]], ptr [[VEC_GEP16]], align 8 -; CHECK-NEXT: br i1 [[ROWS_COND]], label [[ROWS_HEADER]], label [[COLS_LATCH]] +; CHECK-NEXT: br i1 [[ROWS_COND]], label [[ROWS_HEADER]], label [[COLS_LATCH]], !prof [[PROF0]] ; CHECK: cols.latch: ; CHECK-NEXT: [[COLS_STEP]] = add i64 [[COLS_IV]], 2 ; CHECK-NEXT: [[COLS_COND:%.*]] = icmp ne i64 [[COLS_STEP]], 2 -; CHECK-NEXT: br i1 [[COLS_COND]], label [[COLS_HEADER]], label [[CONTINUE:%.*]] +; CHECK-NEXT: br i1 [[COLS_COND]], label [[COLS_HEADER]], label [[CONTINUE:%.*]], !prof [[PROF0]] ; CHECK: continue: ; CHECK-NEXT: ret void ; @@ -161,7 +161,7 @@ define void @multiply_load0_volatile(ptr noalias %A, ptr noalias %B, ptr noalias ; CHECK: inner.latch: ; CHECK-NEXT: [[INNER_STEP]] = add i64 [[INNER_IV]], 2 ; CHECK-NEXT: [[INNER_COND:%.*]] = icmp ne i64 [[INNER_STEP]], 2 -; CHECK-NEXT: br i1 [[INNER_COND]], label [[INNER_HEADER]], label [[ROWS_LATCH]], !llvm.loop [[LOOP2:![0-9]+]] +; CHECK-NEXT: br i1 [[INNER_COND]], label [[INNER_HEADER]], label [[ROWS_LATCH]], !prof [[PROF0]], !llvm.loop [[LOOP3:![0-9]+]] ; CHECK: rows.latch: ; CHECK-NEXT: [[ROWS_STEP]] = add i64 [[ROWS_IV]], 2 ; CHECK-NEXT: [[ROWS_COND:%.*]] = icmp ne i64 [[ROWS_STEP]], 2 @@ -171,11 +171,11 @@ define void @multiply_load0_volatile(ptr noalias %A, ptr noalias %B, ptr noalias ; CHECK-NEXT: store <2 x double> [[TMP11]], ptr [[TMP20]], align 8 ; CHECK-NEXT: [[VEC_GEP16:%.*]] = getelementptr double, ptr [[TMP20]], i64 2 ; CHECK-NEXT: store <2 x double> [[TMP17]], ptr [[VEC_GEP16]], align 8 -; CHECK-NEXT: br i1 [[ROWS_COND]], label [[ROWS_HEADER]], label [[COLS_LATCH]] +; CHECK-NEXT: br i1 [[ROWS_COND]], label [[ROWS_HEADER]], label [[COLS_LATCH]], !prof [[PROF0]] ; CHECK: cols.latch: ; CHECK-NEXT: [[COLS_STEP]] = add i64 [[COLS_IV]], 2 ; CHECK-NEXT: [[COLS_COND:%.*]] = icmp ne i64 [[COLS_STEP]], 2 -; CHECK-NEXT: br i1 [[COLS_COND]], label [[COLS_HEADER]], label [[CONTINUE:%.*]] +; CHECK-NEXT: br i1 [[COLS_COND]], label [[COLS_HEADER]], label [[CONTINUE:%.*]], !prof [[PROF0]] ; CHECK: continue: ; CHECK-NEXT: ret void ; @@ -253,7 +253,7 @@ define void @multiply_load1_volatile(ptr noalias %A, ptr noalias %B, ptr noalias ; CHECK: inner.latch: ; CHECK-NEXT: [[INNER_STEP]] = add i64 [[INNER_IV]], 2 ; CHECK-NEXT: [[INNER_COND:%.*]] = icmp ne i64 [[INNER_STEP]], 2 -; CHECK-NEXT: br i1 [[INNER_COND]], label [[INNER_HEADER]], label [[ROWS_LATCH]], !llvm.loop [[LOOP3:![0-9]+]] +; CHECK-NEXT: br i1 [[INNER_COND]], label [[INNER_HEADER]], label [[ROWS_LATCH]], !prof [[PROF0]], !llvm.loop [[LOOP4:![0-9]+]] ; CHECK: rows.latch: ; CHECK-NEXT: [[ROWS_STEP]] = add i64 [[ROWS_IV]], 2 ; CHECK-NEXT: [[ROWS_COND:%.*]] = icmp ne i64 [[ROWS_STEP]], 2 @@ -263,11 +263,11 @@ define void @multiply_load1_volatile(ptr noalias %A, ptr noalias %B, ptr noalias ; CHECK-NEXT: store <2 x double> [[TMP11]], ptr [[TMP20]], align 8 ; CHECK-NEXT: [[VEC_GEP16:%.*]] = getelementptr double, ptr [[TMP20]], i64 2 ; CHECK-NEXT: store <2 x double> [[TMP17]], ptr [[VEC_GEP16]], align 8 -; CHECK-NEXT: br i1 [[ROWS_COND]], label [[ROWS_HEADER]], label [[COLS_LATCH]] +; CHECK-NEXT: br i1 [[ROWS_COND]], label [[ROWS_HEADER]], label [[COLS_LATCH]], !prof [[PROF0]] ; CHECK: cols.latch: ; CHECK-NEXT: [[COLS_STEP]] = add i64 [[COLS_IV]], 2 ; CHECK-NEXT: [[COLS_COND:%.*]] = icmp ne i64 [[COLS_STEP]], 2 -; CHECK-NEXT: br i1 [[COLS_COND]], label [[COLS_HEADER]], label [[CONTINUE:%.*]] +; CHECK-NEXT: br i1 [[COLS_COND]], label [[COLS_HEADER]], label [[CONTINUE:%.*]], !prof [[PROF0]] ; CHECK: continue: ; CHECK-NEXT: ret void ; @@ -345,7 +345,7 @@ define void @multiply_store_volatile(ptr noalias %A, ptr noalias %B, ptr noalias ; CHECK: inner.latch: ; CHECK-NEXT: [[INNER_STEP]] = add i64 [[INNER_IV]], 2 ; CHECK-NEXT: [[INNER_COND:%.*]] = icmp ne i64 [[INNER_STEP]], 2 -; CHECK-NEXT: br i1 [[INNER_COND]], label [[INNER_HEADER]], label [[ROWS_LATCH]], !llvm.loop [[LOOP4:![0-9]+]] +; CHECK-NEXT: br i1 [[INNER_COND]], label [[INNER_HEADER]], label [[ROWS_LATCH]], !prof [[PROF0]], !llvm.loop [[LOOP5:![0-9]+]] ; CHECK: rows.latch: ; CHECK-NEXT: [[ROWS_STEP]] = add i64 [[ROWS_IV]], 2 ; CHECK-NEXT: [[ROWS_COND:%.*]] = icmp ne i64 [[ROWS_STEP]], 2 @@ -355,11 +355,11 @@ define void @multiply_store_volatile(ptr noalias %A, ptr noalias %B, ptr noalias ; CHECK-NEXT: store volatile <2 x double> [[TMP11]], ptr [[TMP20]], align 8 ; CHECK-NEXT: [[VEC_GEP16:%.*]] = getelementptr double, ptr [[TMP20]], i64 2 ; CHECK-NEXT: store volatile <2 x double> [[TMP17]], ptr [[VEC_GEP16]], align 8 -; CHECK-NEXT: br i1 [[ROWS_COND]], label [[ROWS_HEADER]], label [[COLS_LATCH]] +; CHECK-NEXT: br i1 [[ROWS_COND]], label [[ROWS_HEADER]], label [[COLS_LATCH]], !prof [[PROF0]] ; CHECK: cols.latch: ; CHECK-NEXT: [[COLS_STEP]] = add i64 [[COLS_IV]], 2 ; CHECK-NEXT: [[COLS_COND:%.*]] = icmp ne i64 [[COLS_STEP]], 2 -; CHECK-NEXT: br i1 [[COLS_COND]], label [[COLS_HEADER]], label [[CONTINUE:%.*]] +; CHECK-NEXT: br i1 [[COLS_COND]], label [[COLS_HEADER]], label [[CONTINUE:%.*]], !prof [[PROF0]] ; CHECK: continue: ; CHECK-NEXT: ret void ; @@ -375,3 +375,11 @@ entry: } declare <4 x double> @llvm.matrix.multiply(<4 x double>, <4 x double>, i32, i32, i32) +;. +; CHECK: [[PROF0]] = !{!"branch_weights", i32 1, i32 1} +; CHECK: [[LOOP1]] = distinct !{[[LOOP1]], [[META2:![0-9]+]]} +; CHECK: [[META2]] = !{!"llvm.loop.unroll.count", i32 1} +; CHECK: [[LOOP3]] = distinct !{[[LOOP3]], [[META2]]} +; CHECK: [[LOOP4]] = distinct !{[[LOOP4]], [[META2]]} +; CHECK: [[LOOP5]] = distinct !{[[LOOP5]], [[META2]]} +;. diff --git a/llvm/utils/profcheck-xfail.txt b/llvm/utils/profcheck-xfail.txt index 63b1cf9696c65..5e9c986b4baee 100644 --- a/llvm/utils/profcheck-xfail.txt +++ b/llvm/utils/profcheck-xfail.txt @@ -183,13 +183,6 @@ Transforms/LowerConstantIntrinsics/objectsize_basic.ll Transforms/LowerGlobalDestructors/lower-global-dtors-existing-dos_handle.ll Transforms/LowerGlobalDestructors/lower-global-dtors.ll Transforms/LowerGlobalDestructors/non-literal-type.ll -Transforms/LowerMatrixIntrinsics/data-layout-multiply-fused.ll -Transforms/LowerMatrixIntrinsics/multiply-fused-dominance.ll -Transforms/LowerMatrixIntrinsics/multiply-fused.ll -Transforms/LowerMatrixIntrinsics/multiply-fused-loops.ll -Transforms/LowerMatrixIntrinsics/multiply-fused-loops-large-matrixes.ll -Transforms/LowerMatrixIntrinsics/multiply-fused-multiple-blocks.ll -Transforms/LowerMatrixIntrinsics/multiply-fused-volatile.ll Transforms/LowerSwitch/2003-05-01-PHIProblem.ll Transforms/LowerSwitch/2004-03-13-SwitchIsDefaultCrash... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/181292 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
