[llvm-commits] [llvm-gcc-4.2] r57199 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Evan Cheng
evan.cheng at apple.com
Mon Oct 6 13:06:05 PDT 2008
Author: evancheng
Date: Mon Oct 6 15:06:02 2008
New Revision: 57199
URL: http://llvm.org/viewvc/llvm-project?rev=57199&view=rev
Log:
Apply Duncan's patch which does what r57022 does but in a much cleaner way.
Modified:
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=57199&r1=57198&r2=57199&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Mon Oct 6 15:06:02 2008
@@ -2746,19 +2746,8 @@
}
Attributes Attrs = Attribute::None;
- // See EmitEXC_PTR_EXPR and EmitFILTER_EXPR. Rather than handle the
- // arguments themselves, process eh_value and eh_select.
- if (TREE_CODE(TREE_VALUE(arg)) == EXC_PTR_EXPR) {
- const Type *Ty = ExceptionValue->getType();
- Ty = cast<PointerType>(Ty)->getElementType();
- Client.HandleScalarArgument(Ty, 0);
- } else if (TREE_CODE(TREE_VALUE(arg)) == FILTER_EXPR) {
- const Type *Ty = ExceptionSelectorValue->getType();
- Ty = cast<PointerType>(Ty)->getElementType();
- Client.HandleScalarArgument(Ty, 0);
- } else
- ABIConverter.HandleArgument(TREE_TYPE(TREE_VALUE(arg)), ScalarArgs,
- &Attrs);
+ ABIConverter.HandleArgument(TREE_TYPE(TREE_VALUE(arg)), ScalarArgs,
+ &Attrs);
if (Attrs != Attribute::None)
PAL = PAL.addAttr(CallOperands.size(), Attrs);
@@ -3749,14 +3738,18 @@
Value *TreeToLLVM::EmitEXC_PTR_EXPR(tree exp) {
CreateExceptionValues();
// Load exception address.
- return Builder.CreateLoad(ExceptionValue, "eh_value");
+ Value *V = Builder.CreateLoad(ExceptionValue, "eh_value");
+ // Cast the address to the right pointer type.
+ return BitCastToType(V, ConvertType(TREE_TYPE(exp)));
}
/// EmitFILTER_EXPR - Handle FILTER_EXPR.
Value *TreeToLLVM::EmitFILTER_EXPR(tree exp) {
CreateExceptionValues();
// Load exception selector.
- return Builder.CreateLoad(ExceptionSelectorValue, "eh_select");
+ Value *V = Builder.CreateLoad(ExceptionSelectorValue, "eh_select");
+ // Cast the address to the right pointer type.
+ return BitCastToType(V, ConvertType(TREE_TYPE(exp)));
}
/// EmitRESX_EXPR - Handle RESX_EXPR.
@@ -6190,12 +6183,15 @@
LValue TreeToLLVM::EmitLV_EXC_PTR_EXPR(tree exp) {
CreateExceptionValues();
- return ExceptionValue;
+ // Cast the address pointer to the expected type.
+ return BitCastToType(ExceptionValue,
+ PointerType::getUnqual(ConvertType(TREE_TYPE(exp))));
}
LValue TreeToLLVM::EmitLV_FILTER_EXPR(tree exp) {
CreateExceptionValues();
- return ExceptionSelectorValue;
+ return BitCastToType(ExceptionSelectorValue,
+ PointerType::getUnqual(ConvertType(TREE_TYPE(exp))));
}
//===----------------------------------------------------------------------===//
More information about the llvm-commits
mailing list