Skip to content

Commit cf2e381

Browse files
Thomas Symallatsymalla-AMD
Thomas Symalla
authored andcommitted
Copy metadata in varargs setter
1 parent ec8493d commit cf2e381

File tree

4 files changed

+10
-1
lines changed

4 files changed

+10
-1
lines changed

example/ExampleMain.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "llvm/IR/DerivedTypes.h"
3535
#include "llvm/IR/IntrinsicInst.h"
3636
#include "llvm/IR/Intrinsics.h"
37+
#include "llvm/IR/Metadata.h"
3738
#include "llvm/IR/Module.h"
3839
#include "llvm/IRPrinter/IRPrintingPasses.h"
3940
#include "llvm/Support/CommandLine.h"
@@ -126,6 +127,11 @@ void createFunctionExample(Module &module, const Twine &name) {
126127
b.create<xd::HandleGetOp>();
127128

128129
auto *replaceable = b.create<xd::WriteVarArgOp>(p2, varArgs);
130+
SmallVector<Metadata *, 1> MD;
131+
MD.push_back(ConstantAsMetadata::get(
132+
ConstantInt::get(Type::getInt32Ty(bb->getContext()), 1)));
133+
replaceable->setMetadata("testMd", MDNode::get(bb->getContext(), MD));
134+
129135
SmallVector<Value *> varArgs2 = varArgs;
130136
varArgs2.push_back(p2);
131137

lib/TableGen/Operations.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ void AccessorBuilder::emitVarArgReplacementDefinition() const {
248248
newArgs.append(arg_begin(), arg_begin() + $index);
249249
newArgs.append($name.begin(), $name.end());
250250
$_op *newOp = ::llvm::cast<$_op>(::llvm::CallInst::Create(getCalledFunction(), newArgs, this->getName(), this->getIterator()));
251+
newOp->copyMetadata(*this);
251252
this->replaceAllUsesWith(newOp);
252253
this->eraseFromParent();
253254
return newOp;

test/example/generated/ExampleDialect.cpp.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,6 +1510,7 @@ instName
15101510
newArgs.append(arg_begin(), arg_begin() + 0);
15111511
newArgs.append(instName_0.begin(), instName_0.end());
15121512
InstNameConflictVarargsOp *newOp = ::llvm::cast<InstNameConflictVarargsOp>(::llvm::CallInst::Create(getCalledFunction(), newArgs, this->getName(), this->getIterator()));
1513+
newOp->copyMetadata(*this);
15131514
this->replaceAllUsesWith(newOp);
15141515
this->eraseFromParent();
15151516
return newOp;
@@ -2251,6 +2252,7 @@ data
22512252
newArgs.append(arg_begin(), arg_begin() + 1);
22522253
newArgs.append(args.begin(), args.end());
22532254
WriteVarArgOp *newOp = ::llvm::cast<WriteVarArgOp>(::llvm::CallInst::Create(getCalledFunction(), newArgs, this->getName(), this->getIterator()));
2255+
newOp->copyMetadata(*this);
22542256
this->replaceAllUsesWith(newOp);
22552257
this->eraseFromParent();
22562258
return newOp;

test/example/test-builder.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
; CHECK-NEXT: call void (...) @xd.write(i8 [[P2]])
2929
; CHECK-NEXT: call void (...) @xd.write.vararg(i8 [[P2]], ptr [[P1]], i8 [[P2]])
3030
; CHECK-NEXT: [[TMP14:%.*]] = call target("xd.handle") @xd.handle.get()
31-
; CHECK-NEXT: call void (...) @xd.write.vararg(i8 [[P2]], ptr [[P1]], i8 [[P2]], i8 [[P2]])
31+
; CHECK-NEXT: call void (...) @xd.write.vararg(i8 [[P2]], ptr [[P1]], i8 [[P2]], i8 [[P2]]), !testMd !{{.*}}
3232
; CHECK-NEXT: [[TMP15:%.*]] = call <2 x i32> @xd.set.read__v2i32()
3333
; CHECK-NEXT: call void (...) @xd.set.write(target("xd.vector", i32, 1, 2) [[TMP13]])
3434
; CHECK-NEXT: [[TMP16:%.*]] = call [[TMP0]] @xd.read__s_s()

0 commit comments

Comments
 (0)