Revision: 123568 Author: clattner Date: 2007-02-07 20:34:00 -0800 (Wed, 07 Feb 2007)
Log Message: ----------- Complete support for the GCC address-of-label extension (most was already implemented) and do some other minor cleanup. This implements PR947 and test/CFrontend/2007-02-07-AddrLabel.c Modified Paths: -------------- apple-local/branches/llvm/gcc/llvm-convert.cpp apple-local/branches/llvm/gcc/llvm-internal.h Modified: apple-local/branches/llvm/gcc/llvm-convert.cpp =================================================================== --- apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-02-08 02:16:06 UTC (rev 123567) +++ apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-02-08 04:34:00 UTC (rev 123568) @@ -689,18 +689,24 @@ case FUNCTION_DECL: case CONST_DECL: case RESULT_DECL: return EmitLV_DECL(exp); - case STRING_CST: return LValue(TreeConstantToLLVM::EmitLV_STRING_CST(exp)); - case INDIRECT_REF: return EmitLV_INDIRECT_REF(exp); case ARRAY_RANGE_REF: case ARRAY_REF: return EmitLV_ARRAY_REF(exp); case COMPONENT_REF: return EmitLV_COMPONENT_REF(exp); case BIT_FIELD_REF: return EmitLV_BIT_FIELD_REF(exp); case REALPART_EXPR: return EmitLV_XXXXPART_EXPR(exp, 0); case IMAGPART_EXPR: return EmitLV_XXXXPART_EXPR(exp, 1); + // Constants. + case LABEL_DECL: return TreeConstantToLLVM::EmitLV_LABEL_DECL(exp); + case STRING_CST: return LValue(TreeConstantToLLVM::EmitLV_STRING_CST(exp)); + + // Trivial Cases. case VIEW_CONVERT_EXPR: case WITH_SIZE_EXPR: // The address of a these is the address of their operand. return EmitLV(TREE_OPERAND(exp, 0)); + case INDIRECT_REF: + // The lvalue is just the address. + return Emit(TREE_OPERAND(exp, 0), 0); } } @@ -4093,11 +4099,6 @@ return CastToType(Instruction::BitCast, Decl, PTy); } -LValue TreeToLLVM::EmitLV_INDIRECT_REF(tree exp) { - // The lvalue is just the address. - return Emit(TREE_OPERAND(exp, 0), 0); -} - LValue TreeToLLVM::EmitLV_ARRAY_REF(tree exp) { tree Array = TREE_OPERAND(exp, 0); tree Index = TREE_OPERAND(exp, 1); @@ -5095,9 +5096,11 @@ case COMPONENT_REF: return EmitLV_COMPONENT_REF(exp); case ARRAY_RANGE_REF: case ARRAY_REF: return EmitLV_ARRAY_REF(exp); - case INDIRECT_REF: return EmitLV_INDIRECT_REF(exp); + case INDIRECT_REF: + // The lvalue is just the address. + return Convert(TREE_OPERAND(exp, 0)); case COMPOUND_LITERAL_EXPR: - return EmitLV_COMPOUND_LITERAL_EXPR(exp); + return EmitLV(COMPOUND_LITERAL_EXPR_DECL(exp)); } } @@ -5278,15 +5281,5 @@ return FieldPtr; } -Constant* TreeConstantToLLVM::EmitLV_INDIRECT_REF(tree exp) { - // The lvalue is just the address. - return Convert(TREE_OPERAND(exp, 0)); -} - -Constant *TreeConstantToLLVM::EmitLV_COMPOUND_LITERAL_EXPR(tree exp) { - tree Decl = COMPOUND_LITERAL_EXPR_DECL(exp); - return EmitLV(Decl); -} - /* APPLE LOCAL end LLVM (ENTIRE FILE!) */ Modified: apple-local/branches/llvm/gcc/llvm-internal.h =================================================================== --- apple-local/branches/llvm/gcc/llvm-internal.h 2007-02-08 02:16:06 UTC (rev 123567) +++ apple-local/branches/llvm/gcc/llvm-internal.h 2007-02-08 04:34:00 UTC (rev 123568) @@ -463,7 +463,6 @@ Value *EmitComplexBinOp(tree_node *exp, Value *DestLoc); // L-Value Expressions. - LValue EmitLV_INDIRECT_REF(tree_node *exp); LValue EmitLV_DECL(tree_node *exp); LValue EmitLV_ARRAY_REF(tree_node *exp); LValue EmitLV_COMPONENT_REF(tree_node *exp); @@ -515,8 +514,6 @@ static Constant *EmitLV_STRING_CST(tree_node *exp); static Constant *EmitLV_COMPONENT_REF(tree_node *exp); static Constant *EmitLV_ARRAY_REF(tree_node *exp); - static Constant *EmitLV_INDIRECT_REF(tree_node *exp); - static Constant *EmitLV_COMPOUND_LITERAL_EXPR(tree_node *exp); }; #endif _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits