Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.2
gcc43
pr34043-3.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pr34043-3.diff of Package gcc43
2008-02-29 Richard Guenther <rguenther@suse.de> * fold-const.c (fold_unary): Fold VIEW_CONVERT_EXPR of integral and pointer arguments which do not change the precision to NOP_EXPRs. [* tree-ssa-loop-ivopts.c (may_be_nonaddressable_p): Adjust VIEW_CONVERT_EXPR case. -- obsoleted by later 4.3 commit ] Index: gcc/fold-const.c =================================================================== *** gcc/fold-const.c.orig 2008-02-27 15:07:55.000000000 +0100 --- gcc/fold-const.c 2008-03-11 13:51:09.000000000 +0100 *************** fold_unary (enum tree_code code, tree ty *** 8263,8275 **** case VIEW_CONVERT_EXPR: if (TREE_TYPE (op0) == type) return op0; ! if (TREE_CODE (op0) == VIEW_CONVERT_EXPR ! || (TREE_CODE (op0) == NOP_EXPR ! && INTEGRAL_TYPE_P (TREE_TYPE (op0)) ! && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (op0, 0))) ! && TYPE_PRECISION (TREE_TYPE (op0)) ! == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0, 0))))) return fold_build1 (VIEW_CONVERT_EXPR, type, TREE_OPERAND (op0, 0)); return fold_view_convert_expr (type, op0); case NEGATE_EXPR: --- 8263,8295 ---- case VIEW_CONVERT_EXPR: if (TREE_TYPE (op0) == type) return op0; ! if (TREE_CODE (op0) == VIEW_CONVERT_EXPR) return fold_build1 (VIEW_CONVERT_EXPR, type, TREE_OPERAND (op0, 0)); + + /* For integral conversions with the same precision or pointer + conversions use a NOP_EXPR instead. */ + if ((INTEGRAL_TYPE_P (type) + || POINTER_TYPE_P (type)) + && (INTEGRAL_TYPE_P (TREE_TYPE (op0)) + || POINTER_TYPE_P (TREE_TYPE (op0))) + && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (op0)) + /* Do not muck with VIEW_CONVERT_EXPRs that convert from + a sub-type to its base type as generated by the Ada FE. */ + && !(INTEGRAL_TYPE_P (TREE_TYPE (op0)) + && TREE_TYPE (TREE_TYPE (op0)))) + return fold_convert (type, op0); + + /* Strip inner integral conversions that do not change the precision. */ + if ((TREE_CODE (op0) == NOP_EXPR + || TREE_CODE (op0) == CONVERT_EXPR) + && (INTEGRAL_TYPE_P (TREE_TYPE (op0)) + || POINTER_TYPE_P (TREE_TYPE (op0))) + && (INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (op0, 0))) + || POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (op0, 0)))) + && (TYPE_PRECISION (TREE_TYPE (op0)) + == TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (op0, 0))))) + return fold_build1 (VIEW_CONVERT_EXPR, type, TREE_OPERAND (op0, 0)); + return fold_view_convert_expr (type, op0); case NEGATE_EXPR: Index: gcc/tree-ssa-loop-im.c =================================================================== *** gcc/tree-ssa-loop-im.c.orig 2008-02-19 10:55:59.000000000 +0100 --- gcc/tree-ssa-loop-im.c 2008-03-11 14:44:25.000000000 +0100 *************** for_each_index (tree *addr_p, bool (*cbc *** 208,213 **** --- 208,217 ---- case CONSTRUCTOR: return true; + case ADDR_EXPR: + gcc_assert (is_gimple_min_invariant (*addr_p)); + return true; + case TARGET_MEM_REF: idx = &TMR_BASE (*addr_p); if (*idx
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor