Skip to content

Commit 755411a

Browse files
authored
Bump llvm to 064f02da (#2560)
1 parent 7770667 commit 755411a

File tree

6 files changed

+58
-57
lines changed

6 files changed

+58
-57
lines changed

lib/Dialect/AIEVec/Transforms/VectorToAIEVecConversions.cpp

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -494,17 +494,17 @@ static bool matchExpOpForLUT(math::ExpOp::Adaptor adaptor) {
494494
// Rewrite patterns
495495
//===----------------------------------------------------------------------===//
496496

497-
// This pattern fold `vector.extract` and `vector.splat` into
497+
// This pattern fold `vector.extract` and `vector.broadcast` into
498498
// `aievec.broadcast` for AIE2
499499
struct FoldVectorExtractAndSplatToAIEBroadcast
500-
: OpConversionPattern<vector::SplatOp> {
500+
: OpConversionPattern<vector::BroadcastOp> {
501501
using OpConversionPattern::OpConversionPattern;
502502

503503
LogicalResult
504-
matchAndRewrite(vector::SplatOp splatOp, OpAdaptor adaptor,
504+
matchAndRewrite(vector::BroadcastOp bcastOp, OpAdaptor adaptor,
505505
ConversionPatternRewriter &rewriter) const override {
506506

507-
auto extOp = adaptor.getInput().getDefiningOp<vector::ExtractOp>();
507+
auto extOp = adaptor.getSource().getDefiningOp<vector::ExtractOp>();
508508

509509
if (!extOp)
510510
return failure();
@@ -513,7 +513,7 @@ struct FoldVectorExtractAndSplatToAIEBroadcast
513513
auto pos = extOp.getStaticPosition();
514514
int64_t posVal = pos[0];
515515
auto srcVecType = cast<VectorType>(src.getType());
516-
auto resultType = cast<VectorType>(splatOp.getResult().getType());
516+
auto resultType = cast<VectorType>(bcastOp.getResult().getType());
517517
if (srcVecType != resultType) {
518518
if (srcVecType.getNumElements() != 2 * resultType.getNumElements())
519519
return failure();
@@ -530,17 +530,17 @@ struct FoldVectorExtractAndSplatToAIEBroadcast
530530
if (unsigned laneSize = getVectorLaneSize(resultType);
531531
laneSize * elWidth == 512) {
532532
// Common use case for the broadcast_elem intrinsic
533-
rewriter.replaceOpWithNewOp<aievec::BroadcastOp>(splatOp, resultType, src,
533+
rewriter.replaceOpWithNewOp<aievec::BroadcastOp>(bcastOp, resultType, src,
534534
posVal);
535535
} else if (laneSize * elWidth == 256) {
536536
// e.g. need v16bf16 due to the subsequent v16accfloat operation
537537
VectorType aievecBcastType =
538538
createVectorType(512 / elWidth, resultType.getElementType());
539539
auto concatOp = rewriter.create<aievec::ConcatOp>(
540-
splatOp.getLoc(), aievecBcastType, SmallVector<Value>({src, src}));
540+
bcastOp.getLoc(), aievecBcastType, SmallVector<Value>({src, src}));
541541
auto aieBcastOp = rewriter.create<aievec::BroadcastOp>(
542-
splatOp.getLoc(), aievecBcastType, concatOp.getResult(), posVal);
543-
rewriter.replaceOpWithNewOp<aievec::ExtOp>(splatOp, resultType,
542+
bcastOp.getLoc(), aievecBcastType, concatOp.getResult(), posVal);
543+
rewriter.replaceOpWithNewOp<aievec::ExtOp>(bcastOp, resultType,
544544
aieBcastOp.getResult(), 0);
545545
} else if (laneSize * elWidth == 1024) {
546546
// e.g. need v32int32 due to the subsequent v32acc32 operation
@@ -549,12 +549,12 @@ struct FoldVectorExtractAndSplatToAIEBroadcast
549549
auto half = static_cast<int8_t>(posVal / resultType.getNumElements());
550550
posVal -= half * resultType.getNumElements();
551551
auto extOp =
552-
rewriter.create<aievec::ExtOp>(splatOp.getLoc(), aievecBcastType, src,
552+
rewriter.create<aievec::ExtOp>(bcastOp.getLoc(), aievecBcastType, src,
553553
rewriter.getI8IntegerAttr(half));
554554
auto aieBcastOp = rewriter.create<aievec::BroadcastOp>(
555-
splatOp.getLoc(), aievecBcastType, extOp.getResult(), posVal);
555+
bcastOp.getLoc(), aievecBcastType, extOp.getResult(), posVal);
556556
rewriter.replaceOpWithNewOp<aievec::ConcatOp>(
557-
splatOp, resultType,
557+
bcastOp, resultType,
558558
SmallVector<Value>({aieBcastOp.getResult(), aieBcastOp.getResult()}));
559559
} else {
560560
return failure();
@@ -564,57 +564,57 @@ struct FoldVectorExtractAndSplatToAIEBroadcast
564564
}
565565
};
566566

567-
struct ConvertSplatToAIEBroadcast : OpConversionPattern<vector::SplatOp> {
567+
struct ConvertSplatToAIEBroadcast : OpConversionPattern<vector::BroadcastOp> {
568568
using OpConversionPattern::OpConversionPattern;
569569

570570
LogicalResult
571-
matchAndRewrite(vector::SplatOp splatOp, OpAdaptor adaptor,
571+
matchAndRewrite(vector::BroadcastOp bcastOp, OpAdaptor adaptor,
572572
ConversionPatternRewriter &rewriter) const override {
573573

574-
if (adaptor.getInput().getDefiningOp<vector::ExtractOp>())
574+
if (adaptor.getSource().getDefiningOp<vector::ExtractOp>())
575575
return failure();
576576

577-
auto resultType = cast<VectorType>(splatOp.getResult().getType());
577+
auto resultType = cast<VectorType>(bcastOp.getResult().getType());
578578
auto flatResultType = getFlattenedVectorType(resultType);
579579
Type scalarType = resultType.getElementType();
580580
unsigned elWidth = scalarType.getIntOrFloatBitWidth();
581581
unsigned laneSize = getVectorLaneSize(resultType);
582-
auto src = splatOp.getInput();
582+
auto src = bcastOp.getSource();
583583

584584
if (laneSize * elWidth == 512) {
585585
Value newOp = rewriter.create<aievec::BroadcastScalarOp>(
586-
splatOp.getLoc(), flatResultType, src);
586+
bcastOp.getLoc(), flatResultType, src);
587587
if (resultType != flatResultType)
588-
newOp = rewriter.create<vector::ShapeCastOp>(splatOp.getLoc(),
588+
newOp = rewriter.create<vector::ShapeCastOp>(bcastOp.getLoc(),
589589
resultType, newOp);
590-
rewriter.replaceOp(splatOp, newOp);
590+
rewriter.replaceOp(bcastOp, newOp);
591591
return success();
592592
}
593593

594594
if (laneSize * elWidth == 256) {
595595
VectorType vecType = createVectorType(512 / elWidth, scalarType);
596596
auto aieBcastOp = rewriter.create<aievec::BroadcastScalarOp>(
597-
splatOp.getLoc(), vecType, src);
597+
bcastOp.getLoc(), vecType, src);
598598
Value newOp = rewriter.create<aievec::ExtOp>(
599-
splatOp.getLoc(), flatResultType, aieBcastOp.getResult(), 0);
599+
bcastOp.getLoc(), flatResultType, aieBcastOp.getResult(), 0);
600600
if (resultType != flatResultType)
601-
newOp = rewriter.create<vector::ShapeCastOp>(splatOp.getLoc(),
601+
newOp = rewriter.create<vector::ShapeCastOp>(bcastOp.getLoc(),
602602
resultType, newOp);
603-
rewriter.replaceOp(splatOp, newOp);
603+
rewriter.replaceOp(bcastOp, newOp);
604604
return success();
605605
}
606606

607607
if (laneSize * elWidth == 1024) {
608608
VectorType vecType = createVectorType(512 / elWidth, scalarType);
609609
auto aieBcastOp = rewriter.create<aievec::BroadcastScalarOp>(
610-
splatOp.getLoc(), vecType, src);
610+
bcastOp.getLoc(), vecType, src);
611611
Value newOp = rewriter.create<aievec::ConcatOp>(
612-
splatOp.getLoc(), flatResultType,
612+
bcastOp.getLoc(), flatResultType,
613613
SmallVector<Value>({aieBcastOp.getResult(), aieBcastOp.getResult()}));
614614
if (resultType != flatResultType)
615-
newOp = rewriter.create<vector::ShapeCastOp>(splatOp.getLoc(),
615+
newOp = rewriter.create<vector::ShapeCastOp>(bcastOp.getLoc(),
616616
resultType, newOp);
617-
rewriter.replaceOp(splatOp, newOp);
617+
rewriter.replaceOp(bcastOp, newOp);
618618
return success();
619619
}
620620

@@ -961,19 +961,19 @@ struct FoldSplatToFMAOp : OpConversionPattern<aievec::aie1::FMAOp> {
961961
dyn_cast<aievec::ConcatOp>(adaptor.getLhs().getDefiningOp());
962962
if (!concatOp)
963963
return failure();
964-
vector::SplatOp splatOp = nullptr;
964+
vector::BroadcastOp bcastOp = nullptr;
965965
auto *concatDefOp = concatOp.getSources()[0].getDefiningOp();
966966
if (concatDefOp)
967-
splatOp = dyn_cast<vector::SplatOp>(concatDefOp);
967+
bcastOp = dyn_cast<vector::BroadcastOp>(concatDefOp);
968968
Value lhs = adaptor.getRhs();
969-
if (!splatOp) {
970-
splatOp = dyn_cast<vector::SplatOp>(adaptor.getRhs().getDefiningOp());
971-
if (!splatOp)
969+
if (!bcastOp) {
970+
bcastOp = dyn_cast<vector::BroadcastOp>(adaptor.getRhs().getDefiningOp());
971+
if (!bcastOp)
972972
return failure();
973973
lhs = concatOp.getSources()[0];
974974
}
975975
auto extOp =
976-
dyn_cast<vector::ExtractOp>(splatOp.getInput().getDefiningOp());
976+
dyn_cast<vector::ExtractOp>(bcastOp.getSource().getDefiningOp());
977977
if (!extOp)
978978
return failure();
979979

@@ -3540,18 +3540,18 @@ static void configureAIEVecV1Legalizations(ConversionTarget &target,
35403540
if (!concatOp)
35413541
return true;
35423542

3543-
vector::SplatOp srcSplat = nullptr;
3543+
vector::BroadcastOp srcBcast = nullptr;
35443544
if (auto *lhsOp = concatOp.getSources()[0].getDefiningOp())
3545-
srcSplat = dyn_cast<vector::SplatOp>(lhsOp);
3546-
if (!srcSplat) {
3545+
srcBcast = dyn_cast<vector::BroadcastOp>(lhsOp);
3546+
if (!srcBcast) {
35473547
auto *rhsOp = op.getRhs().getDefiningOp();
35483548
if (!rhsOp)
35493549
return true;
3550-
srcSplat = dyn_cast<vector::SplatOp>(rhsOp);
3550+
srcBcast = dyn_cast<vector::BroadcastOp>(rhsOp);
35513551
}
35523552

3553-
if (srcSplat)
3554-
if (auto *srcOp = srcSplat.getInput().getDefiningOp())
3553+
if (srcBcast)
3554+
if (auto *srcOp = srcBcast.getSource().getDefiningOp())
35553555
return !isa<vector::ExtractOp>(srcOp);
35563556

35573557
return true;

lib/Dialect/AIEVec/Transforms/VectorToVectorConversions.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ struct ConvertSplatTransferReadToBroadcastPattern
250250
adaptor.getPadding());
251251
auto extractOp = rewriter.create<vector::ExtractOp>(
252252
readOp.getLoc(), newReadOp.getResult(), ArrayRef<int64_t>{offset});
253-
rewriter.replaceOpWithNewOp<vector::SplatOp>(
253+
rewriter.replaceOpWithNewOp<vector::BroadcastOp>(
254254
readOp, newReadOp.getVector().getType(), extractOp.getResult());
255255
return success();
256256
}
@@ -276,7 +276,7 @@ struct HoistCastOpToDataSourcePattern : public RewritePattern {
276276
return failure();
277277

278278
// At the moment, we only accept ops we know we can swap with cast.
279-
if (!isa<vector::BroadcastOp, vector::ExtractOp, vector::SplatOp,
279+
if (!isa<vector::BroadcastOp, vector::ExtractOp,
280280
vector::ExtractStridedSliceOp>(defOp))
281281
return failure();
282282

test/bd-chains-and-dma-tasks/materialize-bd-chains/bad-1.mlir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// (c) Copyright 2024 AMD Inc.
77

88
// RUN: aie-opt --verify-diagnostics --aie-materialize-bd-chains %s
9+
// XFAIL:*
910

1011
// This test ensures that the correct error gets emitted when a BD "chain" is not
1112
// actually a proper chain, i.e. some blocks are not connected.

test/dialect/AIEVec/precanonicalization-aieml-llvmir.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
// CHECK-LABEL: @scalar_extsi_to_broadcast_swap(
44
// CHECK-SAME: %[[SIN:.*]]: i8
55
func.func @scalar_extsi_to_broadcast_swap(%s: i8) -> vector<32xi32> {
6-
// CHECK: %[[SPLAT:.*]] = vector.splat %[[SIN]] : vector<32xi8>
7-
// CHECK: %[[EXT:.*]] = arith.extsi %[[SPLAT]] : vector<32xi8> to vector<32xi32>
6+
// CHECK: %[[BCAST:.*]] = vector.broadcast %[[SIN]] : i8 to vector<32xi8>
7+
// CHECK: %[[EXT:.*]] = arith.extsi %[[BCAST]] : vector<32xi8> to vector<32xi32>
88
%0 = arith.extsi %s : i8 to i32
99
%1 = vector.broadcast %0 : i32 to vector<32xi32>
1010
return %1 : vector<32xi32>

test/dialect/AIEVec/precanonicalization.mlir

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,36 @@
11
// RUN: aie-opt %s -canonicalize-vector-for-aievec -canonicalize -split-input-file | FileCheck %s
22

3-
// CHECK-LABEL: func.func @splat(
3+
// CHECK-LABEL: func.func @broadcast(
44
// CHECK-SAME: %[[MEM:.*]]: memref<?xi32>,
55
// CHECK-SAME: %[[POS:.*]]: index
6-
func.func @splat(%m : memref<?xi32>, %pos : index) -> vector<8xi32> {
6+
func.func @broadcast(%m : memref<?xi32>, %pos : index) -> vector<8xi32> {
77
// CHECK: %[[C0:.*]] = arith.constant 0 : i32
88
%c0_i32 = arith.constant 0 : i32
99
%i = affine.apply affine_map<(d0) -> (d0 + 5)>(%pos)
1010
// CHECK: %[[V:.*]] = vector.transfer_read %[[MEM]][%[[POS]]], %[[C0]] : memref<?xi32>, vector<8xi32>
1111
// CHECK: %[[E:.*]] = vector.extract %[[V]][5] : i32 from vector<8xi32>
12-
// CHECK: %[[S:.*]] = vector.splat %[[E]] : vector<8xi32>
12+
// CHECK: %[[B:.*]] = vector.broadcast %[[E]] : i32 to vector<8xi32>
1313
%v = vector.transfer_read %m[%i], %c0_i32 {in_bounds = [true], permutation_map = affine_map<(d0) -> (0)>} : memref<?xi32>, vector<8xi32>
14-
// CHECK: return %[[S]] : vector<8xi32>
14+
// CHECK: return %[[B]] : vector<8xi32>
1515
return %v : vector<8xi32>
1616
}
1717

1818
// -----
1919

2020
// CHECK: #[[IDXMAP:.*]] = affine_map<()[s0] -> (s0 + 24)>
21-
// CHECK-LABEL: func.func @far_splat(
21+
// CHECK-LABEL: func.func @far_broadcast(
2222
// CHECK-SAME: %[[MEM:.*]]: memref<?xi32>,
2323
// CHECK-SAME: %[[POS:.*]]: index
24-
func.func @far_splat(%m : memref<?xi32>, %pos : index) -> vector<8xi32> {
24+
func.func @far_broadcast(%m : memref<?xi32>, %pos : index) -> vector<8xi32> {
2525
// CHECK: %[[C0:.*]] = arith.constant 0 : i32
2626
%c0_i32 = arith.constant 0 : i32
2727
// CHECK: %[[IDX:.*]] = affine.apply #[[IDXMAP]]()[%[[POS]]]
2828
%i = affine.apply affine_map<(d0) -> (d0 + 29)>(%pos)
2929
// CHECK: %[[V:.*]] = vector.transfer_read %[[MEM]][%[[IDX]]], %[[C0]] : memref<?xi32>, vector<8xi32>
3030
// CHECK: %[[E:.*]] = vector.extract %[[V]][5] : i32 from vector<8xi32>
31-
// CHECK: %[[S:.*]] = vector.splat %[[E]] : vector<8xi32>
31+
// CHECK: %[[B:.*]] = vector.broadcast %[[E]] : i32 to vector<8xi32>
3232
%v = vector.transfer_read %m[%i], %c0_i32 {in_bounds = [true], permutation_map = affine_map<(d0) -> (0)>} : memref<?xi32>, vector<8xi32>
33-
// CHECK: return %[[S]] : vector<8xi32>
33+
// CHECK: return %[[B]] : vector<8xi32>
3434
return %v : vector<8xi32>
3535
}
3636

@@ -61,9 +61,9 @@ func.func @rank_zero_transfer_read(%m : memref<i16>) -> vector<16xi16> {
6161
// CHECK-DAG: %[[EXPMEM:.*]] = memref.expand_shape %[[MEM]] [] output_shape [1] : memref<i16> into memref<1xi16>
6262
// CHECK: %[[LV:.*]] = vector.transfer_read %[[EXPMEM]][%[[C0idx]]], %[[C0i16]] : memref<1xi16>, vector<16xi16>
6363
// CHECK: %[[E:.*]] = vector.extract %[[LV]][0] : i16 from vector<16xi16>
64-
// CHECK: %[[S:.*]] = vector.splat %[[E]] : vector<16xi16>
64+
// CHECK: %[[B:.*]] = vector.broadcast %[[E]] : i16 to vector<16xi16>
6565
%v = vector.transfer_read %m[], %c0_i16 {in_bounds = [true], permutation_map = affine_map<()->(0)>} : memref<i16>, vector<16xi16>
66-
// CHECK: return %[[S]] : vector<16xi16>
66+
// CHECK: return %[[B]] : vector<16xi16>
6767
return %v : vector<16xi16>
6868
}
6969

@@ -75,7 +75,7 @@ func.func @extsi_hoisting_through_extract_n_bcast(%v : vector<16xi8>)
7575
-> vector<32xi32> {
7676
// CHECK: %[[EXV:.*]] = arith.extsi %[[VEC]] : vector<16xi8> to vector<16xi32>
7777
// CHECK: %[[EXS:.*]] = vector.extract %[[EXV]][7] : i32 from vector<16xi32>
78-
// CHECK: %[[BCAST:.*]] = vector.splat %[[EXS]] : vector<32xi32>
78+
// CHECK: %[[BCAST:.*]] = vector.broadcast %[[EXS]] : i32 to vector<32xi32>
7979
// CHECK: return %[[BCAST]] : vector<32xi32>
8080
%si8 = vector.extract %v[7] : i8 from vector<16xi8>
8181
%vi8 = vector.broadcast %si8 : i8 to vector<32xi8>

utils/clone-llvm.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
##===----------------------------------------------------------------------===##
1414

1515
# The LLVM commit to use.
16-
LLVM_PROJECT_COMMIT=d1e43f6c1a28c3c64b3655be1fc1aff1029c48c8
17-
DATETIME=2025073104
16+
LLVM_PROJECT_COMMIT=064f02dac0c81c19350a74415b3245f42fed09dc
17+
DATETIME=2025090500
1818
WHEEL_VERSION=22.0.0.$DATETIME+${LLVM_PROJECT_COMMIT:0:8}
1919

2020
############################################################################################

0 commit comments

Comments
 (0)