summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-c-test/echo.cpp
diff options
context:
space:
mode:
authorAmaury Sechet <deadalnix@gmail.com>2016-06-15 05:14:29 +0000
committerAmaury Sechet <deadalnix@gmail.com>2016-06-15 05:14:29 +0000
commita65a237805d8c5a995bb15ed31bdeacbab401489 (patch)
tree95147eef29f4ad6207378b24ac627f534326f39b /llvm/tools/llvm-c-test/echo.cpp
parent0e392d5dd7fbc70d90cb11525aceaa2977d63583 (diff)
downloadbcm5719-llvm-a65a237805d8c5a995bb15ed31bdeacbab401489.tar.gz
bcm5719-llvm-a65a237805d8c5a995bb15ed31bdeacbab401489.zip
Add support for callsite in the new C API for attributes
Summary: The second consumer of attributes. Reviewers: Wallbraker, whitequark, echristo, rafael, jyknight Subscribers: mehdi_amini Differential Revision: http://reviews.llvm.org/D21266 llvm-svn: 272754
Diffstat (limited to 'llvm/tools/llvm-c-test/echo.cpp')
-rw-r--r--llvm/tools/llvm-c-test/echo.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/tools/llvm-c-test/echo.cpp b/llvm/tools/llvm-c-test/echo.cpp
index 73444b46d93..72ff138c74e 100644
--- a/llvm/tools/llvm-c-test/echo.cpp
+++ b/llvm/tools/llvm-c-test/echo.cpp
@@ -375,6 +375,20 @@ struct FunCloner {
return Dst;
}
+ void CloneAttrs(LLVMValueRef Src, LLVMValueRef Dst) {
+ auto Ctx = LLVMGetModuleContext(M);
+ int ArgCount = LLVMGetNumArgOperands(Src);
+ for (int i = LLVMAttributeReturnIndex; i <= ArgCount; i++) {
+ for (unsigned k = 0, e = LLVMGetLastEnumAttributeKind(); k < e; ++k) {
+ if (auto SrcA = LLVMGetCallSiteEnumAttribute(Src, i, k)) {
+ auto Val = LLVMGetEnumAttributeValue(SrcA);
+ auto A = LLVMCreateEnumAttribute(Ctx, k, Val);
+ LLVMAddCallSiteAttribute(Dst, i, A);
+ }
+ }
+ }
+ }
+
LLVMValueRef CloneInstruction(LLVMValueRef Src, LLVMBuilderRef Builder) {
check_value_kind(Src, LLVMInstructionValueKind);
if (!LLVMIsAInstruction(Src))
@@ -439,6 +453,7 @@ struct FunCloner {
LLVMBasicBlockRef Unwind = DeclareBB(LLVMGetUnwindDest(Src));
Dst = LLVMBuildInvoke(Builder, Fn, Args.data(), ArgCount,
Then, Unwind, Name);
+ CloneAttrs(Src, Dst);
break;
}
case LLVMUnreachable:
@@ -599,6 +614,7 @@ struct FunCloner {
LLVMValueRef Fn = CloneValue(LLVMGetCalledValue(Src));
Dst = LLVMBuildCall(Builder, Fn, Args.data(), ArgCount, Name);
LLVMSetTailCall(Dst, LLVMIsTailCall(Src));
+ CloneAttrs(Src, Dst);
break;
}
case LLVMResume: {
OpenPOWER on IntegriCloud