Skip to content

Commit f53d419

Browse files
committed
[Matrix] Add Remarks when matrices get flattened
This is a potential source of overhead, which we might be able to alleviate in some cases. For example, static element extracts, or shuffles that pluck out a specific row.
1 parent 1f1c725 commit f53d419

File tree

6 files changed

+312
-7
lines changed

6 files changed

+312
-7
lines changed

llvm/include/llvm/IR/DiagnosticInfo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,7 @@ class DiagnosticInfoOptimizationBase : public DiagnosticInfoWithLocationBase {
505505

506506
explicit Argument(StringRef Str = "") : Key("String"), Val(Str) {}
507507
Argument(StringRef Key, const Value *V);
508+
Argument(StringRef Key, const Instruction &I);
508509
Argument(StringRef Key, const Type *T);
509510
Argument(StringRef Key, StringRef S);
510511
Argument(StringRef Key, const char *S) : Argument(Key, StringRef(S)) {};

llvm/lib/IR/DiagnosticInfo.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,14 @@ DiagnosticInfoOptimizationBase::Argument::Argument(StringRef Key,
219219
}
220220
}
221221

222+
DiagnosticInfoOptimizationBase::Argument::Argument(StringRef Key,
223+
const Instruction &I)
224+
: Key(std::string(Key)) {
225+
Loc = I.getDebugLoc();
226+
raw_string_ostream OS(Val);
227+
OS << I;
228+
}
229+
222230
DiagnosticInfoOptimizationBase::Argument::Argument(StringRef Key, const Type *T)
223231
: Key(std::string(Key)) {
224232
raw_string_ostream OS(Val);

llvm/lib/Transforms/Scalar/LowerMatrixIntrinsics.cpp

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,37 @@ class LowerMatrixIntrinsics {
572572
SplitVecs.push_back(V);
573573
}
574574

575+
if (ORE) {
576+
if (Instruction *Inst = dyn_cast<Instruction>(MatrixVal)) {
577+
if (Found != Inst2ColumnMatrix.end()) {
578+
ORE->emit([&]() {
579+
// FIXME: SplitVecs.size() doesn't count the shuffles that
580+
// embedInVector created.
581+
return OptimizationRemarkAnalysis(DEBUG_TYPE, "mismatched-shape",
582+
Inst)
583+
<< "matrix reshape from "
584+
<< ore::NV("FromRows", Found->second.getNumRows()) << "x"
585+
<< ore::NV("FromCols", Found->second.getNumColumns())
586+
<< " to " << ore::NV("ToRows", SI.NumRows) << "x"
587+
<< ore::NV("ToCols", SI.NumColumns) << " using at least "
588+
<< ore::NV("Shuffles", SplitVecs.size()) << " shuffles";
589+
});
590+
} else {
591+
ORE->emit([&]() {
592+
return OptimizationRemarkMissed(DEBUG_TYPE,
593+
"unknown-shape-lowering-def", Inst)
594+
<< "splitting a " << ore::NV("Rows", SI.NumRows) << "x"
595+
<< ore::NV("Cols", SI.NumColumns) << " matrix "
596+
<< " with " << ore::NV("Shuffles", SplitVecs.size())
597+
<< " shuffles because we do not have a shape-aware lowering "
598+
"for its def: "
599+
<< ore::NV("Instr", Inst) << ore::setExtraArgs()
600+
<< ore::NV("Opcode", Inst->getOpcodeName());
601+
});
602+
}
603+
}
604+
}
605+
575606
return {SplitVecs};
576607
}
577608

@@ -1351,11 +1382,24 @@ class LowerMatrixIntrinsics {
13511382
ToRemove.push_back(Inst);
13521383
Value *Flattened = nullptr;
13531384
for (Use &U : llvm::make_early_inc_range(Inst->uses())) {
1354-
if (!ShapeMap.contains(U.getUser())) {
1355-
if (!Flattened)
1356-
Flattened = Matrix.embedInVector(Builder);
1357-
U.set(Flattened);
1385+
if (ShapeMap.contains(U.getUser()))
1386+
continue;
1387+
1388+
if (!Flattened) {
1389+
Flattened = Matrix.embedInVector(Builder);
1390+
if (ORE)
1391+
if (Instruction *User = dyn_cast<Instruction>(U.getUser()))
1392+
ORE->emit(OptimizationRemarkMissed(
1393+
DEBUG_TYPE, "unknown-shape-lowering-use", User)
1394+
<< "flattening a " << ore::NV("Rows", Matrix.getNumRows())
1395+
<< "x" << ore::NV("Cols", Matrix.getNumColumns())
1396+
<< " matrix " << ore::NV("Source", *Inst)
1397+
<< " because we do not have a shape-aware lowering for "
1398+
"its user:"
1399+
<< ore::NV("Instr", *User) << ore::setExtraArgs()
1400+
<< ore::NV("Opcode", User->getOpcodeName()));
13581401
}
1402+
U.set(Flattened);
13591403
}
13601404
}
13611405

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt -passes='lower-matrix-intrinsics' -S < %s | FileCheck %s
3+
; RUN: opt -passes=lower-matrix-intrinsics -pass-remarks-missed=lower-matrix-intrinsics < %s -pass-remarks-output=%t -disable-output && FileCheck --input-file %t %s --check-prefix=REMARK
4+
5+
define void @diag_3x3(ptr %in, ptr %out) {
6+
; REMARK-LABEL: --- !Missed
7+
; REMARK-NEXT: Pass: lower-matrix-intrinsics
8+
; REMARK-NEXT: Name: unknown-shape-lowering-use
9+
; REMARK-NEXT: Function: diag_3x3
10+
; REMARK-NEXT: Args:
11+
; REMARK-NEXT: - String: 'flattening a '
12+
; REMARK-NEXT: - Rows: '3'
13+
; REMARK-NEXT: - String: x
14+
; REMARK-NEXT: - Cols: '3'
15+
; REMARK-NEXT: - String: ' matrix '
16+
; REMARK-NEXT: - Source: ' %{{.*}} = call <9 x float> @llvm.matrix.column.major.load.v9f32.i64(ptr %{{.*}}, i64 3, i1 false, i32 3, i32 3)'
17+
; REMARK-NEXT: - String: ' because we do not have a shape-aware lowering for its user:'
18+
; REMARK-NEXT: - Instr: ' %{{.*}} = shufflevector <9 x float> %{{.*}}, <9 x float> poison, <3 x i32> <i32 0, i32 4, i32 8>'
19+
; REMARK-NEXT: - Opcode: shufflevector
20+
; REMARK-NEXT: ...
21+
; CHECK-LABEL: @diag_3x3(
22+
; CHECK-NEXT: [[COL_LOAD:%.*]] = load <3 x float>, ptr [[IN:%.*]], align 4
23+
; CHECK-NEXT: [[VEC_GEP:%.*]] = getelementptr float, ptr [[IN]], i64 3
24+
; CHECK-NEXT: [[COL_LOAD1:%.*]] = load <3 x float>, ptr [[VEC_GEP]], align 4
25+
; CHECK-NEXT: [[VEC_GEP2:%.*]] = getelementptr float, ptr [[IN]], i64 6
26+
; CHECK-NEXT: [[COL_LOAD3:%.*]] = load <3 x float>, ptr [[VEC_GEP2]], align 4
27+
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <3 x float> [[COL_LOAD]], <3 x float> [[COL_LOAD1]], <6 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5>
28+
; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <3 x float> [[COL_LOAD3]], <3 x float> poison, <6 x i32> <i32 0, i32 1, i32 2, i32 poison, i32 poison, i32 poison>
29+
; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <6 x float> [[TMP1]], <6 x float> [[TMP2]], <9 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>
30+
; CHECK-NEXT: [[DIAG:%.*]] = shufflevector <9 x float> [[TMP3]], <9 x float> poison, <3 x i32> <i32 0, i32 4, i32 8>
31+
; CHECK-NEXT: store <3 x float> [[DIAG]], ptr [[OUT:%.*]], align 16
32+
; CHECK-NEXT: ret void
33+
;
34+
%inv = call <9 x float> @llvm.matrix.column.major.load(ptr %in, i64 3, i1 false, i32 3, i32 3)
35+
%diag = shufflevector <9 x float> %inv, <9 x float> poison, <3 x i32> <i32 0, i32 4, i32 8>
36+
store <3 x float> %diag, ptr %out
37+
ret void
38+
}

llvm/test/Transforms/LowerMatrixIntrinsics/transpose-fold.ll

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,46 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2-
; RUN: opt -passes='lower-matrix-intrinsics' -S < %s | FileCheck %s
2+
; RUN: opt -passes='lower-matrix-intrinsics' -S < %s -pass-remarks-output=%t | FileCheck %s && FileCheck --input-file %t --check-prefix=REMARK %s
33

44
; We can only fold matching transposes.
55

66
define void @reshape(ptr %in, ptr %out) {
7+
; REMARK: --- !Analysis
8+
; REMARK-NEXT: Pass: lower-matrix-intrinsics
9+
; REMARK-NEXT: Name: mismatched-shape
10+
; REMARK-NEXT: Function: reshape
11+
; REMARK-NEXT: Args:
12+
; REMARK-NEXT: - String: 'matrix reshape from '
13+
; REMARK-NEXT: - FromRows: '4'
14+
; REMARK-NEXT: - String: x
15+
; REMARK-NEXT: - FromCols: '1'
16+
; REMARK-NEXT: - String: ' to '
17+
; REMARK-NEXT: - ToRows: '2'
18+
; REMARK-NEXT: - String: x
19+
; REMARK-NEXT: - ToCols: '2'
20+
; REMARK-NEXT: - String: ' using at least '
21+
; REMARK-NEXT: - Shuffles: '2'
22+
; REMARK-NEXT: - String: ' shuffles'
23+
; REMARK-NEXT: ...
24+
; REMARK-NEXT: --- !Passed
25+
; REMARK-NEXT: Pass: lower-matrix-intrinsics
26+
; REMARK-NEXT: Name: matrix-lowered
27+
; REMARK-NEXT: Function: reshape
28+
; REMARK-NEXT: Args:
29+
; REMARK-NEXT: - String: 'Lowered with '
30+
; REMARK-NEXT: - NumStores: '8'
31+
; REMARK-NEXT: - String: ' stores, '
32+
; REMARK-NEXT: - NumLoads: '8'
33+
; REMARK-NEXT: - String: ' loads, '
34+
; REMARK-NEXT: - NumComputeOps: '8'
35+
; REMARK-NEXT: - String: ' compute ops, '
36+
; REMARK-NEXT: - NumExposedTransposes: '1'
37+
; REMARK-NEXT: - String: ' exposed transposes'
38+
; REMARK-NEXT: - String: |
39+
; REMARK-NEXT:{{ }}
40+
; REMARK-NEXT: store(
41+
; REMARK-NEXT: transpose.4x1.double(load(addr %in)),
42+
; REMARK-NEXT: addr %out)
43+
; REMARK-NEXT: ...
744
; CHECK-LABEL: define void @reshape(
845
; CHECK-SAME: ptr [[IN:%.*]], ptr [[OUT:%.*]]) {
946
; CHECK-NEXT: [[ENTRY:.*:]]

llvm/test/Transforms/LowerMatrixIntrinsics/transpose-opts.ll

Lines changed: 179 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,68 @@ entry:
5050
}
5151

5252
define void @multiply_ntt(ptr %A, ptr %B, ptr %C, ptr %R) {
53-
; REMARK: Pass: lower-matrix-intrinsics
53+
; REMARK-LABEL: Name: unknown-shape-lowering-def
54+
; REMARK-NEXT: Function: multiply_ntt
55+
; REMARK-NEXT: Args:
56+
; REMARK-NEXT: - String: 'splitting a '
57+
; REMARK-NEXT: - Rows: '2'
58+
; REMARK-NEXT: - String: x
59+
; REMARK-NEXT: - Cols: '3'
60+
; REMARK-NEXT: - String: ' matrix '
61+
; REMARK-NEXT: - String: ' with '
62+
; REMARK-NEXT: - Shuffles: '3'
63+
; REMARK-NEXT: - String: ' shuffles because we do not have a shape-aware lowering for its def: '
64+
; REMARK-NEXT: - Instr: load
65+
; REMARK-NEXT: - Opcode: load
66+
; REMARK-NEXT: ...
67+
; REMARK-NEXT: --- !Missed
68+
; REMARK-NEXT: Pass: lower-matrix-intrinsics
69+
; REMARK-LABEL: Name: unknown-shape-lowering-def
70+
; REMARK-NEXT: Function: multiply_ntt
71+
; REMARK-NEXT: Args:
72+
; REMARK-NEXT: - String: 'splitting a '
73+
; REMARK-NEXT: - Rows: '4'
74+
; REMARK-NEXT: - String: x
75+
; REMARK-NEXT: - Cols: '3'
76+
; REMARK-NEXT: - String: ' matrix '
77+
; REMARK-NEXT: - String: ' with '
78+
; REMARK-NEXT: - Shuffles: '3'
79+
; REMARK-NEXT: - String: ' shuffles because we do not have a shape-aware lowering for its def: '
80+
; REMARK-NEXT: - Instr: call
81+
; REMARK-NEXT: - Opcode: call
82+
; REMARK-NEXT: ...
83+
; REMARK-NEXT: --- !Missed
84+
; REMARK-NEXT: Pass: lower-matrix-intrinsics
85+
; REMARK-LABEL: Name: unknown-shape-lowering-use
86+
; REMARK-NEXT: Function: multiply_ntt
87+
; REMARK-NEXT: Args:
88+
; REMARK-NEXT: - String: 'flattening a '
89+
; REMARK-NEXT: - Rows: '2'
90+
; REMARK-NEXT: - String: x
91+
; REMARK-NEXT: - Cols: '3'
92+
; REMARK-NEXT: - String: ' matrix '
93+
; REMARK-NEXT: - Source: ' %{{.*}} = load <6 x double>, ptr %{{.*}}, align 16'
94+
; REMARK-NEXT: - String: ' because we do not have a shape-aware lowering for its user:'
95+
; REMARK-NEXT: - Instr: ' %{{.*}} = shufflevector <6 x double> %{{.*}}, <6 x double> poison, <2 x i32> <i32 4, i32 5>'
96+
; REMARK-NEXT: - Opcode: shufflevector
97+
; REMARK-NEXT: ...
98+
; REMARK-NEXT: --- !Missed
99+
; REMARK-NEXT: Pass: lower-matrix-intrinsics
100+
; REMARK-LABEL: Name: unknown-shape-lowering-use
101+
; REMARK-NEXT: Function: multiply_ntt
102+
; REMARK-NEXT: Args:
103+
; REMARK-NEXT: - String: 'flattening a '
104+
; REMARK-NEXT: - Rows: '4'
105+
; REMARK-NEXT: - String: x
106+
; REMARK-NEXT: - Cols: '3'
107+
; REMARK-NEXT: - String: ' matrix '
108+
; REMARK-NEXT: - Source: ' %{{.*}} = call <12 x double> @llvm.matrix.multiply.v12f64.v8f64.v6f64(<8 x double> %{{.*}}, <6 x double> %{{.*}}, i32 4, i32 2, i32 3)'
109+
; REMARK-NEXT: - String: ' because we do not have a shape-aware lowering for its user:'
110+
; REMARK-NEXT: - Instr: ' %{{.*}} = shufflevector <12 x double> %{{.*}}, <12 x double> poison, <4 x i32> <i32 8, i32 9, i32 10, i32 11>'
111+
; REMARK-NEXT: - Opcode: shufflevector
112+
; REMARK-NEXT: ...
113+
; REMARK-NEXT: --- !Passed
114+
; REMARK-NEXT: Pass: lower-matrix-intrinsics
54115
; REMARK-NEXT: Name: matrix-lowered
55116
; REMARK-NEXT: Function: multiply_ntt
56117
; REMARK-NEXT: Args:
@@ -438,7 +499,68 @@ entry:
438499
}
439500

440501
define void @multiply_nt_t(ptr %A, ptr %B, ptr %C) {
441-
; REMARK: Pass: lower-matrix-intrinsics
502+
; REMARK-LABEL: Name: unknown-shape-lowering-def
503+
; REMARK-NEXT: Function: multiply_nt_t
504+
; REMARK-NEXT: Args:
505+
; REMARK-NEXT: - String: 'splitting a '
506+
; REMARK-NEXT: - Rows: '4'
507+
; REMARK-NEXT: - String: x
508+
; REMARK-NEXT: - Cols: '3'
509+
; REMARK-NEXT: - String: ' matrix '
510+
; REMARK-NEXT: - String: ' with '
511+
; REMARK-NEXT: - Shuffles: '3'
512+
; REMARK-NEXT: - String: ' shuffles because we do not have a shape-aware lowering for its def: '
513+
; REMARK-NEXT: - Instr: load
514+
; REMARK-NEXT: - Opcode: load
515+
; REMARK-NEXT: ...
516+
; REMARK-NEXT: --- !Missed
517+
; REMARK-NEXT: Pass: lower-matrix-intrinsics
518+
; REMARK-LABEL: Name: unknown-shape-lowering-def
519+
; REMARK-NEXT: Function: multiply_nt_t
520+
; REMARK-NEXT: Args:
521+
; REMARK-NEXT: - String: 'splitting a '
522+
; REMARK-NEXT: - Rows: '2'
523+
; REMARK-NEXT: - String: x
524+
; REMARK-NEXT: - Cols: '3'
525+
; REMARK-NEXT: - String: ' matrix '
526+
; REMARK-NEXT: - String: ' with '
527+
; REMARK-NEXT: - Shuffles: '3'
528+
; REMARK-NEXT: - String: ' shuffles because we do not have a shape-aware lowering for its def: '
529+
; REMARK-NEXT: - Instr: load
530+
; REMARK-NEXT: - Opcode: load
531+
; REMARK-NEXT: ...
532+
; REMARK-NEXT: --- !Missed
533+
; REMARK-NEXT: Pass: lower-matrix-intrinsics
534+
; REMARK-LABEL: Name: unknown-shape-lowering-use
535+
; REMARK-NEXT: Function: multiply_nt_t
536+
; REMARK-NEXT: Args:
537+
; REMARK-NEXT: - String: 'flattening a '
538+
; REMARK-NEXT: - Rows: '2'
539+
; REMARK-NEXT: - String: x
540+
; REMARK-NEXT: - Cols: '3'
541+
; REMARK-NEXT: - String: ' matrix '
542+
; REMARK-NEXT: - Source: ' %{{.*}} = load <6 x double>, ptr %{{.*}}, align 16'
543+
; REMARK-NEXT: - String: ' because we do not have a shape-aware lowering for its user:'
544+
; REMARK-NEXT: - Instr: ' %{{.*}} = shufflevector <6 x double> %{{.*}}, <6 x double> poison, <2 x i32> <i32 4, i32 5>'
545+
; REMARK-NEXT: - Opcode: shufflevector
546+
; REMARK-NEXT: ...
547+
; REMARK-NEXT: --- !Missed
548+
; REMARK-NEXT: Pass: lower-matrix-intrinsics
549+
; REMARK-LABEL: Name: unknown-shape-lowering-use
550+
; REMARK-NEXT: Function: multiply_nt_t
551+
; REMARK-NEXT: Args:
552+
; REMARK-NEXT: - String: 'flattening a '
553+
; REMARK-NEXT: - Rows: '4'
554+
; REMARK-NEXT: - String: x
555+
; REMARK-NEXT: - Cols: '3'
556+
; REMARK-NEXT: - String: ' matrix '
557+
; REMARK-NEXT: - Source: ' %{{.*}} = load <12 x double>, ptr %B, align 16'
558+
; REMARK-NEXT: - String: ' because we do not have a shape-aware lowering for its user:'
559+
; REMARK-NEXT: - Instr: ' %{{.*}} = shufflevector <12 x double> %{{.*}}, <12 x double> poison, <4 x i32> <i32 8, i32 9, i32 10, i32 11>'
560+
; REMARK-NEXT: - Opcode: shufflevector
561+
; REMARK-NEXT: ...
562+
; REMARK-NEXT: --- !Passed
563+
; REMARK-NEXT: Pass: lower-matrix-intrinsics
442564
; REMARK-NEXT: Name: matrix-lowered
443565
; REMARK-NEXT: Function: multiply_nt_t
444566
; REMARK-NEXT: Args:
@@ -573,6 +695,61 @@ entry:
573695
}
574696

575697
define void @multiply_ntt_t(ptr %A, ptr %B, ptr %C, ptr %R) {
698+
; REMARK-LABEL: Name: unknown-shape-lowering-def
699+
; REMARK-NEXT: Function: multiply_ntt_t
700+
; REMARK-NEXT: Args:
701+
; REMARK-NEXT: - String: 'splitting a '
702+
; REMARK-NEXT: - Rows: '3'
703+
; REMARK-NEXT: - String: x
704+
; REMARK-NEXT: - Cols: '3'
705+
; REMARK-NEXT: - String: ' matrix '
706+
; REMARK-NEXT: - String: ' with '
707+
; REMARK-NEXT: - Shuffles: '3'
708+
; REMARK-NEXT: - String: ' shuffles because we do not have a shape-aware lowering for its def: '
709+
; REMARK-NEXT: - Instr: call
710+
; REMARK-NEXT: - Opcode: call
711+
; REMARK-NEXT: ...
712+
; REMARK-LABEL: Name: unknown-shape-lowering-def
713+
; REMARK-NEXT: Function: multiply_ntt_t
714+
; REMARK-NEXT: Args:
715+
; REMARK-NEXT: - String: 'splitting a '
716+
; REMARK-NEXT: - Rows: '3'
717+
; REMARK-NEXT: - String: x
718+
; REMARK-NEXT: - Cols: '3'
719+
; REMARK-NEXT: - String: ' matrix '
720+
; REMARK-NEXT: - String: ' with '
721+
; REMARK-NEXT: - Shuffles: '3'
722+
; REMARK-NEXT: - String: ' shuffles because we do not have a shape-aware lowering for its def: '
723+
; REMARK-NEXT: - Instr: load
724+
; REMARK-NEXT: - Opcode: load
725+
; REMARK-NEXT: ...
726+
; REMARK-LABEL: Name: unknown-shape-lowering-use
727+
; REMARK-NEXT: Function: multiply_ntt_t
728+
; REMARK-NEXT: Args:
729+
; REMARK-NEXT: - String: 'flattening a '
730+
; REMARK-NEXT: - Rows: '3'
731+
; REMARK-NEXT: - String: x
732+
; REMARK-NEXT: - Cols: '3'
733+
; REMARK-NEXT: - String: ' matrix '
734+
; REMARK-NEXT: - Source: ' %{{.*}} = load <9 x double>, ptr %A, align 16'
735+
; REMARK-NEXT: - String: ' because we do not have a shape-aware lowering for its user:'
736+
; REMARK-NEXT: - Instr: ' %{{.*}} = shufflevector <9 x double> %{{.*}}, <9 x double> poison, <3 x i32> <i32 6, i32 7, i32 8>'
737+
; REMARK-NEXT: - Opcode: shufflevector
738+
; REMARK-NEXT: ...
739+
; REMARK-LABEL: Pass: lower-matrix-intrinsics
740+
; REMARK-NEXT: Name: unknown-shape-lowering-use
741+
; REMARK-NEXT: Function: multiply_ntt_t
742+
; REMARK-NEXT: Args:
743+
; REMARK-NEXT: - String: 'flattening a '
744+
; REMARK-NEXT: - Rows: '3'
745+
; REMARK-NEXT: - String: x
746+
; REMARK-NEXT: - Cols: '3'
747+
; REMARK-NEXT: - String: ' matrix '
748+
; REMARK-NEXT: - Source: ' %{{.*}} = call <9 x double> @llvm.matrix.multiply.v9f64.v9f64.v9f64(<9 x double> %{{.*}}, <9 x double> %{{.*}}, i32 3, i32 3, i32 3)'
749+
; REMARK-NEXT: - String: ' because we do not have a shape-aware lowering for its user:'
750+
; REMARK-NEXT: - Instr: ' %{{.*}} = shufflevector <9 x double> %{{.*}}, <9 x double> poison, <3 x i32> <i32 6, i32 7, i32 8>'
751+
; REMARK-NEXT: - Opcode: shufflevector
752+
; REMARK-NEXT: ...
576753
; REMARK: Pass: lower-matrix-intrinsics
577754
; REMARK-NEXT: Name: matrix-lowered
578755
; REMARK-NEXT: Function: multiply_ntt_t

0 commit comments

Comments
 (0)