[llvm-commits] [llvm-gcc-4.2] r42315 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Chris Lattner clattner at apple.com
Tue Sep 25 13:49:50 PDT 2007


This should also be safe to apply to 4.0, right?

-Chris

On Sep 25, 2007, at 1:12 PM, Duncan Sands wrote:

> Author: baldrick
> Date: Tue Sep 25 15:12:14 2007
> New Revision: 42315
>
> URL: http://llvm.org/viewvc/llvm-project?rev=42315&view=rev
> Log:
> Handle scalar to aggregate VIEW_CONVERT_EXPR lvalue.
>
> 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=42315&r1=42314&r2=42315&view=diff
>
> ====================================================================== 
> ========
> --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
> +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Tue Sep 25 15:12:14 2007
> @@ -5068,12 +5068,22 @@
>  }
>
>  LValue TreeToLLVM::EmitLV_VIEW_CONVERT_EXPR(tree exp) {
> -  // The address is the address of the operand.
> -  LValue LV = EmitLV(TREE_OPERAND(exp, 0));
> -  // The type is the type of the expression.
> -  const Type *Ty = ConvertType(TREE_TYPE(exp));
> -  LV.Ptr = BitCastToType(LV.Ptr, PointerType::get(Ty));
> -  return LV;
> +  tree Op = TREE_OPERAND(exp, 0);
> +
> +  if (isAggregateTreeType(TREE_TYPE(Op))) {
> +    // If the input is an aggregate, the address is the address of  
> the operand.
> +    LValue LV = EmitLV(Op);
> +    // The type is the type of the expression.
> +    LV.Ptr = BitCastToType(LV.Ptr, PointerType::get(ConvertType 
> (TREE_TYPE(exp))));
> +    return LV;
> +  } else {
> +    // If the input is a scalar, emit to a temporary.
> +    Value *Dest = CreateTemporary(ConvertType(TREE_TYPE(Op)));
> +    Builder.CreateStore(Emit(Op, 0), Dest);
> +    // The type is the type of the expression.
> +    Dest = BitCastToType(Dest, PointerType::get(ConvertType 
> (TREE_TYPE(exp))));
> +    return LValue(Dest);
> +  }
>  }
>
>  LValue TreeToLLVM::EmitLV_EXC_PTR_EXPR(tree exp) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list