Skip to content

Commit ecda4ea

Browse files
committed
Move clone_params around
llvm-svn: 260846
1 parent 8355010 commit ecda4ea

File tree

1 file changed

+76
-78
lines changed

1 file changed

+76
-78
lines changed

llvm/tools/llvm-c-test/echo.cpp

+76-78
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,82 @@ struct TypeCloner {
149149
}
150150
};
151151

152-
static ValueMap clone_params(LLVMValueRef Src, LLVMValueRef Dst);
152+
static ValueMap clone_params(LLVMValueRef Src, LLVMValueRef Dst) {
153+
unsigned Count = LLVMCountParams(Src);
154+
if (Count != LLVMCountParams(Dst)) {
155+
fprintf(stderr, "Parameter count mismatch\n");
156+
exit(-1);
157+
}
158+
159+
ValueMap VMap;
160+
if (Count == 0)
161+
return VMap;
162+
163+
LLVMValueRef SrcFirst = LLVMGetFirstParam(Src);
164+
LLVMValueRef DstFirst = LLVMGetFirstParam(Dst);
165+
LLVMValueRef SrcLast = LLVMGetLastParam(Src);
166+
LLVMValueRef DstLast = LLVMGetLastParam(Dst);
167+
168+
LLVMValueRef SrcCur = SrcFirst;
169+
LLVMValueRef DstCur = DstFirst;
170+
LLVMValueRef SrcNext = nullptr;
171+
LLVMValueRef DstNext = nullptr;
172+
while (true) {
173+
const char *Name = LLVMGetValueName(SrcCur);
174+
LLVMSetValueName(DstCur, Name);
175+
176+
VMap[SrcCur] = DstCur;
177+
178+
Count--;
179+
SrcNext = LLVMGetNextParam(SrcCur);
180+
DstNext = LLVMGetNextParam(DstCur);
181+
if (SrcNext == nullptr && DstNext == nullptr) {
182+
if (SrcCur != SrcLast) {
183+
fprintf(stderr, "SrcLast param does not match End\n");
184+
exit(-1);
185+
}
186+
187+
if (DstCur != DstLast) {
188+
fprintf(stderr, "DstLast param does not match End\n");
189+
exit(-1);
190+
}
191+
192+
break;
193+
}
194+
195+
if (SrcNext == nullptr) {
196+
fprintf(stderr, "SrcNext was unexpectedly null\n");
197+
exit(-1);
198+
}
199+
200+
if (DstNext == nullptr) {
201+
fprintf(stderr, "DstNext was unexpectedly null\n");
202+
exit(-1);
203+
}
204+
205+
LLVMValueRef SrcPrev = LLVMGetPreviousParam(SrcNext);
206+
if (SrcPrev != SrcCur) {
207+
fprintf(stderr, "SrcNext.Previous param is not Current\n");
208+
exit(-1);
209+
}
210+
211+
LLVMValueRef DstPrev = LLVMGetPreviousParam(DstNext);
212+
if (DstPrev != DstCur) {
213+
fprintf(stderr, "DstNext.Previous param is not Current\n");
214+
exit(-1);
215+
}
216+
217+
SrcCur = SrcNext;
218+
DstCur = DstNext;
219+
}
220+
221+
if (Count != 0) {
222+
fprintf(stderr, "Parameter count does not match iteration\n");
223+
exit(-1);
224+
}
225+
226+
return VMap;
227+
}
153228

154229
struct FunCloner {
155230
LLVMValueRef Fun;
@@ -535,83 +610,6 @@ struct FunCloner {
535610
}
536611
};
537612

538-
static ValueMap clone_params(LLVMValueRef Src, LLVMValueRef Dst) {
539-
unsigned Count = LLVMCountParams(Src);
540-
if (Count != LLVMCountParams(Dst)) {
541-
fprintf(stderr, "Parameter count mismatch\n");
542-
exit(-1);
543-
}
544-
545-
ValueMap VMap;
546-
if (Count == 0)
547-
return VMap;
548-
549-
LLVMValueRef SrcFirst = LLVMGetFirstParam(Src);
550-
LLVMValueRef DstFirst = LLVMGetFirstParam(Dst);
551-
LLVMValueRef SrcLast = LLVMGetLastParam(Src);
552-
LLVMValueRef DstLast = LLVMGetLastParam(Dst);
553-
554-
LLVMValueRef SrcCur = SrcFirst;
555-
LLVMValueRef DstCur = DstFirst;
556-
LLVMValueRef SrcNext = nullptr;
557-
LLVMValueRef DstNext = nullptr;
558-
while (true) {
559-
const char *Name = LLVMGetValueName(SrcCur);
560-
LLVMSetValueName(DstCur, Name);
561-
562-
VMap[SrcCur] = DstCur;
563-
564-
Count--;
565-
SrcNext = LLVMGetNextParam(SrcCur);
566-
DstNext = LLVMGetNextParam(DstCur);
567-
if (SrcNext == nullptr && DstNext == nullptr) {
568-
if (SrcCur != SrcLast) {
569-
fprintf(stderr, "SrcLast param does not match End\n");
570-
exit(-1);
571-
}
572-
573-
if (DstCur != DstLast) {
574-
fprintf(stderr, "DstLast param does not match End\n");
575-
exit(-1);
576-
}
577-
578-
break;
579-
}
580-
581-
if (SrcNext == nullptr) {
582-
fprintf(stderr, "SrcNext was unexpectedly null\n");
583-
exit(-1);
584-
}
585-
586-
if (DstNext == nullptr) {
587-
fprintf(stderr, "DstNext was unexpectedly null\n");
588-
exit(-1);
589-
}
590-
591-
LLVMValueRef SrcPrev = LLVMGetPreviousParam(SrcNext);
592-
if (SrcPrev != SrcCur) {
593-
fprintf(stderr, "SrcNext.Previous param is not Current\n");
594-
exit(-1);
595-
}
596-
597-
LLVMValueRef DstPrev = LLVMGetPreviousParam(DstNext);
598-
if (DstPrev != DstCur) {
599-
fprintf(stderr, "DstNext.Previous param is not Current\n");
600-
exit(-1);
601-
}
602-
603-
SrcCur = SrcNext;
604-
DstCur = DstNext;
605-
}
606-
607-
if (Count != 0) {
608-
fprintf(stderr, "Parameter count does not match iteration\n");
609-
exit(-1);
610-
}
611-
612-
return VMap;
613-
}
614-
615613
static LLVMValueRef clone_function(LLVMValueRef Src, LLVMModuleRef M) {
616614
const char *Name = LLVMGetValueName(Src);
617615
LLVMValueRef Fun = LLVMGetNamedFunction(M, Name);

0 commit comments

Comments
 (0)