[llvm-c] Avoid deprecated APIs in tests

Avoid the use of deprecated (opaque pointer incompatible) APIs
in C API tests, in preparation for header deprecation. Add a
LLVMGetGEPSourceElementType() to cover a bit of functionality
that is necessary for the echo test.

This change is split out from https://reviews.llvm.org/D114936.
This commit is contained in:
Nikita Popov 2021-12-04 18:54:36 +01:00
parent ca2f53897a
commit 573a9bc4ad
4 changed files with 22 additions and 8 deletions

View File

@ -3506,6 +3506,11 @@ LLVMBool LLVMIsInBounds(LLVMValueRef GEP);
*/
void LLVMSetIsInBounds(LLVMValueRef GEP, LLVMBool InBounds);
/**
* Get the source element type of the given GEP instruction.
*/
LLVMTypeRef LLVMGetGEPSourceElementType(LLVMValueRef GEP);
/**
* @}
*/

View File

@ -3014,6 +3014,10 @@ void LLVMSetIsInBounds(LLVMValueRef GEP, LLVMBool InBounds) {
return unwrap<GetElementPtrInst>(GEP)->setIsInBounds(InBounds);
}
LLVMTypeRef LLVMGetGEPSourceElementType(LLVMValueRef GEP) {
return wrap(unwrap<GetElementPtrInst>(GEP)->getSourceElementType());
}
/*--.. Operations on phi nodes .............................................--*/
void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,

View File

@ -74,8 +74,9 @@ static LLVMValueRef build_from_tokens(char **tokens, int ntokens,
return NULL;
}
off = LLVMBuildGEP(builder, param, &stack[depth - 1], 1, "");
stack[depth - 1] = LLVMBuildLoad(builder, off, "");
LLVMTypeRef ty = LLVMInt64Type();
off = LLVMBuildGEP2(builder, ty, param, &stack[depth - 1], 1, "");
stack[depth - 1] = LLVMBuildLoad2(builder, ty, off, "");
break;
}

View File

@ -524,11 +524,12 @@ struct FunCloner {
int ArgCount = LLVMGetNumArgOperands(Src);
for (int i = 0; i < ArgCount; i++)
Args.push_back(CloneValue(LLVMGetOperand(Src, i)));
LLVMTypeRef FnTy = CloneType(LLVMGetCalledFunctionType(Src));
LLVMValueRef Fn = CloneValue(LLVMGetCalledValue(Src));
LLVMBasicBlockRef Then = DeclareBB(LLVMGetNormalDest(Src));
LLVMBasicBlockRef Unwind = DeclareBB(LLVMGetUnwindDest(Src));
Dst = LLVMBuildInvoke(Builder, Fn, Args.data(), ArgCount,
Then, Unwind, Name);
Dst = LLVMBuildInvoke2(Builder, FnTy, Fn, Args.data(), ArgCount,
Then, Unwind, Name);
CloneAttrs(Src, Dst);
break;
}
@ -621,7 +622,7 @@ struct FunCloner {
}
case LLVMLoad: {
LLVMValueRef Ptr = CloneValue(LLVMGetOperand(Src, 0));
Dst = LLVMBuildLoad(Builder, Ptr, Name);
Dst = LLVMBuildLoad2(Builder, CloneType(Src), Ptr, Name);
LLVMSetAlignment(Dst, LLVMGetAlignment(Src));
LLVMSetOrdering(Dst, LLVMGetOrdering(Src));
LLVMSetVolatile(Dst, LLVMGetVolatile(Src));
@ -637,15 +638,17 @@ struct FunCloner {
break;
}
case LLVMGetElementPtr: {
LLVMTypeRef ElemTy = CloneType(LLVMGetGEPSourceElementType(Src));
LLVMValueRef Ptr = CloneValue(LLVMGetOperand(Src, 0));
SmallVector<LLVMValueRef, 8> Idx;
int NumIdx = LLVMGetNumIndices(Src);
for (int i = 1; i <= NumIdx; i++)
Idx.push_back(CloneValue(LLVMGetOperand(Src, i)));
if (LLVMIsInBounds(Src))
Dst = LLVMBuildInBoundsGEP(Builder, Ptr, Idx.data(), NumIdx, Name);
Dst = LLVMBuildInBoundsGEP2(Builder, ElemTy, Ptr, Idx.data(), NumIdx,
Name);
else
Dst = LLVMBuildGEP(Builder, Ptr, Idx.data(), NumIdx, Name);
Dst = LLVMBuildGEP2(Builder, ElemTy, Ptr, Idx.data(), NumIdx, Name);
break;
}
case LLVMAtomicRMW: {
@ -709,8 +712,9 @@ struct FunCloner {
int ArgCount = LLVMGetNumArgOperands(Src);
for (int i = 0; i < ArgCount; i++)
Args.push_back(CloneValue(LLVMGetOperand(Src, i)));
LLVMTypeRef FnTy = CloneType(LLVMGetCalledFunctionType(Src));
LLVMValueRef Fn = CloneValue(LLVMGetCalledValue(Src));
Dst = LLVMBuildCall(Builder, Fn, Args.data(), ArgCount, Name);
Dst = LLVMBuildCall2(Builder, FnTy, Fn, Args.data(), ArgCount, Name);
LLVMSetTailCall(Dst, LLVMIsTailCall(Src));
CloneAttrs(Src, Dst);
break;