Update code to work with new Module::getOrInsertFunction
prototype. Fix unordered comparison emission from being this:
%tmp = fcmp uno float %tmp, %tmp1 ; <bool>
[#uses=1]
%tmp2 = call bool %llvm.isunordered.f32( float %tmp, float %
tmp1 )
%tmp3 = or bool %tmp, %tmp2 ; <bool> [#uses=1]
to now be:
%tmp = fcmp uno float %tmp, %tmp1
Index: llvm-convert.cpp
===================================================================
--- llvm-convert.cpp (revision 122083)
+++ llvm-convert.cpp (working copy)
@@ -551,26 +551,34 @@
// Binary Operators
case LT_EXPR:
Result = EmitCompare(exp, ICmpInst::ICMP_ULT, ICmpInst::ICMP_SLT,
- FCmpInst::FCMP_OLT); break;
+ FCmpInst::FCMP_OLT);
+ break;
case LE_EXPR:
Result = EmitCompare(exp, ICmpInst::ICMP_ULE, ICmpInst::ICMP_SLE,
- FCmpInst::FCMP_OLE); break;
+ FCmpInst::FCMP_OLE);
+ break;
case GT_EXPR:
Result = EmitCompare(exp, ICmpInst::ICMP_UGT, ICmpInst::ICMP_SGT,
- FCmpInst::FCMP_OGT); break;
+ FCmpInst::FCMP_OGT);
+ break;
case GE_EXPR:
Result = EmitCompare(exp, ICmpInst::ICMP_UGE, ICmpInst::ICMP_SGE,
- FCmpInst::FCMP_OGE); break;
+ FCmpInst::FCMP_OGE);
+ break;
case EQ_EXPR:
Result = EmitCompare(exp, ICmpInst::ICMP_EQ, ICmpInst::ICMP_EQ,
- FCmpInst::FCMP_OEQ); break;
+ FCmpInst::FCMP_OEQ);
+ break;
case NE_EXPR:
Result = EmitCompare(exp, ICmpInst::ICMP_NE, ICmpInst::ICMP_NE,
- FCmpInst::FCMP_UNE); break;
+ FCmpInst::FCMP_UNE);
+ break;
case UNORDERED_EXPR:
- Result = EmitCompare(exp, 0, 0, FCmpInst::FCMP_UNO); break;
+ Result = EmitCompare(exp, 0, 0, FCmpInst::FCMP_UNO);
+ break;
case ORDERED_EXPR:
- Result = EmitCompare(exp, 0, 0, FCmpInst::FCMP_ORD); break;
+ Result = EmitCompare(exp, 0, 0, FCmpInst::FCMP_ORD);
+ break;
case UNLT_EXPR: Result = EmitCompare(exp, 0, 0, FCmpInst::FCMP_ULT); break;
case UNLE_EXPR: Result = EmitCompare(exp, 0, 0, FCmpInst::FCMP_ULE); break;
case UNGT_EXPR: Result = EmitCompare(exp, 0, 0, FCmpInst::FCMP_UGT); break;
@@ -936,7 +944,7 @@
void TreeToLLVM::EmitMemCpy(Value *DestPtr, Value *SrcPtr, Value *Size,
unsigned Align) {
const Type *SBP = PointerType::get(Type::Int8Ty);
- static Function *MemCpy = 0;
+ static Constant *MemCpy = 0;
const Type *IntPtr = TD.getIntPtrType();
if (!MemCpy) {
const char *Name = IntPtr == Type::Int32Ty ?
@@ -956,7 +964,7 @@
void TreeToLLVM::EmitMemMove(Value *DestPtr, Value *SrcPtr, Value *Size,
unsigned Align) {
const Type *SBP = PointerType::get(Type::Int8Ty);
- static Function *MemMove = 0;
+ static Constant *MemMove = 0;
const Type *IntPtr = TD.getIntPtrType();
if (!MemMove) {
const char *Name = IntPtr == Type::Int32Ty ?
@@ -975,7 +983,7 @@
void TreeToLLVM::EmitMemSet(Value *DestPtr, Value *SrcVal, Value *Size,
unsigned Align) {
const Type *SBP = PointerType::get(Type::Int8Ty);
- static Function *MemSet = 0;
+ static Constant *MemSet = 0;
const Type *IntPtr = TD.getIntPtrType();
if (!MemSet) {
const char *Name = IntPtr == Type::Int32Ty ?
@@ -2409,32 +2417,9 @@
}
// Handle floating point comparisons, if we get here.
- Value *Result = 0;
- if (FPPred)
- Result = new FCmpInst(FCmpInst::Predicate(FPPred), LHS, RHS, "tmp", CurBB);
+ Value *Result =
+ new FCmpInst(FCmpInst::Predicate(FPPred), LHS, RHS, "tmp", CurBB);
- if (CmpInst::isUnordered(FCmpInst::Predicate(FPPred))) {
- static Function *IsUnordF = 0, *IsUnordD = 0;
- Function *&Callee = LHS->getType() == Type::FloatTy ? IsUnordF : IsUnordD;
- const char *Name = LHS->getType() == Type::FloatTy ?
- "llvm.isunordered.f32" : "llvm.isunordered.f64";
-
- if (Callee == 0)
- Callee = TheModule->getOrInsertFunction(Name,
- Type::BoolTy, LHS->getType(),
- LHS->getType(), NULL);
-
- Value *IsUnord = new CallInst(Callee, LHS, RHS, "tmp", CurBB);
- if (Result)
- Result = BinaryOperator::createOr(Result, IsUnord, "tmp", CurBB);
- else
- Result = IsUnord;
-
- // If this is an ORDERED_EXPR, invert the result of the isunordered call.
- if (TREE_CODE(exp) == ORDERED_EXPR)
- Result = BinaryOperator::createNot(Result, "tmp", CurBB);
- }
-
// The GCC type is probably an int, not a bool.
return CastToUIntType(Result, ConvertType(TREE_TYPE(exp)));
}
@@ -3144,7 +3129,7 @@
Value *DestLoc, Value *&Result) {
if (DECL_BUILT_IN_CLASS(fndecl) == BUILT_IN_MD) {
unsigned FnCode = DECL_FUNCTION_CODE(fndecl);
- static std::vector<Function*> TargetBuiltinCache;
+ static std::vector<Constant*> TargetBuiltinCache;
if (TargetBuiltinCache.size() <= FnCode)
TargetBuiltinCache.resize(FnCode+1);
@@ -3344,8 +3329,10 @@
}
if (*FCache == 0)
- *FCache = TheModule->getOrInsertFunction(Name, InVal->getType(),
- InVal->getType(), NULL);
+ *FCache = cast<Function>(TheModule->getOrInsertFunction(Name,
+ InVal->getType(),
+ InVal->getType(),
+ NULL));
Result = new CallInst(*FCache, InVal, "tmp", CurBB);
// The LLVM intrinsics for these return the same type as their operands. The
@@ -3368,8 +3355,9 @@
}
if (*FCache == 0)
- *FCache = TheModule->getOrInsertFunction(Name, Amt->getType(),
- Amt->getType(), NULL);
+ *FCache =
cast<Function>(TheModule->getOrInsertFunction(Name,Amt->getType(),
+ Amt->getType(),
+ NULL));
return new CallInst(*FCache, Amt, "tmp", CurBB);
}
@@ -3382,9 +3370,9 @@
Value *Pow = Emit(TREE_VALUE(TREE_CHAIN(ArgList)), 0);
Pow = CastToSIntType(Pow, Type::Int32Ty);
- static Function *Fn32 = 0, *Fn64 = 0;
+ static Constant *Fn32 = 0, *Fn64 = 0;
const char *Name;
- Function **FCache;
+ Constant **FCache;
switch (Val->getType()->getTypeID()) {
default: assert(0 && "Unknown FP type!");
case Type::FloatTyID: Name = "llvm.powi.f32"; FCache = &Fn32; break;
@@ -3394,7 +3382,8 @@
// First time we used this intrinsic?
if (*FCache == 0)
*FCache = TheModule->getOrInsertFunction(Name, Val->getType(),
- Val->getType(), Type::Int32Ty,
NULL);
+ Val->getType(), Type::Int32Ty,
+ NULL);
return new CallInst(*FCache, Val, Pow, "tmp", CurBB);
}
@@ -3526,7 +3515,7 @@
Ptr = CastToType(Instruction::BitCast, Ptr, PointerType::get(Type::Int8Ty));
- static Function *llvm_prefetch_fn = 0;
+ static Constant *llvm_prefetch_fn = 0;
if (!llvm_prefetch_fn)
llvm_prefetch_fn =
TheModule->getOrInsertFunction("llvm.prefetch", Type::VoidTy,
@@ -3558,7 +3547,7 @@
}
Value *Fn;
- static Function *llvm_retaddr = 0, *llvm_frameaddr;
+ static Constant *llvm_retaddr = 0, *llvm_frameaddr;
if (!isFrame) {
if (!llvm_retaddr)
llvm_retaddr =
@@ -3585,7 +3574,7 @@
if (!validate_arglist(arglist, VOID_TYPE))
return false;
- static Function *Fn = 0;
+ static Constant *Fn = 0;
if (!Fn)
Fn = TheModule->getOrInsertFunction("llvm.stacksave",
PointerType::get(Type::Int8Ty), NULL);
@@ -3598,7 +3587,7 @@
if (!validate_arglist(arglist, POINTER_TYPE, VOID_TYPE))
return false;
- static Function *Fn = 0;
+ static Constant *Fn = 0;
if (!Fn)
Fn = TheModule->getOrInsertFunction("llvm.stackrestore", Type::VoidTy,
PointerType::get(Type::Int8Ty), NULL);
@@ -3634,7 +3623,7 @@
tree arglist = TREE_OPERAND(exp, 1);
tree fntype = TREE_TYPE(current_function_decl);
- static Function *llvm_va_start_fn = 0;
+ static Constant *llvm_va_start_fn = 0;
if (!llvm_va_start_fn) {
tree FnDecl = TREE_OPERAND(TREE_OPERAND(exp, 0), 0);
const FunctionType *FnTy =
@@ -3662,7 +3651,8 @@
Value *ArgVal = Emit(TREE_VALUE(arglist), 0);
- const Type *FTy = llvm_va_start_fn->getType()->getElementType();
+ const Type *FTy =
+ cast<PointerType>(llvm_va_start_fn->getType())->getElementType();
ArgVal = CastToType(Instruction::BitCast, ArgVal,
cast<FunctionType>(FTy)->getParamType(0));
new CallInst(llvm_va_start_fn, ArgVal, "", CurBB);
@@ -3670,7 +3660,7 @@
}
bool TreeToLLVM::EmitBuiltinVAEnd(tree exp) {
- static Function *llvm_va_end_fn = 0;
+ static Constant *llvm_va_end_fn = 0;
if (!llvm_va_end_fn) {
tree FnDecl = TREE_OPERAND(TREE_OPERAND(exp, 0), 0);
const FunctionType *VAEndTy =
@@ -3679,7 +3669,8 @@
}
Value *Arg = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0);
- const Type *FTy = llvm_va_end_fn->getType()->getElementType();
+ const Type *FTy =
+ cast<PointerType>(llvm_va_end_fn->getType())->getElementType();
Arg = CastToType(Instruction::BitCast, Arg,
cast<FunctionType>(FTy)->getParamType(0));
@@ -3688,7 +3679,7 @@
}
bool TreeToLLVM::EmitBuiltinVACopy(tree exp) {
- static Function *llvm_va_copy_fn = 0;
+ static Constant *llvm_va_copy_fn = 0;
if (!llvm_va_copy_fn) {
tree FnDecl = TREE_OPERAND(TREE_OPERAND(exp, 0), 0);
const FunctionType *FnTy =
@@ -3718,7 +3709,8 @@
Emit(Arg2T, Arg2);
}
- const Type *FTy = llvm_va_copy_fn->getType()->getElementType();
+ const Type *FTy =
+ cast<PointerType>(llvm_va_copy_fn->getType())->getElementType();
const Type *PtrList = cast<FunctionType>(FTy)->getParamType(0);
Arg1 = CastToType(Instruction::BitCast, Arg1, PtrList);
Arg2 = CastToType(Instruction::BitCast, Arg2, PtrList);
Index: llvm-debug.cpp
===================================================================
--- llvm-debug.cpp (revision 122081)
+++ llvm-debug.cpp (working copy)
@@ -274,8 +274,10 @@
// Lazily construct llvm.dbg.func.start.
if (!FuncStartFn) {
- FuncStartFn = M->getOrInsertFunction("llvm.dbg.func.start",
- Type::VoidTy, SR.getEmptyStructPtrType(), NULL);
+ FuncStartFn =
+ cast<Function>(M->getOrInsertFunction("llvm.dbg.func.start",
+ Type::VoidTy,
+ SR.getEmptyStructPtrType(), NULL));
}
// Call llvm.dbg.func.start.
@@ -298,8 +300,9 @@
// Lazily construct llvm.dbg.region.start function.
if (!RegionStartFn) {
const PointerType *EmpPtr = SR.getEmptyStructPtrType();
- RegionStartFn = M->getOrInsertFunction("llvm.dbg.region.start",
- Type::VoidTy, EmpPtr, NULL);
+ RegionStartFn =
+ cast<Function>(M->getOrInsertFunction("llvm.dbg.region.start",
+ Type::VoidTy, EmpPtr, NULL));
}
// Call llvm.dbg.func.start.
@@ -312,8 +315,9 @@
// Lazily construct llvm.dbg.region.end function.
if (!RegionEndFn) {
const PointerType *EmpPtr = SR.getEmptyStructPtrType();
- RegionEndFn = M->getOrInsertFunction("llvm.dbg.region.end",
- Type::VoidTy, EmpPtr, NULL);
+ RegionEndFn =
+ cast<Function>(M->getOrInsertFunction("llvm.dbg.region.end",
Type::VoidTy,
+ EmpPtr, NULL));
}
// Provide an region stop point.
@@ -331,8 +335,9 @@
// Lazily construct llvm.dbg.declare function.
const PointerType *EmpPtr = SR.getEmptyStructPtrType();
if (!DeclareFn) {
- DeclareFn = M->getOrInsertFunction("llvm.dbg.declare",
- Type::VoidTy, EmpPtr, EmpPtr, NULL);
+ DeclareFn =
+ cast<Function>(M->getOrInsertFunction("llvm.dbg.declare",
+ Type::VoidTy, EmpPtr,
EmpPtr,NULL));
}
// Get type information.
@@ -378,9 +383,11 @@
// Lazily construct llvm.dbg.stoppoint function.
if (!StopPointFn) {
- StopPointFn = M->getOrInsertFunction("llvm.dbg.stoppoint",
- Type::VoidTy, Type::Int32Ty, Type::Int32Ty,
- SR.getEmptyStructPtrType(), NULL);
+ StopPointFn =
+ cast<Function>(M->getOrInsertFunction("llvm.dbg.stoppoint",
+ Type::VoidTy, Type::Int32Ty,
+ Type::Int32Ty,
+ SR.getEmptyStructPtrType(), NULL));
}
// Invoke llvm.dbg.stoppoint
-Chris
_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits