[PATCH] D108796: Copy Elementtype Attribute to IR at Link step
Andy Kaylor via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 7 11:47:01 PDT 2021
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG34528c32d23f: Copy Elementtype Attribute to IR at Link step (authored by andrew.w.kaylor).
Changed prior to commit:
https://reviews.llvm.org/D108796?vs=370445&id=371138#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D108796/new/
https://reviews.llvm.org/D108796
Files:
llvm/lib/Linker/IRMover.cpp
llvm/lib/Transforms/Utils/ValueMapper.cpp
llvm/test/Linker/Inputs/elementtype-struct-2.ll
llvm/test/Linker/elementtype-struct-1.ll
Index: llvm/test/Linker/elementtype-struct-1.ll
===================================================================
--- /dev/null
+++ llvm/test/Linker/elementtype-struct-1.ll
@@ -0,0 +1,17 @@
+; RUN: llvm-link %S/Inputs/elementtype-struct-2.ll %s -S | FileCheck %s
+
+; Check that the attribute for elementtype matches when linking.
+
+; CHECK: define void @struct_elementtype_2
+; CHECK: call %struct* @llvm.preserve.array.access.index.p0s_structs.p0s_structs(%struct* elementtype(%struct) null, i32 0, i32 0)
+; CHECK: define void @struct_elementtype
+; CHECK: call %struct* @llvm.preserve.array.access.index.p0s_structs.p0s_structs(%struct* elementtype(%struct) null, i32 0, i32 0)
+
+%struct = type {i32, i8}
+
+define void @struct_elementtype() {
+ call %struct* @llvm.preserve.array.access.index.p0s_structs.p0s_structs(%struct* elementtype(%struct) null, i32 0, i32 0)
+ ret void
+}
+
+declare %struct* @llvm.preserve.array.access.index.p0s_structs.p0s_structs(%struct*, i32, i32)
Index: llvm/test/Linker/Inputs/elementtype-struct-2.ll
===================================================================
--- /dev/null
+++ llvm/test/Linker/Inputs/elementtype-struct-2.ll
@@ -0,0 +1,8 @@
+%struct = type {i32, i8}
+
+define void @struct_elementtype_2() {
+ call %struct* @llvm.preserve.array.access.index.p0s_structs.p0s_structs(%struct* elementtype(%struct) null, i32 0, i32 0)
+ ret void
+}
+
+declare %struct* @llvm.preserve.array.access.index.p0s_structs.p0s_structs(%struct*, i32, i32)
Index: llvm/lib/Transforms/Utils/ValueMapper.cpp
===================================================================
--- llvm/lib/Transforms/Utils/ValueMapper.cpp
+++ llvm/lib/Transforms/Utils/ValueMapper.cpp
@@ -944,9 +944,9 @@
LLVMContext &C = CB->getContext();
AttributeList Attrs = CB->getAttributes();
for (unsigned i = 0; i < Attrs.getNumAttrSets(); ++i) {
- for (Attribute::AttrKind TypedAttr :
- {Attribute::ByVal, Attribute::StructRet, Attribute::ByRef,
- Attribute::InAlloca}) {
+ for (int AttrIdx = Attribute::FirstTypeAttr;
+ AttrIdx <= Attribute::LastTypeAttr; AttrIdx++) {
+ Attribute::AttrKind TypedAttr = (Attribute::AttrKind)AttrIdx;
if (Type *Ty =
Attrs.getAttributeAtIndex(i, TypedAttr).getValueAsType()) {
Attrs = Attrs.replaceAttributeTypeAtIndex(C, i, TypedAttr,
Index: llvm/lib/Linker/IRMover.cpp
===================================================================
--- llvm/lib/Linker/IRMover.cpp
+++ llvm/lib/Linker/IRMover.cpp
@@ -649,9 +649,9 @@
AttributeList IRLinker::mapAttributeTypes(LLVMContext &C, AttributeList Attrs) {
for (unsigned i = 0; i < Attrs.getNumAttrSets(); ++i) {
- for (Attribute::AttrKind TypedAttr :
- {Attribute::ByVal, Attribute::StructRet, Attribute::ByRef,
- Attribute::InAlloca}) {
+ for (int AttrIdx = Attribute::FirstTypeAttr;
+ AttrIdx <= Attribute::LastTypeAttr; AttrIdx++) {
+ Attribute::AttrKind TypedAttr = (Attribute::AttrKind)AttrIdx;
if (Attrs.hasAttributeAtIndex(i, TypedAttr)) {
if (Type *Ty =
Attrs.getAttributeAtIndex(i, TypedAttr).getValueAsType()) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D108796.371138.patch
Type: text/x-patch
Size: 3198 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210907/a4059a6e/attachment.bin>
More information about the llvm-commits
mailing list