[PATCH] D115161: [IR] Allow the 'align' param attr on vectors of pointers
Fraser Cormack via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 3 03:14:27 PST 2022
frasercrmck updated this revision to Diff 397032.
frasercrmck added a comment.
- rebase
ping
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D115161/new/
https://reviews.llvm.org/D115161
Files:
llvm/docs/LangRef.rst
llvm/lib/IR/Attributes.cpp
llvm/test/Bitcode/attributes.ll
Index: llvm/test/Bitcode/attributes.ll
===================================================================
--- llvm/test/Bitcode/attributes.ll
+++ llvm/test/Bitcode/attributes.ll
@@ -510,6 +510,11 @@
ret void;
}
+define void @f83(<4 x i8*> align 32 %0, <vscale x 1 x double*> align 64 %1) {
+; CHECK: define void @f81(<4 x i8*> align 32 %0, <vscale x 1 x double*> align 64 %1)
+ ret void
+}
+
; CHECK: attributes #0 = { noreturn }
; CHECK: attributes #1 = { nounwind }
; CHECK: attributes #2 = { readnone }
Index: llvm/lib/IR/Attributes.cpp
===================================================================
--- llvm/lib/IR/Attributes.cpp
+++ llvm/lib/IR/Attributes.cpp
@@ -1839,12 +1839,12 @@
AttrBuilder Incompatible;
if (!Ty->isIntegerTy())
- // Attribute that only apply to integers.
+ // Attributes that only apply to integers.
Incompatible.addAttribute(Attribute::SExt)
.addAttribute(Attribute::ZExt);
if (!Ty->isPointerTy())
- // Attribute that only apply to pointers.
+ // Attributes that only apply to pointers.
Incompatible.addAttribute(Attribute::Nest)
.addAttribute(Attribute::NoAlias)
.addAttribute(Attribute::NoCapture)
@@ -1852,7 +1852,6 @@
.addAttribute(Attribute::ReadNone)
.addAttribute(Attribute::ReadOnly)
.addAttribute(Attribute::SwiftError)
- .addAlignmentAttr(1) // the int here is ignored
.addDereferenceableAttr(1) // the int here is ignored
.addDereferenceableOrNullAttr(1) // the int here is ignored
.addPreallocatedAttr(Ty)
@@ -1862,6 +1861,10 @@
.addByRefAttr(Ty)
.addTypeAttr(Attribute::ElementType, Ty);
+ if (!Ty->isPtrOrPtrVectorTy())
+ // Attributes that only apply to pointers or vectors of pointers.
+ Incompatible.addAlignmentAttr(1); // the int here is ignored
+
// Some attributes can apply to all "values" but there are no `void` values.
if (Ty->isVoidTy())
Incompatible.addAttribute(Attribute::NoUndef);
Index: llvm/docs/LangRef.rst
===================================================================
--- llvm/docs/LangRef.rst
+++ llvm/docs/LangRef.rst
@@ -1210,12 +1210,14 @@
.. _attr_align:
``align <n>`` or ``align(<n>)``
- This indicates that the pointer value has the specified alignment.
- If the pointer value does not have the specified alignment,
- :ref:`poison value <poisonvalues>` is returned or passed instead. The
- ``align`` attribute should be combined with the ``noundef`` attribute to
- ensure a pointer is aligned, or otherwise the behavior is undefined. Note
- that ``align 1`` has no effect on non-byval, non-preallocated arguments.
+ This indicates that the pointer value or vector of pointers has the
+ specified alignment. If applied to a vector of pointers, *all* pointers
+ (elements) have the specified alignment. If the pointer value does not have
+ the specified alignment, :ref:`poison value <poisonvalues>` is returned or
+ passed instead. The ``align`` attribute should be combined with the
+ ``noundef`` attribute to ensure a pointer is aligned, or otherwise the
+ behavior is undefined. Note that ``align 1`` has no effect on non-byval,
+ non-preallocated arguments.
Note that this attribute has additional semantics when combined with the
``byval`` or ``preallocated`` attribute, which are documented there.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D115161.397032.patch
Type: text/x-patch
Size: 3437 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220103/beccac92/attachment.bin>
More information about the llvm-commits
mailing list