[llvm-commits] [gcc-plugin] r81214 - /gcc-plugin/trunk/llvm-convert.cpp
Duncan Sands
baldrick at free.fr
Tue Sep 8 05:42:01 PDT 2009
Author: baldrick
Date: Tue Sep 8 07:42:01 2009
New Revision: 81214
URL: http://llvm.org/viewvc/llvm-project?rev=81214&view=rev
Log:
The operands of CALL_EXPR moved around, access them using
accessor macros instead. This gets function calling working:
the plugin can now compile:
#include <stdio.h>
int main(void) {
printf("hello world!\n");
return 0;
}
Modified:
gcc-plugin/trunk/llvm-convert.cpp
Modified: gcc-plugin/trunk/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/gcc-plugin/trunk/llvm-convert.cpp?rev=81214&r1=81213&r2=81214&view=diff
==============================================================================
--- gcc-plugin/trunk/llvm-convert.cpp (original)
+++ gcc-plugin/trunk/llvm-convert.cpp Tue Sep 8 07:42:01 2009
@@ -2370,20 +2370,22 @@
return Res;
}
- Value *Callee = Emit(TREE_OPERAND(exp, 0), 0);
-
- assert(TREE_TYPE (TREE_OPERAND (exp, 0)) &&
- (TREE_CODE(TREE_TYPE (TREE_OPERAND (exp, 0))) == POINTER_TYPE ||
- TREE_CODE(TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
+ tree call_expr = CALL_EXPR_FN(exp);
+ assert(TREE_TYPE (call_expr) &&
+ (TREE_CODE(TREE_TYPE (call_expr)) == POINTER_TYPE ||
+ TREE_CODE(TREE_TYPE (call_expr)) == REFERENCE_TYPE)
&& "Not calling a function pointer?");
- tree function_type = TREE_TYPE(TREE_TYPE (TREE_OPERAND (exp, 0)));
+
+ tree function_type = TREE_TYPE(TREE_TYPE (call_expr));
+ Value *Callee = Emit(call_expr, 0);
CallingConv::ID CallingConv;
AttrListPtr PAL;
- const Type *Ty = TheTypeConverter->ConvertFunctionType(function_type,
- fndecl,
- TREE_OPERAND(exp, 2),
- CallingConv, PAL);
+ const Type *Ty =
+ TheTypeConverter->ConvertFunctionType(function_type,
+ fndecl,
+ CALL_EXPR_STATIC_CHAIN(exp),
+ CallingConv, PAL);
// If this is a direct call to a function using a static chain then we need
// to ensure the function type is the one just calculated: it has an extra
@@ -2706,7 +2708,7 @@
tree fndecl = get_callee_fndecl(exp);
tree fntype = fndecl ?
- TREE_TYPE(fndecl) : TREE_TYPE (TREE_TYPE(TREE_OPERAND (exp, 0)));
+ TREE_TYPE(fndecl) : TREE_TYPE (TREE_TYPE(CALL_EXPR_FN(exp)));
// Determine the calling convention.
CallingConv::ID CallingConvention = CallingConv::C;
@@ -2728,12 +2730,12 @@
fndecl ? DECL_BUILT_IN(fndecl) : false);
// Pass the static chain, if any, as the first parameter.
- if (TREE_OPERAND(exp, 2))
- CallOperands.push_back(Emit(TREE_OPERAND(exp, 2), 0));
+ if (CALL_EXPR_STATIC_CHAIN(exp))
+ CallOperands.push_back(Emit(CALL_EXPR_STATIC_CHAIN(exp), 0));
// Loop over the arguments, expanding them and adding them to the op list.
std::vector<const Type*> ScalarArgs;
- for (tree arg = TREE_OPERAND(exp, 1); arg; arg = TREE_CHAIN(arg)) {
+ for (tree arg = CALL_EXPR_ARGS(exp); arg; arg = TREE_CHAIN(arg)) {
tree type = TREE_TYPE(TREE_VALUE(arg));
const Type *ArgTy = ConvertType(type);
@@ -4702,7 +4704,7 @@
// Get the result type and operand line in an easy to consume format.
const Type *ResultType = ConvertType(TREE_TYPE(TREE_TYPE(fndecl)));
std::vector<Value*> Operands;
- for (tree Op = TREE_OPERAND(exp, 1); Op; Op = TREE_CHAIN(Op)) {
+ for (tree Op = CALL_EXPR_ARGS(exp); Op; Op = TREE_CHAIN(Op)) {
tree OpVal = TREE_VALUE(Op);
if (isAggregateTreeType(TREE_TYPE(OpVal))) {
MemRef OpLoc = CreateTempLoc(ConvertType(TREE_TYPE(OpVal)));
@@ -4745,7 +4747,7 @@
Value *
TreeToLLVM::BuildBinaryAtomicBuiltin(tree exp, Intrinsic::ID id) {
const Type *ResultTy = ConvertType(TREE_TYPE(exp));
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
Value* C[2] = {
Emit(TREE_VALUE(arglist), 0),
Emit(TREE_VALUE(TREE_CHAIN(arglist)), 0)
@@ -4769,7 +4771,7 @@
Value *
TreeToLLVM::BuildCmpAndSwapAtomicBuiltin(tree exp, tree type, bool isBool) {
const Type *ResultTy = ConvertType(type);
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
Value* C[3] = {
Emit(TREE_VALUE(arglist), 0),
Emit(TREE_VALUE(TREE_CHAIN(arglist)), 0),
@@ -4900,7 +4902,7 @@
return EmitBuiltinUnwindInit(exp, Result);
case BUILT_IN_OBJECT_SIZE: {
- tree ArgList = TREE_OPERAND (exp, 1);
+ tree ArgList = CALL_EXPR_ARGS(exp);
if (!validate_arglist(ArgList, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) {
error("Invalid builtin_object_size argument types");
return false;
@@ -4928,7 +4930,7 @@
case BUILT_IN_CLZ: // These GCC builtins always return int.
case BUILT_IN_CLZL:
case BUILT_IN_CLZLL: {
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
EmitBuiltinUnaryOp(Amt, Result, Intrinsic::ctlz);
const Type *DestTy = ConvertType(TREE_TYPE(exp));
Result = Builder.CreateIntCast(Result, DestTy, "cast");
@@ -4937,7 +4939,7 @@
case BUILT_IN_CTZ: // These GCC builtins always return int.
case BUILT_IN_CTZL:
case BUILT_IN_CTZLL: {
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
EmitBuiltinUnaryOp(Amt, Result, Intrinsic::cttz);
const Type *DestTy = ConvertType(TREE_TYPE(exp));
Result = Builder.CreateIntCast(Result, DestTy, "cast");
@@ -4946,7 +4948,7 @@
case BUILT_IN_PARITYLL:
case BUILT_IN_PARITYL:
case BUILT_IN_PARITY: {
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
EmitBuiltinUnaryOp(Amt, Result, Intrinsic::ctpop);
Result = Builder.CreateBinOp(Instruction::And, Result,
ConstantInt::get(Result->getType(), 1));
@@ -4955,7 +4957,7 @@
case BUILT_IN_POPCOUNT: // These GCC builtins always return int.
case BUILT_IN_POPCOUNTL:
case BUILT_IN_POPCOUNTLL: {
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
EmitBuiltinUnaryOp(Amt, Result, Intrinsic::ctpop);
const Type *DestTy = ConvertType(TREE_TYPE(exp));
Result = Builder.CreateIntCast(Result, DestTy, "cast");
@@ -4963,7 +4965,7 @@
}
case BUILT_IN_BSWAP32:
case BUILT_IN_BSWAP64: {
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
EmitBuiltinUnaryOp(Amt, Result, Intrinsic::bswap);
const Type *DestTy = ConvertType(TREE_TYPE(exp));
Result = Builder.CreateIntCast(Result, DestTy, "cast");
@@ -4999,7 +5001,7 @@
case BUILT_IN_LOGL:
// If errno math has been disabled, expand these to llvm.log calls.
if (!flag_errno_math) {
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
EmitBuiltinUnaryOp(Amt, Result, Intrinsic::log);
Result = CastToFPType(Result, ConvertType(TREE_TYPE(exp)));
return true;
@@ -5010,7 +5012,7 @@
case BUILT_IN_LOG2L:
// If errno math has been disabled, expand these to llvm.log2 calls.
if (!flag_errno_math) {
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
EmitBuiltinUnaryOp(Amt, Result, Intrinsic::log2);
Result = CastToFPType(Result, ConvertType(TREE_TYPE(exp)));
return true;
@@ -5021,7 +5023,7 @@
case BUILT_IN_LOG10L:
// If errno math has been disabled, expand these to llvm.log10 calls.
if (!flag_errno_math) {
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
EmitBuiltinUnaryOp(Amt, Result, Intrinsic::log10);
Result = CastToFPType(Result, ConvertType(TREE_TYPE(exp)));
return true;
@@ -5032,7 +5034,7 @@
case BUILT_IN_EXPL:
// If errno math has been disabled, expand these to llvm.exp calls.
if (!flag_errno_math) {
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
EmitBuiltinUnaryOp(Amt, Result, Intrinsic::exp);
Result = CastToFPType(Result, ConvertType(TREE_TYPE(exp)));
return true;
@@ -5043,7 +5045,7 @@
case BUILT_IN_EXP2L:
// If errno math has been disabled, expand these to llvm.exp2 calls.
if (!flag_errno_math) {
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
EmitBuiltinUnaryOp(Amt, Result, Intrinsic::exp2);
Result = CastToFPType(Result, ConvertType(TREE_TYPE(exp)));
return true;
@@ -5054,7 +5056,7 @@
case BUILT_IN_FFSLL: { // FFS(X) -> (x == 0 ? 0 : CTTZ(x)+1)
// The argument and return type of cttz should match the argument type of
// the ffs, but should ignore the return type of ffs.
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
EmitBuiltinUnaryOp(Amt, Result, Intrinsic::cttz);
Result = Builder.CreateAdd(Result,
ConstantInt::get(Result->getType(), 1));
@@ -5092,7 +5094,7 @@
//TODO file = Builder.getFolder().CreateBitCast(file, SBP);
//TODO
//TODO // Get arguments.
-//TODO tree arglist = TREE_OPERAND(exp, 1);
+//TODO tree arglist = CALL_EXPR_ARGS(exp);
//TODO Value *ExprVal = Emit(TREE_VALUE(arglist), 0);
//TODO const Type *Ty = ExprVal->getType();
//TODO Value *StrVal = Emit(TREE_VALUE(TREE_CHAIN(arglist)), 0);
@@ -5254,7 +5256,7 @@
case BUILT_IN_ADD_AND_FETCH_2:
case BUILT_IN_ADD_AND_FETCH_4: {
const Type *ResultTy = ConvertType(TREE_TYPE(exp));
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
Value* C[2] = {
Emit(TREE_VALUE(arglist), 0),
Emit(TREE_VALUE(TREE_CHAIN(arglist)), 0)
@@ -5292,7 +5294,7 @@
case BUILT_IN_SUB_AND_FETCH_2:
case BUILT_IN_SUB_AND_FETCH_4: {
const Type *ResultTy = ConvertType(TREE_TYPE(exp));
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
Value* C[2] = {
Emit(TREE_VALUE(arglist), 0),
Emit(TREE_VALUE(TREE_CHAIN(arglist)), 0)
@@ -5330,7 +5332,7 @@
case BUILT_IN_OR_AND_FETCH_2:
case BUILT_IN_OR_AND_FETCH_4: {
const Type *ResultTy = ConvertType(TREE_TYPE(exp));
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
Value* C[2] = {
Emit(TREE_VALUE(arglist), 0),
Emit(TREE_VALUE(TREE_CHAIN(arglist)), 0)
@@ -5368,7 +5370,7 @@
case BUILT_IN_AND_AND_FETCH_2:
case BUILT_IN_AND_AND_FETCH_4: {
const Type *ResultTy = ConvertType(TREE_TYPE(exp));
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
Value* C[2] = {
Emit(TREE_VALUE(arglist), 0),
Emit(TREE_VALUE(TREE_CHAIN(arglist)), 0)
@@ -5406,7 +5408,7 @@
case BUILT_IN_XOR_AND_FETCH_2:
case BUILT_IN_XOR_AND_FETCH_4: {
const Type *ResultTy = ConvertType(TREE_TYPE(exp));
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
Value* C[2] = {
Emit(TREE_VALUE(arglist), 0),
Emit(TREE_VALUE(TREE_CHAIN(arglist)), 0)
@@ -5444,7 +5446,7 @@
case BUILT_IN_NAND_AND_FETCH_2:
case BUILT_IN_NAND_AND_FETCH_4: {
const Type *ResultTy = ConvertType(TREE_TYPE(exp));
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
Value* C[2] = {
Emit(TREE_VALUE(arglist), 0),
Emit(TREE_VALUE(TREE_CHAIN(arglist)), 0)
@@ -5497,7 +5499,7 @@
default:
abort();
}
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
tree t1 = build1 (INDIRECT_REF, type, TREE_VALUE (arglist));
TREE_THIS_VOLATILE(t1) = 1;
tree t = build2 (MODIFY_EXPR, type, t1,
@@ -5512,7 +5514,7 @@
#if 1 // FIXME: Should handle these GCC extensions eventually.
case BUILT_IN_LONGJMP: {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (validate_arglist(arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE)) {
tree value = TREE_VALUE(TREE_CHAIN(arglist));
@@ -5562,7 +5564,7 @@
}
Value *TreeToLLVM::EmitBuiltinSQRT(tree exp) {
- Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Amt = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
const Type* Ty = Amt->getType();
return Builder.CreateCall(Intrinsic::getDeclaration(TheModule,
@@ -5571,7 +5573,7 @@
}
Value *TreeToLLVM::EmitBuiltinPOWI(tree exp) {
- tree ArgList = TREE_OPERAND (exp, 1);
+ tree ArgList = CALL_EXPR_ARGS(exp);
if (!validate_arglist(ArgList, REAL_TYPE, INTEGER_TYPE, VOID_TYPE))
return 0;
@@ -5589,7 +5591,7 @@
}
Value *TreeToLLVM::EmitBuiltinPOW(tree exp) {
- tree ArgList = TREE_OPERAND (exp, 1);
+ tree ArgList = CALL_EXPR_ARGS(exp);
if (!validate_arglist(ArgList, REAL_TYPE, REAL_TYPE, VOID_TYPE))
return 0;
@@ -5611,7 +5613,7 @@
}
bool TreeToLLVM::EmitBuiltinExtendPointer(tree exp, Value *&Result) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
Value *Amt = Emit(TREE_VALUE(arglist), 0);
bool AmtIsSigned = !TYPE_UNSIGNED(TREE_TYPE(TREE_VALUE(arglist)));
bool ExpIsSigned = !TYPE_UNSIGNED(TREE_TYPE(exp));
@@ -5652,7 +5654,7 @@
/// depending on the value of isMemMove.
bool TreeToLLVM::EmitBuiltinMemCopy(tree exp, Value *&Result, bool isMemMove,
bool SizeCheck) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (SizeCheck) {
if (!validate_arglist(arglist, POINTER_TYPE, POINTER_TYPE,
INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE))
@@ -5685,7 +5687,7 @@
}
bool TreeToLLVM::EmitBuiltinMemSet(tree exp, Value *&Result, bool SizeCheck) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (SizeCheck) {
if (!validate_arglist(arglist, POINTER_TYPE, INTEGER_TYPE,
INTEGER_TYPE, INTEGER_TYPE, VOID_TYPE))
@@ -5713,7 +5715,7 @@
}
bool TreeToLLVM::EmitBuiltinBZero(tree exp, Value *&Result) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (!validate_arglist(arglist, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
return false;
@@ -5728,7 +5730,7 @@
}
bool TreeToLLVM::EmitBuiltinPrefetch(tree exp) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (!validate_arglist(arglist, POINTER_TYPE, 0))
return false;
@@ -5782,7 +5784,7 @@
/// EmitBuiltinReturnAddr - Emit an llvm.returnaddress or llvm.frameaddress
/// instruction, depending on whether isFrame is true or not.
bool TreeToLLVM::EmitBuiltinReturnAddr(tree exp, Value *&Result, bool isFrame) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (!validate_arglist(arglist, INTEGER_TYPE, VOID_TYPE))
return false;
@@ -5803,7 +5805,7 @@
}
bool TreeToLLVM::EmitBuiltinExtractReturnAddr(tree exp, Value *&Result) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
Value *Ptr = Emit(TREE_VALUE(arglist), 0);
@@ -5820,7 +5822,7 @@
}
bool TreeToLLVM::EmitBuiltinFrobReturnAddr(tree exp, Value *&Result) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
Value *Ptr = Emit(TREE_VALUE(arglist), 0);
@@ -5836,7 +5838,7 @@
}
bool TreeToLLVM::EmitBuiltinStackSave(tree exp, Value *&Result) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (!validate_arglist(arglist, VOID_TYPE))
return false;
@@ -5873,7 +5875,7 @@
#endif
bool TreeToLLVM::EmitBuiltinDwarfCFA(tree exp, Value *&Result) {
- if (!validate_arglist(TREE_OPERAND(exp, 1), VOID_TYPE))
+ if (!validate_arglist(CALL_EXPR_ARGS(exp), VOID_TYPE))
return false;
int cfa_offset = ARG_POINTER_CFA_OFFSET(exp);
@@ -5887,7 +5889,7 @@
}
bool TreeToLLVM::EmitBuiltinDwarfSPColumn(tree exp, Value *&Result) {
- if (!validate_arglist(TREE_OPERAND(exp, 1), VOID_TYPE))
+ if (!validate_arglist(CALL_EXPR_ARGS(exp), VOID_TYPE))
return false;
unsigned int dwarf_regnum = DWARF_FRAME_REGNUM(STACK_POINTER_REGNUM);
@@ -5898,7 +5900,7 @@
bool TreeToLLVM::EmitBuiltinEHReturnDataRegno(tree exp, Value *&Result) {
#ifdef EH_RETURN_DATA_REGNO
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (!validate_arglist(arglist, INTEGER_TYPE, VOID_TYPE))
return false;
@@ -5925,7 +5927,7 @@
}
bool TreeToLLVM::EmitBuiltinEHReturn(tree exp, Value *&Result) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (!validate_arglist(arglist, INTEGER_TYPE, POINTER_TYPE, VOID_TYPE))
return false;
@@ -5957,7 +5959,7 @@
bool wrote_return_column = false;
static bool reg_modes_initialized = false;
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (!validate_arglist(arglist, POINTER_TYPE, VOID_TYPE))
return false;
@@ -6014,7 +6016,7 @@
}
bool TreeToLLVM::EmitBuiltinUnwindInit(tree exp, Value *&Result) {
- if (!validate_arglist(TREE_OPERAND(exp, 1), VOID_TYPE))
+ if (!validate_arglist(CALL_EXPR_ARGS(exp), VOID_TYPE))
return false;
Result = Builder.CreateCall(Intrinsic::getDeclaration(TheModule,
@@ -6024,7 +6026,7 @@
}
bool TreeToLLVM::EmitBuiltinStackRestore(tree exp) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (!validate_arglist(arglist, POINTER_TYPE, VOID_TYPE))
return false;
@@ -6038,7 +6040,7 @@
bool TreeToLLVM::EmitBuiltinAlloca(tree exp, Value *&Result) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (!validate_arglist(arglist, INTEGER_TYPE, VOID_TYPE))
return false;
Value *Amt = Emit(TREE_VALUE(arglist), 0);
@@ -6051,7 +6053,7 @@
Value *&Result) {
// Ignore the hint for now, just expand the expr. This is safe, but not
// optimal.
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (arglist == NULL_TREE || TREE_CHAIN(arglist) == NULL_TREE)
return true;
Result = Emit(TREE_VALUE(arglist), DestLoc);
@@ -6059,7 +6061,7 @@
}
bool TreeToLLVM::EmitBuiltinVAStart(tree exp) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
tree fntype = TREE_TYPE(current_function_decl);
if (TYPE_ARG_TYPES(fntype) == 0 ||
@@ -6084,7 +6086,7 @@
}
bool TreeToLLVM::EmitBuiltinVAEnd(tree exp) {
- Value *Arg = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
+ Value *Arg = Emit(TREE_VALUE(CALL_EXPR_ARGS(exp)), 0);
Arg = BitCastToType(Arg, PointerType::getUnqual(Type::getInt8Ty(Context)));
Builder.CreateCall(Intrinsic::getDeclaration(TheModule, Intrinsic::vaend),
Arg);
@@ -6092,8 +6094,8 @@
}
bool TreeToLLVM::EmitBuiltinVACopy(tree exp) {
- tree Arg1T = TREE_VALUE(TREE_OPERAND(exp, 1));
- tree Arg2T = TREE_VALUE(TREE_CHAIN(TREE_OPERAND(exp, 1)));
+ tree Arg1T = TREE_VALUE(CALL_EXPR_ARGS(exp));
+ tree Arg2T = TREE_VALUE(TREE_CHAIN(CALL_EXPR_ARGS(exp)));
Value *Arg1 = Emit(Arg1T, 0); // Emit the address of the destination.
// The second arg of llvm.va_copy is a pointer to a valist.
@@ -6123,7 +6125,7 @@
}
bool TreeToLLVM::EmitBuiltinInitTrampoline(tree exp, Value *&Result) {
- tree arglist = TREE_OPERAND(exp, 1);
+ tree arglist = CALL_EXPR_ARGS(exp);
if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, POINTER_TYPE,
VOID_TYPE))
return false;
More information about the llvm-commits
mailing list