This patch rename metadata llvm.loop.vectorize.unroll to
llvm.loop.vectorize.interleave to avoid confusion with the concatenation
unroller metadata (llvm.loop.unroll). It fell out of a discussion on patch
http://reviews.llvm.org/D4576. On that patch there was some confusion
about whether llvm.loop.vectorize.unroll controlled the traditional
(concatenation) loop unroller. And IIRC this isn't the first time there
has been this confusion. Renaming vectorize.unroll to vectorize.interleave
also more closely matches the pragma which generates the metadata (#pragma
clang loop interleave_count). There are still lots of uses of "unroll"
within the code in function/variable names and comments. I have no
intention of changing those.
Mark
Index: docs/LangRef.rst
===================================================================
--- docs/LangRef.rst (revision 213406)
+++ docs/LangRef.rst (working copy)
@@ -2910,7 +2910,7 @@
br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !0
...
!0 = metadata !{ metadata !0, metadata !1 }
- !1 = metadata !{ metadata !"llvm.loop.vectorize.width", i32 4 }
+ !1 = metadata !{ metadata !"llvm.loop.unroll.count", i32 4 }
'``llvm.loop.vectorize``'
^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -2925,21 +2925,21 @@
information about loop-carried memory dependencies can be helpful in
determining the safety of loop vectorization.
-'``llvm.loop.vectorize.unroll``' Metadata
+'``llvm.loop.vectorize.interleave``' Metadata
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This metadata suggests an interleave count to the loop vectorizer.
-The first operand is the string ``llvm.loop.vectorize.unroll`` and the
+The first operand is the string ``llvm.loop.vectorize.interleave`` and the
second operand is an integer specifying the interleave count. For
example:
.. code-block:: llvm
- !0 = metadata !{ metadata !"llvm.loop.vectorize.unroll", i32 4 }
+ !0 = metadata !{ metadata !"llvm.loop.vectorize.interleave", i32 4 }
-Note that setting ``llvm.loop.vectorize.unroll`` to 1 disables
+Note that setting ``llvm.loop.vectorize.interleave`` to 1 disables
interleaving multiple iterations of the loop. If
-``llvm.loop.vectorize.unroll`` is set to 0 then the interleave count
+``llvm.loop.vectorize.interleave`` is set to 0 then the interleave count
will be determined automatically.
'``llvm.loop.vectorize.width``' Metadata
Index: docs/ReleaseNotes.rst
===================================================================
--- docs/ReleaseNotes.rst (revision 213406)
+++ docs/ReleaseNotes.rst (working copy)
@@ -57,7 +57,8 @@
unwinding information.
* The prefix for loop vectorizer hint metadata has been changed from
- ``llvm.vectorizer`` to ``llvm.loop.vectorize``.
+ ``llvm.vectorizer`` to ``llvm.loop.vectorize``. In addition,
+ ``llvm.vectorizer.unroll`` has been renamed ``llvm.loop.vectorize.interleave``.
* Some backends previously implemented Atomic NAND(x,y) as ``x & ~y``. Now
all backends implement it as ``~(x & y)``, matching the semantics of GCC 4.4
Index: lib/IR/AutoUpgrade.cpp
===================================================================
--- lib/IR/AutoUpgrade.cpp (revision 213406)
+++ lib/IR/AutoUpgrade.cpp (working copy)
@@ -580,7 +580,9 @@
void llvm::UpgradeMDStringConstant(std::string &String) {
const std::string OldPrefix = "llvm.vectorizer.";
- if (String.find(OldPrefix) == 0) {
- String.replace(0, OldPrefix.size(), "llvm.loop.vectorize.");
+ if (String == "llvm.vectorizer.unroll") {
+ String = "llvm.loop.vectorize.interleave";
+ } else if (String.find(OldPrefix) == 0) {
+ String.replace(0, OldPrefix.size(), "llvm.loop.vectorize.");
}
}
Index: lib/Transforms/Vectorize/LoopVectorize.cpp
===================================================================
--- lib/Transforms/Vectorize/LoopVectorize.cpp (revision 213406)
+++ lib/Transforms/Vectorize/LoopVectorize.cpp (working copy)
@@ -966,7 +966,7 @@
Vals.push_back(LoopID->getOperand(i));
Vals.push_back(createHint(Context, Twine(Prefix(), "width").str(), Width));
- Vals.push_back(createHint(Context, Twine(Prefix(), "unroll").str(), 1));
+ Vals.push_back(createHint(Context, Twine(Prefix(), "interleave").str(), 1));
MDNode *NewLoopID = MDNode::get(Context, Vals);
// Set operand 0 to refer to the loop id itself.
@@ -1060,7 +1060,7 @@
Width = Val;
else
DEBUG(dbgs() << "LV: ignoring invalid width hint metadata\n");
- } else if (Hint == "unroll") {
+ } else if (Hint == "interleave") {
if (isPowerOf2_32(Val) && Val <= MaxUnrollFactor)
Unroll = Val;
else
Index: test/Assembler/upgrade-loop-metadata.ll
===================================================================
--- test/Assembler/upgrade-loop-metadata.ll (revision 213406)
+++ test/Assembler/upgrade-loop-metadata.ll (working copy)
@@ -30,7 +30,7 @@
ret void
}
-; CHECK: !{metadata !"llvm.loop.vectorize.unroll", i32 4}
+; CHECK: !{metadata !"llvm.loop.vectorize.interleave", i32 4}
; CHECK: !{metadata !"llvm.loop.vectorize.width", i32 8}
; CHECK: !{metadata !"llvm.loop.vectorize.enable", i1 true}
Index: test/Bitcode/upgrade-loop-metadata.ll
===================================================================
--- test/Bitcode/upgrade-loop-metadata.ll (revision 213406)
+++ test/Bitcode/upgrade-loop-metadata.ll (working copy)
@@ -26,7 +26,7 @@
ret void
}
-; CHECK: !{metadata !"llvm.loop.vectorize.unroll", i32 4}
+; CHECK: !{metadata !"llvm.loop.vectorize.interleave", i32 4}
; CHECK: !{metadata !"llvm.loop.vectorize.width", i32 8}
; CHECK: !{metadata !"llvm.loop.vectorize.enable", i1 true}
Index: test/Transforms/LoopVectorize/X86/already-vectorized.ll
===================================================================
--- test/Transforms/LoopVectorize/X86/already-vectorized.ll (revision 213406)
+++ test/Transforms/LoopVectorize/X86/already-vectorized.ll (working copy)
@@ -41,6 +41,6 @@
; Now, we check for the Hint metadata
; CHECK: [[vect]] = metadata !{metadata [[vect]], metadata [[width:![0-9]+]], metadata [[unroll:![0-9]+]]}
; CHECK: [[width]] = metadata !{metadata !"llvm.loop.vectorize.width", i32 1}
-; CHECK: [[unroll]] = metadata !{metadata !"llvm.loop.vectorize.unroll", i32 1}
+; CHECK: [[unroll]] = metadata !{metadata !"llvm.loop.vectorize.interleave", i32 1}
; CHECK: [[scalar]] = metadata !{metadata [[scalar]], metadata [[width]], metadata [[unroll]]}
Index: test/Transforms/LoopVectorize/X86/vectorization-remarks-missed.ll
===================================================================
--- test/Transforms/LoopVectorize/X86/vectorization-remarks-missed.ll (revision 213406)
+++ test/Transforms/LoopVectorize/X86/vectorization-remarks-missed.ll (working copy)
@@ -150,7 +150,7 @@
!25 = metadata !{i32 12, i32 8, metadata !26, null}
!26 = metadata !{i32 786443, metadata !1, metadata !7, i32 12, i32 3, i32 0, i32 3}
!27 = metadata !{metadata !27, metadata !28, metadata !29}
-!28 = metadata !{metadata !"llvm.loop.vectorize.unroll", i32 1}
+!28 = metadata !{metadata !"llvm.loop.vectorize.interleave", i32 1}
!29 = metadata !{metadata !"llvm.loop.vectorize.width", i32 1}
!30 = metadata !{i32 13, i32 5, metadata !26, null}
!31 = metadata !{i32 14, i32 1, metadata !7, null}
Index: test/Transforms/LoopVectorize/metadata-unroll.ll
===================================================================
--- test/Transforms/LoopVectorize/metadata-unroll.ll (revision 213406)
+++ test/Transforms/LoopVectorize/metadata-unroll.ll (working copy)
@@ -38,4 +38,4 @@
}
!0 = metadata !{metadata !0, metadata !1}
-!1 = metadata !{metadata !"llvm.loop.vectorize.unroll", i32 2}
+!1 = metadata !{metadata !"llvm.loop.vectorize.interleave", i32 2}
Index: test/Transforms/LoopVectorize/vectorize-once.ll
===================================================================
--- test/Transforms/LoopVectorize/vectorize-once.ll (revision 213406)
+++ test/Transforms/LoopVectorize/vectorize-once.ll (working copy)
@@ -70,7 +70,7 @@
; CHECK: !0 = metadata !{metadata !0, metadata !1, metadata !2}
; CHECK: !1 = metadata !{metadata !"llvm.loop.vectorize.width", i32 1}
-; CHECK: !2 = metadata !{metadata !"llvm.loop.vectorize.unroll", i32 1}
+; CHECK: !2 = metadata !{metadata !"llvm.loop.vectorize.interleave", i32 1}
; CHECK: !3 = metadata !{metadata !3, metadata !1, metadata !2}
!0 = metadata !{metadata !0, metadata !1}
Index: lib/CodeGen/CGLoopInfo.cpp
===================================================================
--- lib/CodeGen/CGLoopInfo.cpp (revision 213406)
+++ lib/CodeGen/CGLoopInfo.cpp (working copy)
@@ -39,7 +39,7 @@
// Setting vectorizer.unroll
if (Attrs.VectorizerUnroll > 0) {
- Value *Vals[] = { MDString::get(Ctx, "llvm.loop.vectorize.unroll"),
+ Value *Vals[] = { MDString::get(Ctx, "llvm.loop.vectorize.interleave"),
ConstantInt::get(Type::getInt32Ty(Ctx),
Attrs.VectorizerUnroll) };
Args.push_back(MDNode::get(Ctx, Vals));
Index: lib/CodeGen/CGLoopInfo.h
===================================================================
--- lib/CodeGen/CGLoopInfo.h (revision 213406)
+++ lib/CodeGen/CGLoopInfo.h (working copy)
@@ -46,7 +46,7 @@
/// \brief llvm.loop.vectorize.width
unsigned VectorizerWidth;
- /// \brief llvm.loop.vectorize.unroll
+ /// \brief llvm.loop.vectorize.interleave
unsigned VectorizerUnroll;
};
Index: lib/CodeGen/CGStmt.cpp
===================================================================
--- lib/CodeGen/CGStmt.cpp (revision 213406)
+++ lib/CodeGen/CGStmt.cpp (working copy)
@@ -586,7 +586,7 @@
break;
case LoopHintAttr::Interleave:
case LoopHintAttr::InterleaveCount:
- MetadataName = "llvm.loop.vectorize.unroll";
+ MetadataName = "llvm.loop.vectorize.interleave";
break;
case LoopHintAttr::Unroll:
MetadataName = "llvm.loop.unroll.enable";
Index: test/CodeGen/pragma-loop.cpp
===================================================================
--- test/CodeGen/pragma-loop.cpp (revision 213406)
+++ test/CodeGen/pragma-loop.cpp (working copy)
@@ -111,7 +111,7 @@
// CHECK: ![[LOOP_1]] = metadata !{metadata ![[LOOP_1]], metadata ![[UNROLLENABLE_1:.*]], metadata ![[WIDTH_4:.*]], metadata ![[INTERLEAVE_4:.*]], metadata ![[INTENABLE_1:.*]]}
// CHECK: ![[UNROLLENABLE_1]] = metadata !{metadata !"llvm.loop.unroll.enable", i1 true}
// CHECK: ![[WIDTH_4]] = metadata !{metadata !"llvm.loop.vectorize.width", i32 4}
-// CHECK: ![[INTERLEAVE_4]] = metadata !{metadata !"llvm.loop.vectorize.unroll", i32 4}
+// CHECK: ![[INTERLEAVE_4]] = metadata !{metadata !"llvm.loop.vectorize.interleave", i32 4}
// CHECK: ![[INTENABLE_1]] = metadata !{metadata !"llvm.loop.vectorize.enable", i1 true}
// CHECK: ![[LOOP_2]] = metadata !{metadata ![[LOOP_2:.*]], metadata ![[UNROLLENABLE_0:.*]], metadata ![[INTERLEAVE_4:.*]], metadata ![[WIDTH_8:.*]]}
// CHECK: ![[UNROLLENABLE_0]] = metadata !{metadata !"llvm.loop.unroll.enable", i1 false}
@@ -119,11 +119,11 @@
// CHECK: ![[LOOP_3]] = metadata !{metadata ![[LOOP_3]], metadata ![[UNROLL_8:.*]], metadata ![[INTERLEAVE_4:.*]], metadata ![[ENABLE_1:.*]]}
// CHECK: ![[UNROLL_8]] = metadata !{metadata !"llvm.loop.unroll.count", i32 8}
// CHECK: ![[LOOP_4]] = metadata !{metadata ![[LOOP_4]], metadata ![[INTERLEAVE_2:.*]], metadata ![[WIDTH_2:.*]]}
-// CHECK: ![[INTERLEAVE_2]] = metadata !{metadata !"llvm.loop.vectorize.unroll", i32 2}
+// CHECK: ![[INTERLEAVE_2]] = metadata !{metadata !"llvm.loop.vectorize.interleave", i32 2}
// CHECK: ![[WIDTH_2]] = metadata !{metadata !"llvm.loop.vectorize.width", i32 2}
// CHECK: ![[LOOP_5]] = metadata !{metadata ![[LOOP_5]], metadata ![[UNROLLENABLE_0:.*]], metadata ![[WIDTH_1:.*]]}
// CHECK: ![[WIDTH_1]] = metadata !{metadata !"llvm.loop.vectorize.width", i32 1}
// CHECK: ![[LOOP_6]] = metadata !{metadata ![[LOOP_6]], metadata ![[UNROLL_8:.*]], metadata ![[INTERLEAVE_2:.*]], metadata ![[WIDTH_2:.*]]}
// CHECK: ![[LOOP_7]] = metadata !{metadata ![[LOOP_7]], metadata ![[UNROLL_8:.*]], metadata ![[INTERLEAVE_8:.*]], metadata ![[WIDTH_8:.*]]}
-// CHECK: ![[INTERLEAVE_8]] = metadata !{metadata !"llvm.loop.vectorize.unroll", i32 8}
+// CHECK: ![[INTERLEAVE_8]] = metadata !{metadata !"llvm.loop.vectorize.interleave", i32 8}
// CHECK: ![[LOOP_8]] = metadata !{metadata ![[LOOP_8]], metadata ![[UNROLL_8:.*]], metadata ![[INTERLEAVE_2:.*]], metadata ![[WIDTH_2:.*]]}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits