summaryrefslogtreecommitdiff
path: root/tools/llvm-c-test
diff options
context:
space:
mode:
authorAmaury Sechet <deadalnix@gmail.com>2016-02-14 09:14:30 +0000
committerAmaury Sechet <deadalnix@gmail.com>2016-02-14 09:14:30 +0000
commit6e0e354551de19f736de7ee2d19cd24b302b9257 (patch)
tree5f5cc4d78c5c967c4e9d88d805165470f5a3cba1 /tools/llvm-c-test
parenta1d1faf8dddb2a727c44f399860dca86096ffb6e (diff)
Move clone_params around
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260846 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-c-test')
-rw-r--r--tools/llvm-c-test/echo.cpp154
1 files changed, 76 insertions, 78 deletions
diff --git a/tools/llvm-c-test/echo.cpp b/tools/llvm-c-test/echo.cpp
index 8d679b6928a..99e3cf0940c 100644
--- a/tools/llvm-c-test/echo.cpp
+++ b/tools/llvm-c-test/echo.cpp
@@ -149,7 +149,82 @@ struct TypeCloner {
}
};
-static ValueMap clone_params(LLVMValueRef Src, LLVMValueRef Dst);
+static ValueMap clone_params(LLVMValueRef Src, LLVMValueRef Dst) {
+ unsigned Count = LLVMCountParams(Src);
+ if (Count != LLVMCountParams(Dst)) {
+ fprintf(stderr, "Parameter count mismatch\n");
+ exit(-1);
+ }
+
+ ValueMap VMap;
+ if (Count == 0)
+ return VMap;
+
+ LLVMValueRef SrcFirst = LLVMGetFirstParam(Src);
+ LLVMValueRef DstFirst = LLVMGetFirstParam(Dst);
+ LLVMValueRef SrcLast = LLVMGetLastParam(Src);
+ LLVMValueRef DstLast = LLVMGetLastParam(Dst);
+
+ LLVMValueRef SrcCur = SrcFirst;
+ LLVMValueRef DstCur = DstFirst;
+ LLVMValueRef SrcNext = nullptr;
+ LLVMValueRef DstNext = nullptr;
+ while (true) {
+ const char *Name = LLVMGetValueName(SrcCur);
+ LLVMSetValueName(DstCur, Name);
+
+ VMap[SrcCur] = DstCur;
+
+ Count--;
+ SrcNext = LLVMGetNextParam(SrcCur);
+ DstNext = LLVMGetNextParam(DstCur);
+ if (SrcNext == nullptr && DstNext == nullptr) {
+ if (SrcCur != SrcLast) {
+ fprintf(stderr, "SrcLast param does not match End\n");
+ exit(-1);
+ }
+
+ if (DstCur != DstLast) {
+ fprintf(stderr, "DstLast param does not match End\n");
+ exit(-1);
+ }
+
+ break;
+ }
+
+ if (SrcNext == nullptr) {
+ fprintf(stderr, "SrcNext was unexpectedly null\n");
+ exit(-1);
+ }
+
+ if (DstNext == nullptr) {
+ fprintf(stderr, "DstNext was unexpectedly null\n");
+ exit(-1);
+ }
+
+ LLVMValueRef SrcPrev = LLVMGetPreviousParam(SrcNext);
+ if (SrcPrev != SrcCur) {
+ fprintf(stderr, "SrcNext.Previous param is not Current\n");
+ exit(-1);
+ }
+
+ LLVMValueRef DstPrev = LLVMGetPreviousParam(DstNext);
+ if (DstPrev != DstCur) {
+ fprintf(stderr, "DstNext.Previous param is not Current\n");
+ exit(-1);
+ }
+
+ SrcCur = SrcNext;
+ DstCur = DstNext;
+ }
+
+ if (Count != 0) {
+ fprintf(stderr, "Parameter count does not match iteration\n");
+ exit(-1);
+ }
+
+ return VMap;
+}
struct FunCloner {
LLVMValueRef Fun;
@@ -535,83 +610,6 @@ struct FunCloner {
}
};
-static ValueMap clone_params(LLVMValueRef Src, LLVMValueRef Dst) {
- unsigned Count = LLVMCountParams(Src);
- if (Count != LLVMCountParams(Dst)) {
- fprintf(stderr, "Parameter count mismatch\n");
- exit(-1);
- }
-
- ValueMap VMap;
- if (Count == 0)
- return VMap;
-
- LLVMValueRef SrcFirst = LLVMGetFirstParam(Src);
- LLVMValueRef DstFirst = LLVMGetFirstParam(Dst);
- LLVMValueRef SrcLast = LLVMGetLastParam(Src);
- LLVMValueRef DstLast = LLVMGetLastParam(Dst);
-
- LLVMValueRef SrcCur = SrcFirst;
- LLVMValueRef DstCur = DstFirst;
- LLVMValueRef SrcNext = nullptr;
- LLVMValueRef DstNext = nullptr;
- while (true) {
- const char *Name = LLVMGetValueName(SrcCur);
- LLVMSetValueName(DstCur, Name);
-
- VMap[SrcCur] = DstCur;
-
- Count--;
- SrcNext = LLVMGetNextParam(SrcCur);
- DstNext = LLVMGetNextParam(DstCur);
- if (SrcNext == nullptr && DstNext == nullptr) {
- if (SrcCur != SrcLast) {
- fprintf(stderr, "SrcLast param does not match End\n");
- exit(-1);
- }
-
- if (DstCur != DstLast) {
- fprintf(stderr, "DstLast param does not match End\n");
- exit(-1);
- }
-
- break;
- }
-
- if (SrcNext == nullptr) {
- fprintf(stderr, "SrcNext was unexpectedly null\n");
- exit(-1);
- }
-
- if (DstNext == nullptr) {
- fprintf(stderr, "DstNext was unexpectedly null\n");
- exit(-1);
- }
-
- LLVMValueRef SrcPrev = LLVMGetPreviousParam(SrcNext);
- if (SrcPrev != SrcCur) {
- fprintf(stderr, "SrcNext.Previous param is not Current\n");
- exit(-1);
- }
-
- LLVMValueRef DstPrev = LLVMGetPreviousParam(DstNext);
- if (DstPrev != DstCur) {
- fprintf(stderr, "DstNext.Previous param is not Current\n");
- exit(-1);
- }
-
- SrcCur = SrcNext;
- DstCur = DstNext;
- }
-
- if (Count != 0) {
- fprintf(stderr, "Parameter count does not match iteration\n");
- exit(-1);
- }
-
- return VMap;
-}
-
static LLVMValueRef clone_function(LLVMValueRef Src, LLVMModuleRef M) {
const char *Name = LLVMGetValueName(Src);
LLVMValueRef Fun = LLVMGetNamedFunction(M, Name);