Skip to content

Commit f9cdd22

Browse files
committed
[mlir][LLVMIR] Adding ivdepEnable parameter in LoopVectorizeAttr
`loop.vectorize.ivdep.enable` metadata has been added to LLVM to ignoring vector dependencies. Adding this parameter to LoopVectorizeAttr will allow Flang to use this metadata with the `!DIR$ IVDEP` directive.
1 parent c80d495 commit f9cdd22

File tree

5 files changed

+27
-23
lines changed

5 files changed

+27
-23
lines changed

mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,14 @@ def LoopVectorizeAttr : LLVM_Attr<"LoopVectorize", "loop_vectorize"> {
106106
the "!llvm.loop.vectorize" metadata.
107107
}];
108108

109-
let parameters = (ins
110-
OptionalParameter<"BoolAttr">:$disable,
111-
OptionalParameter<"BoolAttr">:$predicateEnable,
112-
OptionalParameter<"BoolAttr">:$scalableEnable,
113-
OptionalParameter<"IntegerAttr">:$width,
114-
OptionalParameter<"LoopAnnotationAttr">:$followupVectorized,
115-
OptionalParameter<"LoopAnnotationAttr">:$followupEpilogue,
116-
OptionalParameter<"LoopAnnotationAttr">:$followupAll
117-
);
109+
let parameters = (ins OptionalParameter<"BoolAttr">:$disable,
110+
OptionalParameter<"BoolAttr">:$predicateEnable,
111+
OptionalParameter<"BoolAttr">:$scalableEnable,
112+
OptionalParameter<"BoolAttr">:$ivdepEnable,
113+
OptionalParameter<"IntegerAttr">:$width,
114+
OptionalParameter<"LoopAnnotationAttr">:$followupVectorized,
115+
OptionalParameter<"LoopAnnotationAttr">:$followupEpilogue,
116+
OptionalParameter<"LoopAnnotationAttr">:$followupAll);
118117

119118
let assemblyFormat = "`<` struct(params) `>`";
120119

mlir/lib/Target/LLVMIR/LoopAnnotationImporter.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,8 @@ FailureOr<LoopVectorizeAttr> LoopMetadataConversion::convertVectorizeAttr() {
291291
lookupBoolNode("llvm.loop.vectorize.predicate.enable");
292292
FailureOr<BoolAttr> scalableEnable =
293293
lookupBoolNode("llvm.loop.vectorize.scalable.enable");
294+
FailureOr<BoolAttr> ivdepEnable =
295+
lookupBoolNode("llvm.loop.vectorize.ivdep.enable");
294296
FailureOr<IntegerAttr> width = lookupIntNode("llvm.loop.vectorize.width");
295297
FailureOr<LoopAnnotationAttr> followupVec =
296298
lookupFollowupNode("llvm.loop.vectorize.followup_vectorized");
@@ -299,9 +301,9 @@ FailureOr<LoopVectorizeAttr> LoopMetadataConversion::convertVectorizeAttr() {
299301
FailureOr<LoopAnnotationAttr> followupAll =
300302
lookupFollowupNode("llvm.loop.vectorize.followup_all");
301303

302-
return createIfNonNull<LoopVectorizeAttr>(ctx, enable, predicateEnable,
303-
scalableEnable, width, followupVec,
304-
followupEpi, followupAll);
304+
return createIfNonNull<LoopVectorizeAttr>(
305+
ctx, enable, predicateEnable, scalableEnable, ivdepEnable, width,
306+
followupVec, followupEpi, followupAll);
305307
}
306308

307309
FailureOr<LoopInterleaveAttr> LoopMetadataConversion::convertInterleaveAttr() {

mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ void LoopAnnotationConversion::convertLoopOptions(LoopVectorizeAttr options) {
108108
options.getPredicateEnable());
109109
convertBoolNode("llvm.loop.vectorize.scalable.enable",
110110
options.getScalableEnable());
111+
convertBoolNode("llvm.loop.vectorize.ivdep.enable", options.getIvdepEnable());
111112
convertI32Node("llvm.loop.vectorize.width", options.getWidth());
112113
convertFollowupNode("llvm.loop.vectorize.followup_vectorized",
113114
options.getFollowupVectorized());

mlir/test/Target/LLVMIR/Import/metadata-loop.ll

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ end:
7373
; // -----
7474

7575
; CHECK-DAG: #[[FOLLOWUP:.*]] = #llvm.loop_annotation<disableNonforced = true>
76-
; CHECK-DAG: #[[VECTORIZE_ATTR:.*]] = #llvm.loop_vectorize<disable = false, predicateEnable = true, scalableEnable = false, width = 16 : i32, followupVectorized = #[[FOLLOWUP]], followupEpilogue = #[[FOLLOWUP]], followupAll = #[[FOLLOWUP]]>
76+
; CHECK-DAG: #[[VECTORIZE_ATTR:.*]] = #llvm.loop_vectorize<disable = false, predicateEnable = true, scalableEnable = false, ivdepEnable = false, width = 16 : i32, followupVectorized = #[[FOLLOWUP]], followupEpilogue = #[[FOLLOWUP]], followupAll = #[[FOLLOWUP]]>
7777
; CHECK-DAG: #[[$ANNOT_ATTR:.*]] = #llvm.loop_annotation<vectorize = #[[VECTORIZE_ATTR]]>
7878

7979
; CHECK-LABEL: @vectorize
@@ -85,17 +85,18 @@ end:
8585
ret void
8686
}
8787

88-
!1 = distinct !{!1, !2, !3, !4, !5, !6, !7, !8}
88+
!1 = distinct !{!1, !2, !3, !4, !5, !6, !7, !8, !9}
8989
!2 = !{!"llvm.loop.vectorize.enable", i1 1}
9090
!3 = !{!"llvm.loop.vectorize.predicate.enable", i1 1}
9191
!4 = !{!"llvm.loop.vectorize.scalable.enable", i1 0}
92-
!5 = !{!"llvm.loop.vectorize.width", i32 16}
93-
!6 = !{!"llvm.loop.vectorize.followup_vectorized", !9}
94-
!7 = !{!"llvm.loop.vectorize.followup_epilogue", !9}
95-
!8 = !{!"llvm.loop.vectorize.followup_all", !9}
96-
97-
!9 = distinct !{!9, !10}
98-
!10 = !{!"llvm.loop.disable_nonforced"}
92+
!5 = !{!"llvm.loop.vectorize.ivdep.enable", i1 0}
93+
!6 = !{!"llvm.loop.vectorize.width", i32 16}
94+
!7 = !{!"llvm.loop.vectorize.followup_vectorized", !10}
95+
!8 = !{!"llvm.loop.vectorize.followup_epilogue", !10}
96+
!9 = !{!"llvm.loop.vectorize.followup_all", !10}
97+
98+
!10 = distinct !{!10, !11}
99+
!11 = !{!"llvm.loop.disable_nonforced"}
99100

100101
; // -----
101102

mlir/test/Target/LLVMIR/loop-metadata.mlir

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ llvm.func @isvectorized() {
4545
llvm.func @vectorizeOptions() {
4646
// CHECK: br {{.*}} !llvm.loop ![[LOOP_NODE:[0-9]+]]
4747
llvm.br ^bb1 {loop_annotation = #llvm.loop_annotation<vectorize = <
48-
disable = false, predicateEnable = true, scalableEnable = false, width = 16 : i32,
48+
disable = false, predicateEnable = true, scalableEnable = false, ivdepEnable = false, width = 16 : i32,
4949
followupVectorized = #followup, followupEpilogue = #followup, followupAll = #followup>
5050
>}
5151
^bb1:
@@ -54,10 +54,11 @@ llvm.func @vectorizeOptions() {
5454

5555
// CHECK-DAG: ![[NON_FORCED:[0-9]+]] = !{!"llvm.loop.disable_nonforced"}
5656
// CHECK-DAG: ![[FOLLOWUP:[0-9]+]] = distinct !{![[FOLLOWUP]], ![[NON_FORCED]]}
57-
// CHECK-DAG: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}}
57+
// CHECK-DAG: ![[LOOP_NODE]] = distinct !{![[LOOP_NODE]], !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}}
5858
// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.enable", i1 true}
5959
// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.predicate.enable", i1 true}
6060
// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.scalable.enable", i1 false}
61+
// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.ivdep.enable", i1 false}
6162
// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.width", i32 16}
6263
// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.followup_vectorized", ![[FOLLOWUP]]}
6364
// CHECK-DAG: !{{[0-9]+}} = !{!"llvm.loop.vectorize.followup_epilogue", ![[FOLLOWUP]]}

0 commit comments

Comments
 (0)