[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