static void process_func (WN *wn) { if (vflag) printf ("%*sProcessing FUNC: %s\n", indent, "", ST_name(WN_st(wn))); #ifdef WN_WALK indent += indent_inc; process_wn (wn); indent -= indent_inc; #endif }
// IsVarRefTranslatableToXAIF: Returns whether 'wn' a variable // reference that can be translated into XAIF. 'wn' must be an // expression; IOW it cannot be a store (=statement). bool IsVarRefTranslatableToXAIF(const WN* wn) { // FIXME: IsScalarRef should perhaps be is_translatable_to_xaif OPERATOR opr = WN_operator(wn); if (!OPERATOR_is_expression(opr)) { return false; } switch (opr) { // FIXME // ILOADX, ISTOREX // ILDBITS, ISTBITS // MLOAD, MSTORE: memref // OPR_IDNAME: case OPR_LDA: case OPR_LDMA: return true; // FIXME: can this be used in some evil way? case OPR_LDID: case OPR_LDBITS: { // symref TY_IDX baseobj_ty = ST_type(WN_st(wn)); TY_IDX refobj_ty = WN_Tree_Type(wn); return (IsScalarRef(baseobj_ty, refobj_ty)); } case OPR_ILOAD: { // memref TY_IDX baseobj_ty = TY_pointed(WN_load_addr_ty(wn)); TY_IDX refobj_ty = WN_Tree_Type(wn); return (IsScalarRef(baseobj_ty, refobj_ty)); } case OPR_ARRAY: case OPR_ARRSECTION: // FIXME: can we do arrsection? case OPR_ARRAYEXP: return true; } // switch return false; }